diff --git a/[refs] b/[refs] index af108987dd58..8b7cf890474c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9fc0178caa30070f65bded433f91756491a3cf26 +refs/heads/master: ce60a2f15764f296b0467960759351702c7d2986 diff --git a/trunk/Documentation/ABI/testing/debugfs-pktcdvd b/trunk/Documentation/ABI/testing/debugfs-pktcdvd index cf11736acb76..bf9c16b64c34 100644 --- a/trunk/Documentation/ABI/testing/debugfs-pktcdvd +++ b/trunk/Documentation/ABI/testing/debugfs-pktcdvd @@ -1,4 +1,4 @@ -What: /sys/kernel/debug/pktcdvd/pktcdvd[0-7] +What: /debug/pktcdvd/pktcdvd[0-7] Date: Oct. 2006 KernelVersion: 2.6.20 Contact: Thomas Maier @@ -10,10 +10,10 @@ debugfs interface The pktcdvd module (packet writing driver) creates these files in debugfs: -/sys/kernel/debug/pktcdvd/pktcdvd[0-7]/ +/debug/pktcdvd/pktcdvd[0-7]/ info (0444) Lots of driver statistics and infos. Example: ------- -cat /sys/kernel/debug/pktcdvd/pktcdvd0/info +cat /debug/pktcdvd/pktcdvd0/info diff --git a/trunk/Documentation/DocBook/Makefile b/trunk/Documentation/DocBook/Makefile index 8918a32c6b3a..a3a83d38f96f 100644 --- a/trunk/Documentation/DocBook/Makefile +++ b/trunk/Documentation/DocBook/Makefile @@ -31,7 +31,7 @@ PS_METHOD = $(prefer-db2x) ### # The targets that may be used. -PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs +PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) xmldocs: $(BOOKS) @@ -213,12 +213,11 @@ silent_gen_xml = : dochelp: @echo ' Linux kernel internal documentation in different formats:' @echo ' htmldocs - HTML' + @echo ' installmandocs - install man pages generated by mandocs' + @echo ' mandocs - man pages' @echo ' pdfdocs - PDF' @echo ' psdocs - Postscript' @echo ' xmldocs - XML DocBook' - @echo ' mandocs - man pages' - @echo ' installmandocs - install man pages generated by mandocs' - @echo ' cleandocs - clean all generated DocBook files' ### # Temporary files left by various tools @@ -236,10 +235,6 @@ clean-files := $(DOCBOOKS) \ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man -cleandocs: - $(Q)rm -f $(call objectify, $(clean-files)) - $(Q)rm -rf $(call objectify, $(clean-dirs)) - # Declare the contents of the .PHONY variable as phony. We keep that # information in a variable se we can use it in if_changed and friends. diff --git a/trunk/Documentation/cgroups/cpuacct.txt b/trunk/Documentation/cgroups/cpuacct.txt index 8b930946c52a..bb775fbe43d7 100644 --- a/trunk/Documentation/cgroups/cpuacct.txt +++ b/trunk/Documentation/cgroups/cpuacct.txt @@ -30,21 +30,3 @@ The above steps create a new group g1 and move the current shell process (bash) into it. CPU time consumed by this bash and its children can be obtained from g1/cpuacct.usage and the same is accumulated in /cgroups/cpuacct.usage also. - -cpuacct.stat file lists a few statistics which further divide the -CPU time obtained by the cgroup into user and system times. Currently -the following statistics are supported: - -user: Time spent by tasks of the cgroup in user mode. -system: Time spent by tasks of the cgroup in kernel mode. - -user and system are in USER_HZ unit. - -cpuacct controller uses percpu_counter interface to collect user and -system times. This has two side effects: - -- It is theoretically possible to see wrong values for user and system times. - This is because percpu_counter_read() on 32bit systems isn't safe - against concurrent writes. -- It is possible to see slightly outdated values for user and system times - due to the batch processing nature of percpu_counter. diff --git a/trunk/Documentation/cgroups/memory.txt b/trunk/Documentation/cgroups/memory.txt index 1a608877b14e..a98a7fe7aabb 100644 --- a/trunk/Documentation/cgroups/memory.txt +++ b/trunk/Documentation/cgroups/memory.txt @@ -6,14 +6,15 @@ used here with the memory controller that is used in hardware. Salient features -a. Enable control of Anonymous, Page Cache (mapped and unmapped) and - Swap Cache memory pages. +a. Enable control of both RSS (mapped) and Page Cache (unmapped) pages b. The infrastructure allows easy addition of other types of memory to control c. Provides *zero overhead* for non memory controller users d. Provides a double LRU: global memory pressure causes reclaim from the global LRU; a cgroup on hitting a limit, reclaims from the per cgroup LRU +NOTE: Swap Cache (unmapped) is not accounted now. + Benefits and Purpose of the memory controller The memory controller isolates the memory behaviour of a group of tasks @@ -289,44 +290,34 @@ will be charged as a new owner of it. moved to the parent. If you want to avoid that, force_empty will be useful. 5.2 stat file - -memory.stat file includes following statistics - -cache - # of bytes of page cache memory. -rss - # of bytes of anonymous and swap cache memory. -pgpgin - # of pages paged in (equivalent to # of charging events). -pgpgout - # of pages paged out (equivalent to # of uncharging events). -active_anon - # of bytes of anonymous and swap cache memory on active - lru list. -inactive_anon - # of bytes of anonymous memory and swap cache memory on - inactive lru list. -active_file - # of bytes of file-backed memory on active lru list. -inactive_file - # of bytes of file-backed memory on inactive lru list. -unevictable - # of bytes of memory that cannot be reclaimed (mlocked etc). - -The following additional stats are dependent on CONFIG_DEBUG_VM. - -inactive_ratio - VM internal parameter. (see mm/page_alloc.c) -recent_rotated_anon - VM internal parameter. (see mm/vmscan.c) -recent_rotated_file - VM internal parameter. (see mm/vmscan.c) -recent_scanned_anon - VM internal parameter. (see mm/vmscan.c) -recent_scanned_file - VM internal parameter. (see mm/vmscan.c) - -Memo: + memory.stat file includes following statistics (now) + cache - # of pages from page-cache and shmem. + rss - # of pages from anonymous memory. + pgpgin - # of event of charging + pgpgout - # of event of uncharging + active_anon - # of pages on active lru of anon, shmem. + inactive_anon - # of pages on active lru of anon, shmem + active_file - # of pages on active lru of file-cache + inactive_file - # of pages on inactive lru of file cache + unevictable - # of pages cannot be reclaimed.(mlocked etc) + + Below is depend on CONFIG_DEBUG_VM. + inactive_ratio - VM internal parameter. (see mm/page_alloc.c) + recent_rotated_anon - VM internal parameter. (see mm/vmscan.c) + recent_rotated_file - VM internal parameter. (see mm/vmscan.c) + recent_scanned_anon - VM internal parameter. (see mm/vmscan.c) + recent_scanned_file - VM internal parameter. (see mm/vmscan.c) + + Memo: recent_rotated means recent frequency of lru rotation. recent_scanned means recent # of scans to lru. showing for better debug please see the code for meanings. -Note: - Only anonymous and swap cache memory is listed as part of 'rss' stat. - This should not be confused with the true 'resident set size' or the - amount of physical memory used by the cgroup. Per-cgroup rss - accounting is not done yet. 5.3 swappiness Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only. - Following cgroups' swapiness can't be changed. + Following cgroup's swapiness can't be changed. - root cgroup (uses /proc/sys/vm/swappiness). - a cgroup which uses hierarchy and it has child cgroup. - a cgroup which uses hierarchy and not the root of hierarchy. diff --git a/trunk/Documentation/cgroups/resource_counter.txt b/trunk/Documentation/cgroups/resource_counter.txt index 95b24d766eab..f196ac1d7d25 100644 --- a/trunk/Documentation/cgroups/resource_counter.txt +++ b/trunk/Documentation/cgroups/resource_counter.txt @@ -47,18 +47,13 @@ to work with it. 2. Basic accounting routines - a. void res_counter_init(struct res_counter *rc, - struct res_counter *rc_parent) + a. void res_counter_init(struct res_counter *rc) Initializes the resource counter. As usual, should be the first routine called for a new counter. - The struct res_counter *parent can be used to define a hierarchical - child -> parent relationship directly in the res_counter structure, - NULL can be used to define no relationship. - - c. int res_counter_charge(struct res_counter *rc, unsigned long val, - struct res_counter **limit_fail_at) + b. int res_counter_charge[_locked] + (struct res_counter *rc, unsigned long val) When a resource is about to be allocated it has to be accounted with the appropriate resource counter (controller should determine @@ -72,25 +67,15 @@ to work with it. * if the charging is performed first, then it should be uncharged on error path (if the one is called). - If the charging fails and a hierarchical dependency exists, the - limit_fail_at parameter is set to the particular res_counter element - where the charging failed. - - d. int res_counter_charge_locked - (struct res_counter *rc, unsigned long val) - - The same as res_counter_charge(), but it must not acquire/release the - res_counter->lock internally (it must be called with res_counter->lock - held). - - e. void res_counter_uncharge[_locked] + c. void res_counter_uncharge[_locked] (struct res_counter *rc, unsigned long val) When a resource is released (freed) it should be de-accounted from the resource counter it was accounted to. This is called "uncharging". - The _locked routines imply that the res_counter->lock is taken. + The _locked routines imply that the res_counter->lock is taken. + 2.1 Other accounting routines diff --git a/trunk/Documentation/feature-removal-schedule.txt b/trunk/Documentation/feature-removal-schedule.txt index de491a3e2313..7e2af10e8264 100644 --- a/trunk/Documentation/feature-removal-schedule.txt +++ b/trunk/Documentation/feature-removal-schedule.txt @@ -428,12 +428,3 @@ Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to After a reasonable transition period, we will remove the legacy fakephp interface. Who: Alex Chiang - ---------------------------- - -What: i2c-voodoo3 driver -When: October 2009 -Why: Superseded by tdfxfb. I2C/DDC support used to live in a separate - driver but this caused driver conflicts. -Who: Jean Delvare - Krzysztof Helt diff --git a/trunk/Documentation/trace/ftrace.txt b/trunk/Documentation/ftrace.txt similarity index 100% rename from trunk/Documentation/trace/ftrace.txt rename to trunk/Documentation/ftrace.txt diff --git a/trunk/Documentation/infiniband/ipoib.txt b/trunk/Documentation/infiniband/ipoib.txt index 6d40f00b358c..864ff3283780 100644 --- a/trunk/Documentation/infiniband/ipoib.txt +++ b/trunk/Documentation/infiniband/ipoib.txt @@ -24,49 +24,6 @@ Partitions and P_Keys The P_Key for any interface is given by the "pkey" file, and the main interface for a subinterface is in "parent." -Datagram vs Connected modes - - The IPoIB driver supports two modes of operation: datagram and - connected. The mode is set and read through an interface's - /sys/class/net//mode file. - - In datagram mode, the IB UD (Unreliable Datagram) transport is used - and so the interface MTU has is equal to the IB L2 MTU minus the - IPoIB encapsulation header (4 bytes). For example, in a typical IB - fabric with a 2K MTU, the IPoIB MTU will be 2048 - 4 = 2044 bytes. - - In connected mode, the IB RC (Reliable Connected) transport is used. - Connected mode is to takes advantage of the connected nature of the - IB transport and allows an MTU up to the maximal IP packet size of - 64K, which reduces the number of IP packets needed for handling - large UDP datagrams, TCP segments, etc and increases the performance - for large messages. - - In connected mode, the interface's UD QP is still used for multicast - and communication with peers that don't support connected mode. In - this case, RX emulation of ICMP PMTU packets is used to cause the - networking stack to use the smaller UD MTU for these neighbours. - -Stateless offloads - - If the IB HW supports IPoIB stateless offloads, IPoIB advertises - TCP/IP checksum and/or Large Send (LSO) offloading capability to the - network stack. - - Large Receive (LRO) offloading is also implemented and may be turned - on/off using ethtool calls. Currently LRO is supported only for - checksum offload capable devices. - - Stateless offloads are supported only in datagram mode. - -Interrupt moderation - - If the underlying IB device supports CQ event moderation, one can - use ethtool to set interrupt mitigation parameters and thus reduce - the overhead incurred by handling interrupts. The main code path of - IPoIB doesn't use events for TX completion signaling so only RX - moderation is supported. - Debugging Information By compiling the IPoIB driver with CONFIG_INFINIBAND_IPOIB_DEBUG set @@ -98,5 +55,3 @@ References http://ietf.org/rfc/rfc4391.txt IP over InfiniBand (IPoIB) Architecture (RFC 4392) http://ietf.org/rfc/rfc4392.txt - IP over InfiniBand: Connected Mode (RFC 4755) - http://ietf.org/rfc/rfc4755.txt diff --git a/trunk/Documentation/input/rotary-encoder.txt b/trunk/Documentation/input/rotary-encoder.txt deleted file mode 100644 index 435102a26d96..000000000000 --- a/trunk/Documentation/input/rotary-encoder.txt +++ /dev/null @@ -1,101 +0,0 @@ -rotary-encoder - a generic driver for GPIO connected devices -Daniel Mack , Feb 2009 - -0. Function ------------ - -Rotary encoders are devices which are connected to the CPU or other -peripherals with two wires. The outputs are phase-shifted by 90 degrees -and by triggering on falling and rising edges, the turn direction can -be determined. - -The phase diagram of these two outputs look like this: - - _____ _____ _____ - | | | | | | - Channel A ____| |_____| |_____| |____ - - : : : : : : : : : : : : - __ _____ _____ _____ - | | | | | | | - Channel B |_____| |_____| |_____| |__ - - : : : : : : : : : : : : - Event a b c d a b c d a b c d - - |<-------->| - one step - - -For more information, please see - http://en.wikipedia.org/wiki/Rotary_encoder - - -1. Events / state machine -------------------------- - -a) Rising edge on channel A, channel B in low state - This state is used to recognize a clockwise turn - -b) Rising edge on channel B, channel A in high state - When entering this state, the encoder is put into 'armed' state, - meaning that there it has seen half the way of a one-step transition. - -c) Falling edge on channel A, channel B in high state - This state is used to recognize a counter-clockwise turn - -d) Falling edge on channel B, channel A in low state - Parking position. If the encoder enters this state, a full transition - should have happend, unless it flipped back on half the way. The - 'armed' state tells us about that. - -2. Platform requirements ------------------------- - -As there is no hardware dependent call in this driver, the platform it is -used with must support gpiolib. Another requirement is that IRQs must be -able to fire on both edges. - - -3. Board integration --------------------- - -To use this driver in your system, register a platform_device with the -name 'rotary-encoder' and associate the IRQs and some specific platform -data with it. - -struct rotary_encoder_platform_data is declared in -include/linux/rotary-encoder.h and needs to be filled with the number of -steps the encoder has and can carry information about externally inverted -signals (because of used invertig buffer or other reasons). - -Because GPIO to IRQ mapping is platform specific, this information must -be given in seperately to the driver. See the example below. - ------------------- - -/* board support file example */ - -#include -#include - -#define GPIO_ROTARY_A 1 -#define GPIO_ROTARY_B 2 - -static struct rotary_encoder_platform_data my_rotary_encoder_info = { - .steps = 24, - .axis = ABS_X, - .gpio_a = GPIO_ROTARY_A, - .gpio_b = GPIO_ROTARY_B, - .inverted_a = 0, - .inverted_b = 0, -}; - -static struct platform_device rotary_encoder_device = { - .name = "rotary-encoder", - .id = 0, - .dev = { - .platform_data = &my_rotary_encoder_info, - } -}; - diff --git a/trunk/Documentation/kbuild/makefiles.txt b/trunk/Documentation/kbuild/makefiles.txt index d4b05672f9f7..51104f9194a5 100644 --- a/trunk/Documentation/kbuild/makefiles.txt +++ b/trunk/Documentation/kbuild/makefiles.txt @@ -40,16 +40,10 @@ This document describes the Linux kernel Makefiles. --- 6.7 Custom kbuild commands --- 6.8 Preprocessing linker scripts - === 7 Kbuild syntax for exported headers - --- 7.1 header-y - --- 7.2 objhdr-y - --- 7.3 destination-y - --- 7.4 unifdef-y (deprecated) - - === 8 Kbuild Variables - === 9 Makefile language - === 10 Credits - === 11 TODO + === 7 Kbuild Variables + === 8 Makefile language + === 9 Credits + === 10 TODO === 1 Overview @@ -1149,69 +1143,8 @@ When kbuild executes, the following steps are followed (roughly): The kbuild infrastructure for *lds file are used in several architecture-specific files. -=== 7 Kbuild syntax for exported headers - -The kernel include a set of headers that is exported to userspace. -Many headers can be exported as-is but other headers requires a -minimal pre-processing before they are ready for user-space. -The pre-processing does: -- drop kernel specific annotations -- drop include of compiler.h -- drop all sections that is kernel internat (guarded by ifdef __KERNEL__) - -Each relevant directory contain a file name "Kbuild" which specify the -headers to be exported. -See subsequent chapter for the syntax of the Kbuild file. - - --- 7.1 header-y - - header-y specify header files to be exported. - - Example: - #include/linux/Kbuild - header-y += usb/ - header-y += aio_abi.h - - The convention is to list one file per line and - preferably in alphabetic order. - - header-y also specify which subdirectories to visit. - A subdirectory is identified by a trailing '/' which - can be seen in the example above for the usb subdirectory. - - Subdirectories are visited before their parent directories. - - --- 7.2 objhdr-y - - objhdr-y specifies generated files to be exported. - Generated files are special as they need to be looked - up in another directory when doing 'make O=...' builds. - - Example: - #include/linux/Kbuild - objhdr-y += version.h - - --- 7.3 destination-y - - When an architecture have a set of exported headers that needs to be - exported to a different directory destination-y is used. - destination-y specify the destination directory for all exported - headers in the file where it is present. - - Example: - #arch/xtensa/platforms/s6105/include/platform/Kbuild - destination-y := include/linux - - In the example above all exported headers in the Kbuild file - will be located in the directory "include/linux" when exported. - - - --- 7.4 unifdef-y (deprecated) - - unifdef-y is deprecated. A direct replacement is header-y. - -=== 8 Kbuild Variables +=== 7 Kbuild Variables The top Makefile exports the following variables: @@ -1273,7 +1206,7 @@ The top Makefile exports the following variables: INSTALL_MOD_STRIP will used as the option(s) to the strip command. -=== 9 Makefile language +=== 8 Makefile language The kernel Makefiles are designed to be run with GNU Make. The Makefiles use only the documented features of GNU Make, but they do use many @@ -1292,14 +1225,14 @@ time the left-hand side is used. There are some cases where "=" is appropriate. Usually, though, ":=" is the right choice. -=== 10 Credits +=== 9 Credits Original version made by Michael Elizabeth Chastain, Updates by Kai Germaschewski Updates by Sam Ravnborg Language QA by Jan Engelhardt -=== 11 TODO +=== 10 TODO - Describe how kbuild supports shipped files with _shipped. - Generating offset header files. diff --git a/trunk/Documentation/sparse.txt b/trunk/Documentation/sparse.txt index 34c76a55bc04..42f43fa59f24 100644 --- a/trunk/Documentation/sparse.txt +++ b/trunk/Documentation/sparse.txt @@ -42,14 +42,6 @@ sure that bitwise types don't get mixed up (little-endian vs big-endian vs cpu-endian vs whatever), and there the constant "0" really _is_ special. -__bitwise__ - to be used for relatively compact stuff (gfp_t, etc.) that -is mostly warning-free and is supposed to stay that way. Warnings will -be generated without __CHECK_ENDIAN__. - -__bitwise - noisy stuff; in particular, __le*/__be* are that. We really -don't want to drown in noise unless we'd explicitly asked for it. - - Getting sparse ~~~~~~~~~~~~~~ diff --git a/trunk/Documentation/sysctl/net.txt b/trunk/Documentation/sysctl/net.txt index df38ef046f8d..a34d55b65441 100644 --- a/trunk/Documentation/sysctl/net.txt +++ b/trunk/Documentation/sysctl/net.txt @@ -95,7 +95,7 @@ of struct cmsghdr structures with appended data. There is only one file in this directory. unix_dgram_qlen limits the max number of datagrams queued in Unix domain -socket's buffer. It will not take effect unless PF_UNIX flag is specified. +socket's buffer. It will not take effect unless PF_UNIX flag is spicified. 3. /proc/sys/net/ipv4 - IPV4 settings diff --git a/trunk/Documentation/tomoyo.txt b/trunk/Documentation/tomoyo.txt deleted file mode 100644 index b3a232cae7f8..000000000000 --- a/trunk/Documentation/tomoyo.txt +++ /dev/null @@ -1,55 +0,0 @@ ---- What is TOMOYO? --- - -TOMOYO is a name-based MAC extension (LSM module) for the Linux kernel. - -LiveCD-based tutorials are available at -http://tomoyo.sourceforge.jp/en/1.6.x/1st-step/ubuntu8.04-live/ -http://tomoyo.sourceforge.jp/en/1.6.x/1st-step/centos5-live/ . -Though these tutorials use non-LSM version of TOMOYO, they are useful for you -to know what TOMOYO is. - ---- How to enable TOMOYO? --- - -Build the kernel with CONFIG_SECURITY_TOMOYO=y and pass "security=tomoyo" on -kernel's command line. - -Please see http://tomoyo.sourceforge.jp/en/2.2.x/ for details. - ---- Where is documentation? --- - -User <-> Kernel interface documentation is available at -http://tomoyo.sourceforge.jp/en/2.2.x/policy-reference.html . - -Materials we prepared for seminars and symposiums are available at -http://sourceforge.jp/projects/tomoyo/docs/?category_id=532&language_id=1 . -Below lists are chosen from three aspects. - -What is TOMOYO? - TOMOYO Linux Overview - http://sourceforge.jp/projects/tomoyo/docs/lca2009-takeda.pdf - TOMOYO Linux: pragmatic and manageable security for Linux - http://sourceforge.jp/projects/tomoyo/docs/freedomhectaipei-tomoyo.pdf - TOMOYO Linux: A Practical Method to Understand and Protect Your Own Linux Box - http://sourceforge.jp/projects/tomoyo/docs/PacSec2007-en-no-demo.pdf - -What can TOMOYO do? - Deep inside TOMOYO Linux - http://sourceforge.jp/projects/tomoyo/docs/lca2009-kumaneko.pdf - The role of "pathname based access control" in security. - http://sourceforge.jp/projects/tomoyo/docs/lfj2008-bof.pdf - -History of TOMOYO? - Realities of Mainlining - http://sourceforge.jp/projects/tomoyo/docs/lfj2008.pdf - ---- What is future plan? --- - -We believe that inode based security and name based security are complementary -and both should be used together. But unfortunately, so far, we cannot enable -multiple LSM modules at the same time. We feel sorry that you have to give up -SELinux/SMACK/AppArmor etc. when you want to use TOMOYO. - -We hope that LSM becomes stackable in future. Meanwhile, you can use non-LSM -version of TOMOYO, available at http://tomoyo.sourceforge.jp/en/1.6.x/ . -LSM version of TOMOYO is a subset of non-LSM version of TOMOYO. We are planning -to port non-LSM version's functionalities to LSM versions. diff --git a/trunk/Documentation/trace/tracepoints.txt b/trunk/Documentation/tracepoints.txt similarity index 100% rename from trunk/Documentation/trace/tracepoints.txt rename to trunk/Documentation/tracepoints.txt diff --git a/trunk/Documentation/trace/mmiotrace.txt b/trunk/Documentation/tracers/mmiotrace.txt similarity index 100% rename from trunk/Documentation/trace/mmiotrace.txt rename to trunk/Documentation/tracers/mmiotrace.txt diff --git a/trunk/Documentation/vm/00-INDEX b/trunk/Documentation/vm/00-INDEX index 2f77ced35df7..2131b00b63f6 100644 --- a/trunk/Documentation/vm/00-INDEX +++ b/trunk/Documentation/vm/00-INDEX @@ -1,7 +1,5 @@ 00-INDEX - this file. -active_mm.txt - - An explanation from Linus about tsk->active_mm vs tsk->mm. balance - various information on memory balancing. hugetlbpage.txt diff --git a/trunk/Documentation/vm/active_mm.txt b/trunk/Documentation/vm/active_mm.txt deleted file mode 100644 index 4ee1f643d897..000000000000 --- a/trunk/Documentation/vm/active_mm.txt +++ /dev/null @@ -1,83 +0,0 @@ -List: linux-kernel -Subject: Re: active_mm -From: Linus Torvalds -Date: 1999-07-30 21:36:24 - -Cc'd to linux-kernel, because I don't write explanations all that often, -and when I do I feel better about more people reading them. - -On Fri, 30 Jul 1999, David Mosberger wrote: -> -> Is there a brief description someplace on how "mm" vs. "active_mm" in -> the task_struct are supposed to be used? (My apologies if this was -> discussed on the mailing lists---I just returned from vacation and -> wasn't able to follow linux-kernel for a while). - -Basically, the new setup is: - - - we have "real address spaces" and "anonymous address spaces". The - difference is that an anonymous address space doesn't care about the - user-level page tables at all, so when we do a context switch into an - anonymous address space we just leave the previous address space - active. - - The obvious use for a "anonymous address space" is any thread that - doesn't need any user mappings - all kernel threads basically fall into - this category, but even "real" threads can temporarily say that for - some amount of time they are not going to be interested in user space, - and that the scheduler might as well try to avoid wasting time on - switching the VM state around. Currently only the old-style bdflush - sync does that. - - - "tsk->mm" points to the "real address space". For an anonymous process, - tsk->mm will be NULL, for the logical reason that an anonymous process - really doesn't _have_ a real address space at all. - - - however, we obviously need to keep track of which address space we - "stole" for such an anonymous user. For that, we have "tsk->active_mm", - which shows what the currently active address space is. - - The rule is that for a process with a real address space (ie tsk->mm is - non-NULL) the active_mm obviously always has to be the same as the real - one. - - For a anonymous process, tsk->mm == NULL, and tsk->active_mm is the - "borrowed" mm while the anonymous process is running. When the - anonymous process gets scheduled away, the borrowed address space is - returned and cleared. - -To support all that, the "struct mm_struct" now has two counters: a -"mm_users" counter that is how many "real address space users" there are, -and a "mm_count" counter that is the number of "lazy" users (ie anonymous -users) plus one if there are any real users. - -Usually there is at least one real user, but it could be that the real -user exited on another CPU while a lazy user was still active, so you do -actually get cases where you have a address space that is _only_ used by -lazy users. That is often a short-lived state, because once that thread -gets scheduled away in favour of a real thread, the "zombie" mm gets -released because "mm_users" becomes zero. - -Also, a new rule is that _nobody_ ever has "init_mm" as a real MM any -more. "init_mm" should be considered just a "lazy context when no other -context is available", and in fact it is mainly used just at bootup when -no real VM has yet been created. So code that used to check - - if (current->mm == &init_mm) - -should generally just do - - if (!current->mm) - -instead (which makes more sense anyway - the test is basically one of "do -we have a user context", and is generally done by the page fault handler -and things like that). - -Anyway, I put a pre-patch-2.3.13-1 on ftp.kernel.org just a moment ago, -because it slightly changes the interfaces to accomodate the alpha (who -would have thought it, but the alpha actually ends up having one of the -ugliest context switch codes - unlike the other architectures where the MM -and register state is separate, the alpha PALcode joins the two, and you -need to switch both together). - -(From http://marc.info/?l=linux-kernel&m=93337278602211&w=2) diff --git a/trunk/Documentation/trace/kmemtrace.txt b/trunk/Documentation/vm/kmemtrace.txt similarity index 100% rename from trunk/Documentation/trace/kmemtrace.txt rename to trunk/Documentation/vm/kmemtrace.txt diff --git a/trunk/Documentation/vm/unevictable-lru.txt b/trunk/Documentation/vm/unevictable-lru.txt index 2d70d0d95108..0706a7282a8c 100644 --- a/trunk/Documentation/vm/unevictable-lru.txt +++ b/trunk/Documentation/vm/unevictable-lru.txt @@ -1,691 +1,588 @@ - ============================== - UNEVICTABLE LRU INFRASTRUCTURE - ============================== - -======== -CONTENTS -======== - - (*) The Unevictable LRU - - - The unevictable page list. - - Memory control group interaction. - - Marking address spaces unevictable. - - Detecting Unevictable Pages. - - vmscan's handling of unevictable pages. - - (*) mlock()'d pages. - - - History. - - Basic management. - - mlock()/mlockall() system call handling. - - Filtering special vmas. - - munlock()/munlockall() system call handling. - - Migrating mlocked pages. - - mmap(MAP_LOCKED) system call handling. - - munmap()/exit()/exec() system call handling. - - try_to_unmap(). - - try_to_munlock() reverse map scan. - - Page reclaim in shrink_*_list(). - - -============ -INTRODUCTION -============ - -This document describes the Linux memory manager's "Unevictable LRU" -infrastructure and the use of this to manage several types of "unevictable" -pages. - -The document attempts to provide the overall rationale behind this mechanism -and the rationale for some of the design decisions that drove the -implementation. The latter design rationale is discussed in the context of an -implementation description. Admittedly, one can obtain the implementation -details - the "what does it do?" - by reading the code. One hopes that the -descriptions below add value by provide the answer to "why does it do that?". - - -=================== -THE UNEVICTABLE LRU -=================== - -The Unevictable LRU facility adds an additional LRU list to track unevictable -pages and to hide these pages from vmscan. This mechanism is based on a patch -by Larry Woodman of Red Hat to address several scalability problems with page -reclaim in Linux. The problems have been observed at customer sites on large -memory x86_64 systems. - -To illustrate this with an example, a non-NUMA x86_64 platform with 128GB of -main memory will have over 32 million 4k pages in a single zone. When a large -fraction of these pages are not evictable for any reason [see below], vmscan -will spend a lot of time scanning the LRU lists looking for the small fraction -of pages that are evictable. This can result in a situation where all CPUs are -spending 100% of their time in vmscan for hours or days on end, with the system -completely unresponsive. - -The unevictable list addresses the following classes of unevictable pages: - - (*) Those owned by ramfs. - - (*) Those mapped into SHM_LOCK'd shared memory regions. - (*) Those mapped into VM_LOCKED [mlock()ed] VMAs. - -The infrastructure may also be able to handle other conditions that make pages +This document describes the Linux memory management "Unevictable LRU" +infrastructure and the use of this infrastructure to manage several types +of "unevictable" pages. The document attempts to provide the overall +rationale behind this mechanism and the rationale for some of the design +decisions that drove the implementation. The latter design rationale is +discussed in the context of an implementation description. Admittedly, one +can obtain the implementation details--the "what does it do?"--by reading the +code. One hopes that the descriptions below add value by provide the answer +to "why does it do that?". + +Unevictable LRU Infrastructure: + +The Unevictable LRU adds an additional LRU list to track unevictable pages +and to hide these pages from vmscan. This mechanism is based on a patch by +Larry Woodman of Red Hat to address several scalability problems with page +reclaim in Linux. The problems have been observed at customer sites on large +memory x86_64 systems. For example, a non-numal x86_64 platform with 128GB +of main memory will have over 32 million 4k pages in a single zone. When a +large fraction of these pages are not evictable for any reason [see below], +vmscan will spend a lot of time scanning the LRU lists looking for the small +fraction of pages that are evictable. This can result in a situation where +all cpus are spending 100% of their time in vmscan for hours or days on end, +with the system completely unresponsive. + +The Unevictable LRU infrastructure addresses the following classes of +unevictable pages: + ++ page owned by ramfs ++ page mapped into SHM_LOCKed shared memory regions ++ page mapped into VM_LOCKED [mlock()ed] vmas + +The infrastructure might be able to handle other conditions that make pages unevictable, either by definition or by circumstance, in the future. -THE UNEVICTABLE PAGE LIST -------------------------- +The Unevictable LRU List The Unevictable LRU infrastructure consists of an additional, per-zone, LRU list called the "unevictable" list and an associated page flag, PG_unevictable, to -indicate that the page is being managed on the unevictable list. - -The PG_unevictable flag is analogous to, and mutually exclusive with, the -PG_active flag in that it indicates on which LRU list a page resides when -PG_lru is set. The unevictable list is compile-time configurable based on the -UNEVICTABLE_LRU Kconfig option. +indicate that the page is being managed on the unevictable list. The +PG_unevictable flag is analogous to, and mutually exclusive with, the PG_active +flag in that it indicates on which LRU list a page resides when PG_lru is set. +The unevictable LRU list is source configurable based on the UNEVICTABLE_LRU +Kconfig option. The Unevictable LRU infrastructure maintains unevictable pages on an additional LRU list for a few reasons: - (1) We get to "treat unevictable pages just like we treat other pages in the - system - which means we get to use the same code to manipulate them, the - same code to isolate them (for migrate, etc.), the same code to keep track - of the statistics, etc..." [Rik van Riel] - - (2) We want to be able to migrate unevictable pages between nodes for memory - defragmentation, workload management and memory hotplug. The linux kernel - can only migrate pages that it can successfully isolate from the LRU - lists. If we were to maintain pages elsewhere than on an LRU-like list, - where they can be found by isolate_lru_page(), we would prevent their - migration, unless we reworked migration code to find the unevictable pages - itself. +1) We get to "treat unevictable pages just like we treat other pages in the + system, which means we get to use the same code to manipulate them, the + same code to isolate them (for migrate, etc.), the same code to keep track + of the statistics, etc..." [Rik van Riel] +2) We want to be able to migrate unevictable pages between nodes--for memory + defragmentation, workload management and memory hotplug. The linux kernel + can only migrate pages that it can successfully isolate from the lru lists. + If we were to maintain pages elsewise than on an lru-like list, where they + can be found by isolate_lru_page(), we would prevent their migration, unless + we reworked migration code to find the unevictable pages. -The unevictable list does not differentiate between file-backed and anonymous, -swap-backed pages. This differentiation is only important while the pages are, -in fact, evictable. -The unevictable list benefits from the "arrayification" of the per-zone LRU -lists and statistics originally proposed and posted by Christoph Lameter. +The unevictable LRU list does not differentiate between file backed and swap +backed [anon] pages. This differentiation is only important while the pages +are, in fact, evictable. -The unevictable list does not use the LRU pagevec mechanism. Rather, -unevictable pages are placed directly on the page's zone's unevictable list -under the zone lru_lock. This allows us to prevent the stranding of pages on -the unevictable list when one task has the page isolated from the LRU and other -tasks are changing the "evictability" state of the page. +The unevictable LRU list benefits from the "arrayification" of the per-zone +LRU lists and statistics originally proposed and posted by Christoph Lameter. +The unevictable list does not use the lru pagevec mechanism. Rather, +unevictable pages are placed directly on the page's zone's unevictable +list under the zone lru_lock. The reason for this is to prevent stranding +of pages on the unevictable list when one task has the page isolated from the +lru and other tasks are changing the "evictability" state of the page. -MEMORY CONTROL GROUP INTERACTION --------------------------------- -The unevictable LRU facility interacts with the memory control group [aka -memory controller; see Documentation/cgroups/memory.txt] by extending the -lru_list enum. - -The memory controller data structure automatically gets a per-zone unevictable -list as a result of the "arrayification" of the per-zone LRU lists (one per -lru_list enum element). The memory controller tracks the movement of pages to -and from the unevictable list. +Unevictable LRU and Memory Controller Interaction +The memory controller data structure automatically gets a per zone unevictable +lru list as a result of the "arrayification" of the per-zone LRU lists. The +memory controller tracks the movement of pages to and from the unevictable list. When a memory control group comes under memory pressure, the controller will not attempt to reclaim pages on the unevictable list. This has a couple of -effects: - - (1) Because the pages are "hidden" from reclaim on the unevictable list, the - reclaim process can be more efficient, dealing only with pages that have a - chance of being reclaimed. - - (2) On the other hand, if too many of the pages charged to the control group - are unevictable, the evictable portion of the working set of the tasks in - the control group may not fit into the available memory. This can cause - the control group to thrash or to OOM-kill tasks. - - -MARKING ADDRESS SPACES UNEVICTABLE ----------------------------------- - -For facilities such as ramfs none of the pages attached to the address space -may be evicted. To prevent eviction of any such pages, the AS_UNEVICTABLE -address space flag is provided, and this can be manipulated by a filesystem -using a number of wrapper functions: - - (*) void mapping_set_unevictable(struct address_space *mapping); - - Mark the address space as being completely unevictable. - - (*) void mapping_clear_unevictable(struct address_space *mapping); - - Mark the address space as being evictable. - - (*) int mapping_unevictable(struct address_space *mapping); - - Query the address space, and return true if it is completely - unevictable. - -These are currently used in two places in the kernel: - - (1) By ramfs to mark the address spaces of its inodes when they are created, - and this mark remains for the life of the inode. - - (2) By SYSV SHM to mark SHM_LOCK'd address spaces until SHM_UNLOCK is called. - - Note that SHM_LOCK is not required to page in the locked pages if they're - swapped out; the application must touch the pages manually if it wants to - ensure they're in memory. - - -DETECTING UNEVICTABLE PAGES ---------------------------- - -The function page_evictable() in vmscan.c determines whether a page is -evictable or not using the query function outlined above [see section "Marking -address spaces unevictable"] to check the AS_UNEVICTABLE flag. - -For address spaces that are so marked after being populated (as SHM regions -might be), the lock action (eg: SHM_LOCK) can be lazy, and need not populate -the page tables for the region as does, for example, mlock(), nor need it make -any special effort to push any pages in the SHM_LOCK'd area to the unevictable -list. Instead, vmscan will do this if and when it encounters the pages during -a reclamation scan. - -On an unlock action (such as SHM_UNLOCK), the unlocker (eg: shmctl()) must scan -the pages in the region and "rescue" them from the unevictable list if no other -condition is keeping them unevictable. If an unevictable region is destroyed, -the pages are also "rescued" from the unevictable list in the process of -freeing them. - -page_evictable() also checks for mlocked pages by testing an additional page -flag, PG_mlocked (as wrapped by PageMlocked()). If the page is NOT mlocked, -and a non-NULL VMA is supplied, page_evictable() will check whether the VMA is +effects. Because the pages are "hidden" from reclaim on the unevictable list, +the reclaim process can be more efficient, dealing only with pages that have +a chance of being reclaimed. On the other hand, if too many of the pages +charged to the control group are unevictable, the evictable portion of the +working set of the tasks in the control group may not fit into the available +memory. This can cause the control group to thrash or to oom-kill tasks. + + +Unevictable LRU: Detecting Unevictable Pages + +The function page_evictable(page, vma) in vmscan.c determines whether a +page is evictable or not. For ramfs pages and pages in SHM_LOCKed regions, +page_evictable() tests a new address space flag, AS_UNEVICTABLE, in the page's +address space using a wrapper function. Wrapper functions are used to set, +clear and test the flag to reduce the requirement for #ifdef's throughout the +source code. AS_UNEVICTABLE is set on ramfs inode/mapping when it is created. +This flag remains for the life of the inode. + +For shared memory regions, AS_UNEVICTABLE is set when an application +successfully SHM_LOCKs the region and is removed when the region is +SHM_UNLOCKed. Note that shmctl(SHM_LOCK, ...) does not populate the page +tables for the region as does, for example, mlock(). So, we make no special +effort to push any pages in the SHM_LOCKed region to the unevictable list. +Vmscan will do this when/if it encounters the pages during reclaim. On +SHM_UNLOCK, shmctl() scans the pages in the region and "rescues" them from the +unevictable list if no other condition keeps them unevictable. If a SHM_LOCKed +region is destroyed, the pages are also "rescued" from the unevictable list in +the process of freeing them. + +page_evictable() detects mlock()ed pages by testing an additional page flag, +PG_mlocked via the PageMlocked() wrapper. If the page is NOT mlocked, and a +non-NULL vma is supplied, page_evictable() will check whether the vma is VM_LOCKED via is_mlocked_vma(). is_mlocked_vma() will SetPageMlocked() and update the appropriate statistics if the vma is VM_LOCKED. This method allows efficient "culling" of pages in the fault path that are being faulted in to -VM_LOCKED VMAs. +VM_LOCKED vmas. -VMSCAN'S HANDLING OF UNEVICTABLE PAGES --------------------------------------- +Unevictable Pages and Vmscan [shrink_*_list()] If unevictable pages are culled in the fault path, or moved to the unevictable -list at mlock() or mmap() time, vmscan will not encounter the pages until they -have become evictable again (via munlock() for example) and have been "rescued" -from the unevictable list. However, there may be situations where we decide, -for the sake of expediency, to leave a unevictable page on one of the regular -active/inactive LRU lists for vmscan to deal with. vmscan checks for such -pages in all of the shrink_{active|inactive|page}_list() functions and will -"cull" such pages that it encounters: that is, it diverts those pages to the -unevictable list for the zone being scanned. - -There may be situations where a page is mapped into a VM_LOCKED VMA, but the -page is not marked as PG_mlocked. Such pages will make it all the way to +list at mlock() or mmap() time, vmscan will never encounter the pages until +they have become evictable again, for example, via munlock() and have been +"rescued" from the unevictable list. However, there may be situations where we +decide, for the sake of expediency, to leave a unevictable page on one of the +regular active/inactive LRU lists for vmscan to deal with. Vmscan checks for +such pages in all of the shrink_{active|inactive|page}_list() functions and +will "cull" such pages that it encounters--that is, it diverts those pages to +the unevictable list for the zone being scanned. + +There may be situations where a page is mapped into a VM_LOCKED vma, but the +page is not marked as PageMlocked. Such pages will make it all the way to shrink_page_list() where they will be detected when vmscan walks the reverse -map in try_to_unmap(). If try_to_unmap() returns SWAP_MLOCK, -shrink_page_list() will cull the page at that point. +map in try_to_unmap(). If try_to_unmap() returns SWAP_MLOCK, shrink_page_list() +will cull the page at that point. -To "cull" an unevictable page, vmscan simply puts the page back on the LRU list -using putback_lru_page() - the inverse operation to isolate_lru_page() - after -dropping the page lock. Because the condition which makes the page unevictable -may change once the page is unlocked, putback_lru_page() will recheck the -unevictable state of a page that it places on the unevictable list. If the -page has become unevictable, putback_lru_page() removes it from the list and -retries, including the page_unevictable() test. Because such a race is a rare -event and movement of pages onto the unevictable list should be rare, these -extra evictabilty checks should not occur in the majority of calls to -putback_lru_page(). +To "cull" an unevictable page, vmscan simply puts the page back on the lru +list using putback_lru_page()--the inverse operation to isolate_lru_page()-- +after dropping the page lock. Because the condition which makes the page +unevictable may change once the page is unlocked, putback_lru_page() will +recheck the unevictable state of a page that it places on the unevictable lru +list. If the page has become unevictable, putback_lru_page() removes it from +the list and retries, including the page_unevictable() test. Because such a +race is a rare event and movement of pages onto the unevictable list should be +rare, these extra evictabilty checks should not occur in the majority of calls +to putback_lru_page(). -============= -MLOCKED PAGES -============= +Mlocked Page: Prior Work -The unevictable page list is also useful for mlock(), in addition to ramfs and -SYSV SHM. Note that mlock() is only available in CONFIG_MMU=y situations; in -NOMMU situations, all mappings are effectively mlocked. - - -HISTORY -------- - -The "Unevictable mlocked Pages" infrastructure is based on work originally +The "Unevictable Mlocked Pages" infrastructure is based on work originally posted by Nick Piggin in an RFC patch entitled "mm: mlocked pages off LRU". -Nick posted his patch as an alternative to a patch posted by Christoph Lameter -to achieve the same objective: hiding mlocked pages from vmscan. - -In Nick's patch, he used one of the struct page LRU list link fields as a count -of VM_LOCKED VMAs that map the page. This use of the link field for a count -prevented the management of the pages on an LRU list, and thus mlocked pages -were not migratable as isolate_lru_page() could not find them, and the LRU list -link field was not available to the migration subsystem. - -Nick resolved this by putting mlocked pages back on the lru list before -attempting to isolate them, thus abandoning the count of VM_LOCKED VMAs. When -Nick's patch was integrated with the Unevictable LRU work, the count was -replaced by walking the reverse map to determine whether any VM_LOCKED VMAs -mapped the page. More on this below. - - -BASIC MANAGEMENT ----------------- - -mlocked pages - pages mapped into a VM_LOCKED VMA - are a class of unevictable -pages. When such a page has been "noticed" by the memory management subsystem, -the page is marked with the PG_mlocked flag. This can be manipulated using the -PageMlocked() functions. - -A PG_mlocked page will be placed on the unevictable list when it is added to -the LRU. Such pages can be "noticed" by memory management in several places: - - (1) in the mlock()/mlockall() system call handlers; - - (2) in the mmap() system call handler when mmapping a region with the - MAP_LOCKED flag; - - (3) mmapping a region in a task that has called mlockall() with the MCL_FUTURE - flag - - (4) in the fault path, if mlocked pages are "culled" in the fault path, - and when a VM_LOCKED stack segment is expanded; or - - (5) as mentioned above, in vmscan:shrink_page_list() when attempting to - reclaim a page in a VM_LOCKED VMA via try_to_unmap() - -all of which result in the VM_LOCKED flag being set for the VMA if it doesn't -already have it set. - -mlocked pages become unlocked and rescued from the unevictable list when: - - (1) mapped in a range unlocked via the munlock()/munlockall() system calls; - - (2) munmap()'d out of the last VM_LOCKED VMA that maps the page, including - unmapping at task exit; - - (3) when the page is truncated from the last VM_LOCKED VMA of an mmapped file; - or - - (4) before a page is COW'd in a VM_LOCKED VMA. - - -mlock()/mlockall() SYSTEM CALL HANDLING ---------------------------------------- +Nick posted his patch as an alternative to a patch posted by Christoph +Lameter to achieve the same objective--hiding mlocked pages from vmscan. +In Nick's patch, he used one of the struct page lru list link fields as a count +of VM_LOCKED vmas that map the page. This use of the link field for a count +prevented the management of the pages on an LRU list. Thus, mlocked pages were +not migratable as isolate_lru_page() could not find them and the lru list link +field was not available to the migration subsystem. Nick resolved this by +putting mlocked pages back on the lru list before attempting to isolate them, +thus abandoning the count of VM_LOCKED vmas. When Nick's patch was integrated +with the Unevictable LRU work, the count was replaced by walking the reverse +map to determine whether any VM_LOCKED vmas mapped the page. More on this +below. + + +Mlocked Pages: Basic Management + +Mlocked pages--pages mapped into a VM_LOCKED vma--represent one class of +unevictable pages. When such a page has been "noticed" by the memory +management subsystem, the page is marked with the PG_mlocked [PageMlocked()] +flag. A PageMlocked() page will be placed on the unevictable LRU list when +it is added to the LRU. Pages can be "noticed" by memory management in +several places: + +1) in the mlock()/mlockall() system call handlers. +2) in the mmap() system call handler when mmap()ing a region with the + MAP_LOCKED flag, or mmap()ing a region in a task that has called + mlockall() with the MCL_FUTURE flag. Both of these conditions result + in the VM_LOCKED flag being set for the vma. +3) in the fault path, if mlocked pages are "culled" in the fault path, + and when a VM_LOCKED stack segment is expanded. +4) as mentioned above, in vmscan:shrink_page_list() when attempting to + reclaim a page in a VM_LOCKED vma via try_to_unmap(). + +Mlocked pages become unlocked and rescued from the unevictable list when: + +1) mapped in a range unlocked via the munlock()/munlockall() system calls. +2) munmapped() out of the last VM_LOCKED vma that maps the page, including + unmapping at task exit. +3) when the page is truncated from the last VM_LOCKED vma of an mmap()ed file. +4) before a page is COWed in a VM_LOCKED vma. + + +Mlocked Pages: mlock()/mlockall() System Call Handling Both [do_]mlock() and [do_]mlockall() system call handlers call mlock_fixup() -for each VMA in the range specified by the call. In the case of mlockall(), +for each vma in the range specified by the call. In the case of mlockall(), this is the entire active address space of the task. Note that mlock_fixup() -is used for both mlocking and munlocking a range of memory. A call to mlock() -an already VM_LOCKED VMA, or to munlock() a VMA that is not VM_LOCKED is -treated as a no-op, and mlock_fixup() simply returns. - -If the VMA passes some filtering as described in "Filtering Special Vmas" -below, mlock_fixup() will attempt to merge the VMA with its neighbors or split -off a subset of the VMA if the range does not cover the entire VMA. Once the -VMA has been merged or split or neither, mlock_fixup() will call -__mlock_vma_pages_range() to fault in the pages via get_user_pages() and to -mark the pages as mlocked via mlock_vma_page(). - -Note that the VMA being mlocked might be mapped with PROT_NONE. In this case, -get_user_pages() will be unable to fault in the pages. That's okay. If pages -do end up getting faulted into this VM_LOCKED VMA, we'll handle them in the +is used for both mlock()ing and munlock()ing a range of memory. A call to +mlock() an already VM_LOCKED vma, or to munlock() a vma that is not VM_LOCKED +is treated as a no-op--mlock_fixup() simply returns. + +If the vma passes some filtering described in "Mlocked Pages: Filtering Vmas" +below, mlock_fixup() will attempt to merge the vma with its neighbors or split +off a subset of the vma if the range does not cover the entire vma. Once the +vma has been merged or split or neither, mlock_fixup() will call +__mlock_vma_pages_range() to fault in the pages via get_user_pages() and +to mark the pages as mlocked via mlock_vma_page(). + +Note that the vma being mlocked might be mapped with PROT_NONE. In this case, +get_user_pages() will be unable to fault in the pages. That's OK. If pages +do end up getting faulted into this VM_LOCKED vma, we'll handle them in the fault path or in vmscan. Also note that a page returned by get_user_pages() could be truncated or -migrated out from under us, while we're trying to mlock it. To detect this, -__mlock_vma_pages_range() checks page_mapping() after acquiring the page lock. -If the page is still associated with its mapping, we'll go ahead and call -mlock_vma_page(). If the mapping is gone, we just unlock the page and move on. -In the worst case, this will result in a page mapped in a VM_LOCKED VMA -remaining on a normal LRU list without being PageMlocked(). Again, vmscan will -detect and cull such pages. - -mlock_vma_page() will call TestSetPageMlocked() for each page returned by -get_user_pages(). We use TestSetPageMlocked() because the page might already -be mlocked by another task/VMA and we don't want to do extra work. We -especially do not want to count an mlocked page more than once in the -statistics. If the page was already mlocked, mlock_vma_page() need do nothing -more. +migrated out from under us, while we're trying to mlock it. To detect +this, __mlock_vma_pages_range() tests the page_mapping after acquiring +the page lock. If the page is still associated with its mapping, we'll +go ahead and call mlock_vma_page(). If the mapping is gone, we just +unlock the page and move on. Worse case, this results in page mapped +in a VM_LOCKED vma remaining on a normal LRU list without being +PageMlocked(). Again, vmscan will detect and cull such pages. + +mlock_vma_page(), called with the page locked [N.B., not "mlocked"], will +TestSetPageMlocked() for each page returned by get_user_pages(). We use +TestSetPageMlocked() because the page might already be mlocked by another +task/vma and we don't want to do extra work. We especially do not want to +count an mlocked page more than once in the statistics. If the page was +already mlocked, mlock_vma_page() is done. If the page was NOT already mlocked, mlock_vma_page() attempts to isolate the page from the LRU, as it is likely on the appropriate active or inactive list -at that time. If the isolate_lru_page() succeeds, mlock_vma_page() will put -back the page - by calling putback_lru_page() - which will notice that the page -is now mlocked and divert the page to the zone's unevictable list. If +at that time. If the isolate_lru_page() succeeds, mlock_vma_page() will +putback the page--putback_lru_page()--which will notice that the page is now +mlocked and divert the page to the zone's unevictable LRU list. If mlock_vma_page() is unable to isolate the page from the LRU, vmscan will handle -it later if and when it attempts to reclaim the page. +it later if/when it attempts to reclaim the page. -FILTERING SPECIAL VMAS ----------------------- +Mlocked Pages: Filtering Special Vmas -mlock_fixup() filters several classes of "special" VMAs: +mlock_fixup() filters several classes of "special" vmas: -1) VMAs with VM_IO or VM_PFNMAP set are skipped entirely. The pages behind +1) vmas with VM_IO|VM_PFNMAP set are skipped entirely. The pages behind these mappings are inherently pinned, so we don't need to mark them as - mlocked. In any case, most of the pages have no struct page in which to so - mark the page. Because of this, get_user_pages() will fail for these VMAs, - so there is no sense in attempting to visit them. - -2) VMAs mapping hugetlbfs page are already effectively pinned into memory. We - neither need nor want to mlock() these pages. However, to preserve the - prior behavior of mlock() - before the unevictable/mlock changes - - mlock_fixup() will call make_pages_present() in the hugetlbfs VMA range to - allocate the huge pages and populate the ptes. - -3) VMAs with VM_DONTEXPAND or VM_RESERVED are generally userspace mappings of - kernel pages, such as the VDSO page, relay channel pages, etc. These pages + mlocked. In any case, most of the pages have no struct page in which to + so mark the page. Because of this, get_user_pages() will fail for these + vmas, so there is no sense in attempting to visit them. + +2) vmas mapping hugetlbfs page are already effectively pinned into memory. + We don't need nor want to mlock() these pages. However, to preserve the + prior behavior of mlock()--before the unevictable/mlock changes-- + mlock_fixup() will call make_pages_present() in the hugetlbfs vma range + to allocate the huge pages and populate the ptes. + +3) vmas with VM_DONTEXPAND|VM_RESERVED are generally user space mappings of + kernel pages, such as the vdso page, relay channel pages, etc. These pages are inherently unevictable and are not managed on the LRU lists. - mlock_fixup() treats these VMAs the same as hugetlbfs VMAs. It calls + mlock_fixup() treats these vmas the same as hugetlbfs vmas. It calls make_pages_present() to populate the ptes. -Note that for all of these special VMAs, mlock_fixup() does not set the +Note that for all of these special vmas, mlock_fixup() does not set the VM_LOCKED flag. Therefore, we won't have to deal with them later during -munlock(), munmap() or task exit. Neither does mlock_fixup() account these -VMAs against the task's "locked_vm". - - -munlock()/munlockall() SYSTEM CALL HANDLING -------------------------------------------- - -The munlock() and munlockall() system calls are handled by the same functions - -do_mlock[all]() - as the mlock() and mlockall() system calls with the unlock vs -lock operation indicated by an argument. So, these system calls are also -handled by mlock_fixup(). Again, if called for an already munlocked VMA, -mlock_fixup() simply returns. Because of the VMA filtering discussed above, -VM_LOCKED will not be set in any "special" VMAs. So, these VMAs will be +munlock() or munmap()--for example, at task exit. Neither does mlock_fixup() +account these vmas against the task's "locked_vm". + +Mlocked Pages: Downgrading the Mmap Semaphore. + +mlock_fixup() must be called with the mmap semaphore held for write, because +it may have to merge or split vmas. However, mlocking a large region of +memory can take a long time--especially if vmscan must reclaim pages to +satisfy the regions requirements. Faulting in a large region with the mmap +semaphore held for write can hold off other faults on the address space, in +the case of a multi-threaded task. It can also hold off scans of the task's +address space via /proc. While testing under heavy load, it was observed that +the ps(1) command could be held off for many minutes while a large segment was +mlock()ed down. + +To address this issue, and to make the system more responsive during mlock()ing +of large segments, mlock_fixup() downgrades the mmap semaphore to read mode +during the call to __mlock_vma_pages_range(). This works fine. However, the +callers of mlock_fixup() expect the semaphore to be returned in write mode. +So, mlock_fixup() "upgrades" the semphore to write mode. Linux does not +support an atomic upgrade_sem() call, so mlock_fixup() must drop the semaphore +and reacquire it in write mode. In a multi-threaded task, it is possible for +the task memory map to change while the semaphore is dropped. Therefore, +mlock_fixup() looks up the vma at the range start address after reacquiring +the semaphore in write mode and verifies that it still covers the original +range. If not, mlock_fixup() returns an error [-EAGAIN]. All callers of +mlock_fixup() have been changed to deal with this new error condition. + +Note: when munlocking a region, all of the pages should already be resident-- +unless we have racing threads mlocking() and munlocking() regions. So, +unlocking should not have to wait for page allocations nor faults of any kind. +Therefore mlock_fixup() does not downgrade the semaphore for munlock(). + + +Mlocked Pages: munlock()/munlockall() System Call Handling + +The munlock() and munlockall() system calls are handled by the same functions-- +do_mlock[all]()--as the mlock() and mlockall() system calls with the unlock +vs lock operation indicated by an argument. So, these system calls are also +handled by mlock_fixup(). Again, if called for an already munlock()ed vma, +mlock_fixup() simply returns. Because of the vma filtering discussed above, +VM_LOCKED will not be set in any "special" vmas. So, these vmas will be ignored for munlock. -If the VMA is VM_LOCKED, mlock_fixup() again attempts to merge or split off the -specified range. The range is then munlocked via the function -__mlock_vma_pages_range() - the same function used to mlock a VMA range - +If the vma is VM_LOCKED, mlock_fixup() again attempts to merge or split off +the specified range. The range is then munlocked via the function +__mlock_vma_pages_range()--the same function used to mlock a vma range-- passing a flag to indicate that munlock() is being performed. -Because the VMA access protections could have been changed to PROT_NONE after +Because the vma access protections could have been changed to PROT_NONE after faulting in and mlocking pages, get_user_pages() was unreliable for visiting -these pages for munlocking. Because we don't want to leave pages mlocked, +these pages for munlocking. Because we don't want to leave pages mlocked(), get_user_pages() was enhanced to accept a flag to ignore the permissions when -fetching the pages - all of which should be resident as a result of previous -mlocking. +fetching the pages--all of which should be resident as a result of previous +mlock()ing. For munlock(), __mlock_vma_pages_range() unlocks individual pages by calling munlock_vma_page(). munlock_vma_page() unconditionally clears the PG_mlocked -flag using TestClearPageMlocked(). As with mlock_vma_page(), -munlock_vma_page() use the Test*PageMlocked() function to handle the case where -the page might have already been unlocked by another task. If the page was -mlocked, munlock_vma_page() updates that zone statistics for the number of -mlocked pages. Note, however, that at this point we haven't checked whether -the page is mapped by other VM_LOCKED VMAs. - -We can't call try_to_munlock(), the function that walks the reverse map to -check for other VM_LOCKED VMAs, without first isolating the page from the LRU. +flag using TestClearPageMlocked(). As with mlock_vma_page(), munlock_vma_page() +use the Test*PageMlocked() function to handle the case where the page might +have already been unlocked by another task. If the page was mlocked, +munlock_vma_page() updates that zone statistics for the number of mlocked +pages. Note, however, that at this point we haven't checked whether the page +is mapped by other VM_LOCKED vmas. + +We can't call try_to_munlock(), the function that walks the reverse map to check +for other VM_LOCKED vmas, without first isolating the page from the LRU. try_to_munlock() is a variant of try_to_unmap() and thus requires that the page -not be on an LRU list [more on these below]. However, the call to -isolate_lru_page() could fail, in which case we couldn't try_to_munlock(). So, -we go ahead and clear PG_mlocked up front, as this might be the only chance we -have. If we can successfully isolate the page, we go ahead and +not be on an lru list. [More on these below.] However, the call to +isolate_lru_page() could fail, in which case we couldn't try_to_munlock(). +So, we go ahead and clear PG_mlocked up front, as this might be the only chance +we have. If we can successfully isolate the page, we go ahead and try_to_munlock(), which will restore the PG_mlocked flag and update the zone -page statistics if it finds another VMA holding the page mlocked. If we fail +page statistics if it finds another vma holding the page mlocked. If we fail to isolate the page, we'll have left a potentially mlocked page on the LRU. -This is fine, because we'll catch it later if and if vmscan tries to reclaim -the page. This should be relatively rare. - - -MIGRATING MLOCKED PAGES ------------------------ - -A page that is being migrated has been isolated from the LRU lists and is held -locked across unmapping of the page, updating the page's address space entry -and copying the contents and state, until the page table entry has been -replaced with an entry that refers to the new page. Linux supports migration -of mlocked pages and other unevictable pages. This involves simply moving the -PG_mlocked and PG_unevictable states from the old page to the new page. - -Note that page migration can race with mlocking or munlocking of the same page. -This has been discussed from the mlock/munlock perspective in the respective -sections above. Both processes (migration and m[un]locking) hold the page -locked. This provides the first level of synchronization. Page migration -zeros out the page_mapping of the old page before unlocking it, so m[un]lock -can skip these pages by testing the page mapping under page lock. - -To complete page migration, we place the new and old pages back onto the LRU -after dropping the page lock. The "unneeded" page - old page on success, new -page on failure - will be freed when the reference count held by the migration -process is released. To ensure that we don't strand pages on the unevictable -list because of a race between munlock and migration, page migration uses the -putback_lru_page() function to add migrated pages back to the LRU. - - -mmap(MAP_LOCKED) SYSTEM CALL HANDLING -------------------------------------- +This is fine, because we'll catch it later when/if vmscan tries to reclaim the +page. This should be relatively rare. + +Mlocked Pages: Migrating Them... + +A page that is being migrated has been isolated from the lru lists and is +held locked across unmapping of the page, updating the page's mapping +[address_space] entry and copying the contents and state, until the +page table entry has been replaced with an entry that refers to the new +page. Linux supports migration of mlocked pages and other unevictable +pages. This involves simply moving the PageMlocked and PageUnevictable states +from the old page to the new page. + +Note that page migration can race with mlocking or munlocking of the same +page. This has been discussed from the mlock/munlock perspective in the +respective sections above. Both processes [migration, m[un]locking], hold +the page locked. This provides the first level of synchronization. Page +migration zeros out the page_mapping of the old page before unlocking it, +so m[un]lock can skip these pages by testing the page mapping under page +lock. + +When completing page migration, we place the new and old pages back onto the +lru after dropping the page lock. The "unneeded" page--old page on success, +new page on failure--will be freed when the reference count held by the +migration process is released. To ensure that we don't strand pages on the +unevictable list because of a race between munlock and migration, page +migration uses the putback_lru_page() function to add migrated pages back to +the lru. + + +Mlocked Pages: mmap(MAP_LOCKED) System Call Handling In addition the the mlock()/mlockall() system calls, an application can request -that a region of memory be mlocked supplying the MAP_LOCKED flag to the mmap() +that a region of memory be mlocked using the MAP_LOCKED flag with the mmap() call. Furthermore, any mmap() call or brk() call that expands the heap by a task that has previously called mlockall() with the MCL_FUTURE flag will result -in the newly mapped memory being mlocked. Before the unevictable/mlock -changes, the kernel simply called make_pages_present() to allocate pages and -populate the page table. +in the newly mapped memory being mlocked. Before the unevictable/mlock changes, +the kernel simply called make_pages_present() to allocate pages and populate +the page table. To mlock a range of memory under the unevictable/mlock infrastructure, the mmap() handler and task address space expansion functions call mlock_vma_pages_range() specifying the vma and the address range to mlock. -mlock_vma_pages_range() filters VMAs like mlock_fixup(), as described above in -"Filtering Special VMAs". It will clear the VM_LOCKED flag, which will have -already been set by the caller, in filtered VMAs. Thus these VMA's need not be -visited for munlock when the region is unmapped. +mlock_vma_pages_range() filters vmas like mlock_fixup(), as described above in +"Mlocked Pages: Filtering Vmas". It will clear the VM_LOCKED flag, which will +have already been set by the caller, in filtered vmas. Thus these vma's need +not be visited for munlock when the region is unmapped. -For "normal" VMAs, mlock_vma_pages_range() calls __mlock_vma_pages_range() to +For "normal" vmas, mlock_vma_pages_range() calls __mlock_vma_pages_range() to fault/allocate the pages and mlock them. Again, like mlock_fixup(), mlock_vma_pages_range() downgrades the mmap semaphore to read mode before -attempting to fault/allocate and mlock the pages and "upgrades" the semaphore +attempting to fault/allocate and mlock the pages; and "upgrades" the semaphore back to write mode before returning. -The callers of mlock_vma_pages_range() will have already added the memory range -to be mlocked to the task's "locked_vm". To account for filtered VMAs, +The callers of mlock_vma_pages_range() will have already added the memory +range to be mlocked to the task's "locked_vm". To account for filtered vmas, mlock_vma_pages_range() returns the number of pages NOT mlocked. All of the -callers then subtract a non-negative return value from the task's locked_vm. A -negative return value represent an error - for example, from get_user_pages() -attempting to fault in a VMA with PROT_NONE access. In this case, we leave the -memory range accounted as locked_vm, as the protections could be changed later -and pages allocated into that region. +callers then subtract a non-negative return value from the task's locked_vm. +A negative return value represent an error--for example, from get_user_pages() +attempting to fault in a vma with PROT_NONE access. In this case, we leave +the memory range accounted as locked_vm, as the protections could be changed +later and pages allocated into that region. -munmap()/exit()/exec() SYSTEM CALL HANDLING -------------------------------------------- +Mlocked Pages: munmap()/exit()/exec() System Call Handling When unmapping an mlocked region of memory, whether by an explicit call to munmap() or via an internal unmap from exit() or exec() processing, we must -munlock the pages if we're removing the last VM_LOCKED VMA that maps the pages. +munlock the pages if we're removing the last VM_LOCKED vma that maps the pages. Before the unevictable/mlock changes, mlocking did not mark the pages in any way, so unmapping them required no processing. To munlock a range of memory under the unevictable/mlock infrastructure, the -munmap() handler and task address space call tear down function +munmap() hander and task address space tear down function call munlock_vma_pages_all(). The name reflects the observation that one always -specifies the entire VMA range when munlock()ing during unmap of a region. -Because of the VMA filtering when mlocking() regions, only "normal" VMAs that +specifies the entire vma range when munlock()ing during unmap of a region. +Because of the vma filtering when mlocking() regions, only "normal" vmas that actually contain mlocked pages will be passed to munlock_vma_pages_all(). -munlock_vma_pages_all() clears the VM_LOCKED VMA flag and, like mlock_fixup() +munlock_vma_pages_all() clears the VM_LOCKED vma flag and, like mlock_fixup() for the munlock case, calls __munlock_vma_pages_range() to walk the page table -for the VMA's memory range and munlock_vma_page() each resident page mapped by -the VMA. This effectively munlocks the page, only if this is the last -VM_LOCKED VMA that maps the page. +for the vma's memory range and munlock_vma_page() each resident page mapped by +the vma. This effectively munlocks the page, only if this is the last +VM_LOCKED vma that maps the page. + +Mlocked Page: try_to_unmap() -try_to_unmap() --------------- +[Note: the code changes represented by this section are really quite small +compared to the text to describe what happening and why, and to discuss the +implications.] -Pages can, of course, be mapped into multiple VMAs. Some of these VMAs may +Pages can, of course, be mapped into multiple vmas. Some of these vmas may have VM_LOCKED flag set. It is possible for a page mapped into one or more -VM_LOCKED VMAs not to have the PG_mlocked flag set and therefore reside on one -of the active or inactive LRU lists. This could happen if, for example, a task -in the process of munlocking the page could not isolate the page from the LRU. -As a result, vmscan/shrink_page_list() might encounter such a page as described -in section "vmscan's handling of unevictable pages". To handle this situation, -try_to_unmap() checks for VM_LOCKED VMAs while it is walking a page's reverse -map. +VM_LOCKED vmas not to have the PG_mlocked flag set and therefore reside on one +of the active or inactive LRU lists. This could happen if, for example, a +task in the process of munlock()ing the page could not isolate the page from +the LRU. As a result, vmscan/shrink_page_list() might encounter such a page +as described in "Unevictable Pages and Vmscan [shrink_*_list()]". To +handle this situation, try_to_unmap() has been enhanced to check for VM_LOCKED +vmas while it is walking a page's reverse map. try_to_unmap() is always called, by either vmscan for reclaim or for page -migration, with the argument page locked and isolated from the LRU. Separate -functions handle anonymous and mapped file pages, as these types of pages have -different reverse map mechanisms. - - (*) try_to_unmap_anon() - - To unmap anonymous pages, each VMA in the list anchored in the anon_vma - must be visited - at least until a VM_LOCKED VMA is encountered. If the - page is being unmapped for migration, VM_LOCKED VMAs do not stop the - process because mlocked pages are migratable. However, for reclaim, if - the page is mapped into a VM_LOCKED VMA, the scan stops. - - try_to_unmap_anon() attempts to acquire in read mode the mmap semphore of - the mm_struct to which the VMA belongs. If this is successful, it will - mlock the page via mlock_vma_page() - we wouldn't have gotten to - try_to_unmap_anon() if the page were already mlocked - and will return - SWAP_MLOCK, indicating that the page is unevictable. - - If the mmap semaphore cannot be acquired, we are not sure whether the page - is really unevictable or not. In this case, try_to_unmap_anon() will - return SWAP_AGAIN. - - (*) try_to_unmap_file() - linear mappings - - Unmapping of a mapped file page works the same as for anonymous mappings, - except that the scan visits all VMAs that map the page's index/page offset - in the page's mapping's reverse map priority search tree. It also visits - each VMA in the page's mapping's non-linear list, if the list is - non-empty. - - As for anonymous pages, on encountering a VM_LOCKED VMA for a mapped file - page, try_to_unmap_file() will attempt to acquire the associated - mm_struct's mmap semaphore to mlock the page, returning SWAP_MLOCK if this - is successful, and SWAP_AGAIN, if not. - - (*) try_to_unmap_file() - non-linear mappings - - If a page's mapping contains a non-empty non-linear mapping VMA list, then - try_to_un{map|lock}() must also visit each VMA in that list to determine - whether the page is mapped in a VM_LOCKED VMA. Again, the scan must visit - all VMAs in the non-linear list to ensure that the pages is not/should not - be mlocked. - - If a VM_LOCKED VMA is found in the list, the scan could terminate. - However, there is no easy way to determine whether the page is actually - mapped in a given VMA - either for unmapping or testing whether the - VM_LOCKED VMA actually pins the page. - - try_to_unmap_file() handles non-linear mappings by scanning a certain - number of pages - a "cluster" - in each non-linear VMA associated with the - page's mapping, for each file mapped page that vmscan tries to unmap. If - this happens to unmap the page we're trying to unmap, try_to_unmap() will - notice this on return (page_mapcount(page) will be 0) and return - SWAP_SUCCESS. Otherwise, it will return SWAP_AGAIN, causing vmscan to - recirculate this page. We take advantage of the cluster scan in - try_to_unmap_cluster() as follows: - - For each non-linear VMA, try_to_unmap_cluster() attempts to acquire the - mmap semaphore of the associated mm_struct for read without blocking. - - If this attempt is successful and the VMA is VM_LOCKED, - try_to_unmap_cluster() will retain the mmap semaphore for the scan; - otherwise it drops it here. - - Then, for each page in the cluster, if we're holding the mmap semaphore - for a locked VMA, try_to_unmap_cluster() calls mlock_vma_page() to - mlock the page. This call is a no-op if the page is already locked, - but will mlock any pages in the non-linear mapping that happen to be - unlocked. - - If one of the pages so mlocked is the page passed in to try_to_unmap(), - try_to_unmap_cluster() will return SWAP_MLOCK, rather than the default - SWAP_AGAIN. This will allow vmscan to cull the page, rather than - recirculating it on the inactive list. - - Again, if try_to_unmap_cluster() cannot acquire the VMA's mmap sem, it - returns SWAP_AGAIN, indicating that the page is mapped by a VM_LOCKED - VMA, but couldn't be mlocked. - - -try_to_munlock() REVERSE MAP SCAN ---------------------------------- - - [!] TODO/FIXME: a better name might be page_mlocked() - analogous to the - page_referenced() reverse map walker. - -When munlock_vma_page() [see section "munlock()/munlockall() System Call -Handling" above] tries to munlock a page, it needs to determine whether or not -the page is mapped by any VM_LOCKED VMA without actually attempting to unmap -all PTEs from the page. For this purpose, the unevictable/mlock infrastructure -introduced a variant of try_to_unmap() called try_to_munlock(). +migration, with the argument page locked and isolated from the LRU. BUG_ON() +assertions enforce this requirement. Separate functions handle anonymous and +mapped file pages, as these types of pages have different reverse map +mechanisms. + + try_to_unmap_anon() + +To unmap anonymous pages, each vma in the list anchored in the anon_vma must be +visited--at least until a VM_LOCKED vma is encountered. If the page is being +unmapped for migration, VM_LOCKED vmas do not stop the process because mlocked +pages are migratable. However, for reclaim, if the page is mapped into a +VM_LOCKED vma, the scan stops. try_to_unmap() attempts to acquire the mmap +semphore of the mm_struct to which the vma belongs in read mode. If this is +successful, try_to_unmap() will mlock the page via mlock_vma_page()--we +wouldn't have gotten to try_to_unmap() if the page were already mlocked--and +will return SWAP_MLOCK, indicating that the page is unevictable. If the +mmap semaphore cannot be acquired, we are not sure whether the page is really +unevictable or not. In this case, try_to_unmap() will return SWAP_AGAIN. + + try_to_unmap_file() -- linear mappings + +Unmapping of a mapped file page works the same, except that the scan visits +all vmas that maps the page's index/page offset in the page's mapping's +reverse map priority search tree. It must also visit each vma in the page's +mapping's non-linear list, if the list is non-empty. As for anonymous pages, +on encountering a VM_LOCKED vma for a mapped file page, try_to_unmap() will +attempt to acquire the associated mm_struct's mmap semaphore to mlock the page, +returning SWAP_MLOCK if this is successful, and SWAP_AGAIN, if not. + + try_to_unmap_file() -- non-linear mappings + +If a page's mapping contains a non-empty non-linear mapping vma list, then +try_to_un{map|lock}() must also visit each vma in that list to determine +whether the page is mapped in a VM_LOCKED vma. Again, the scan must visit +all vmas in the non-linear list to ensure that the pages is not/should not be +mlocked. If a VM_LOCKED vma is found in the list, the scan could terminate. +However, there is no easy way to determine whether the page is actually mapped +in a given vma--either for unmapping or testing whether the VM_LOCKED vma +actually pins the page. + +So, try_to_unmap_file() handles non-linear mappings by scanning a certain +number of pages--a "cluster"--in each non-linear vma associated with the page's +mapping, for each file mapped page that vmscan tries to unmap. If this happens +to unmap the page we're trying to unmap, try_to_unmap() will notice this on +return--(page_mapcount(page) == 0)--and return SWAP_SUCCESS. Otherwise, it +will return SWAP_AGAIN, causing vmscan to recirculate this page. We take +advantage of the cluster scan in try_to_unmap_cluster() as follows: + +For each non-linear vma, try_to_unmap_cluster() attempts to acquire the mmap +semaphore of the associated mm_struct for read without blocking. If this +attempt is successful and the vma is VM_LOCKED, try_to_unmap_cluster() will +retain the mmap semaphore for the scan; otherwise it drops it here. Then, +for each page in the cluster, if we're holding the mmap semaphore for a locked +vma, try_to_unmap_cluster() calls mlock_vma_page() to mlock the page. This +call is a no-op if the page is already locked, but will mlock any pages in +the non-linear mapping that happen to be unlocked. If one of the pages so +mlocked is the page passed in to try_to_unmap(), try_to_unmap_cluster() will +return SWAP_MLOCK, rather than the default SWAP_AGAIN. This will allow vmscan +to cull the page, rather than recirculating it on the inactive list. Again, +if try_to_unmap_cluster() cannot acquire the vma's mmap sem, it returns +SWAP_AGAIN, indicating that the page is mapped by a VM_LOCKED vma, but +couldn't be mlocked. + + +Mlocked pages: try_to_munlock() Reverse Map Scan + +TODO/FIXME: a better name might be page_mlocked()--analogous to the +page_referenced() reverse map walker. + +When munlock_vma_page()--see "Mlocked Pages: munlock()/munlockall() +System Call Handling" above--tries to munlock a page, it needs to +determine whether or not the page is mapped by any VM_LOCKED vma, without +actually attempting to unmap all ptes from the page. For this purpose, the +unevictable/mlock infrastructure introduced a variant of try_to_unmap() called +try_to_munlock(). try_to_munlock() calls the same functions as try_to_unmap() for anonymous and mapped file pages with an additional argument specifing unlock versus unmap processing. Again, these functions walk the respective reverse maps looking -for VM_LOCKED VMAs. When such a VMA is found for anonymous pages and file +for VM_LOCKED vmas. When such a vma is found for anonymous pages and file pages mapped in linear VMAs, as in the try_to_unmap() case, the functions attempt to acquire the associated mmap semphore, mlock the page via mlock_vma_page() and return SWAP_MLOCK. This effectively undoes the pre-clearing of the page's PG_mlocked done by munlock_vma_page. -If try_to_unmap() is unable to acquire a VM_LOCKED VMA's associated mmap -semaphore, it will return SWAP_AGAIN. This will allow shrink_page_list() to -recycle the page on the inactive list and hope that it has better luck with the -page next time. - -For file pages mapped into non-linear VMAs, the try_to_munlock() logic works -slightly differently. On encountering a VM_LOCKED non-linear VMA that might -map the page, try_to_munlock() returns SWAP_AGAIN without actually mlocking the -page. munlock_vma_page() will just leave the page unlocked and let vmscan deal -with it - the usual fallback position. - -Note that try_to_munlock()'s reverse map walk must visit every VMA in a page's -reverse map to determine that a page is NOT mapped into any VM_LOCKED VMA. -However, the scan can terminate when it encounters a VM_LOCKED VMA and can -successfully acquire the VMA's mmap semphore for read and mlock the page. -Although try_to_munlock() might be called a great many times when munlocking a -large region or tearing down a large address space that has been mlocked via -mlockall(), overall this is a fairly rare event. - - -PAGE RECLAIM IN shrink_*_list() -------------------------------- - -shrink_active_list() culls any obviously unevictable pages - i.e. -!page_evictable(page, NULL) - diverting these to the unevictable list. -However, shrink_active_list() only sees unevictable pages that made it onto the -active/inactive lru lists. Note that these pages do not have PageUnevictable -set - otherwise they would be on the unevictable list and shrink_active_list -would never see them. +If try_to_unmap() is unable to acquire a VM_LOCKED vma's associated mmap +semaphore, it will return SWAP_AGAIN. This will allow shrink_page_list() +to recycle the page on the inactive list and hope that it has better luck +with the page next time. + +For file pages mapped into non-linear vmas, the try_to_munlock() logic works +slightly differently. On encountering a VM_LOCKED non-linear vma that might +map the page, try_to_munlock() returns SWAP_AGAIN without actually mlocking +the page. munlock_vma_page() will just leave the page unlocked and let +vmscan deal with it--the usual fallback position. + +Note that try_to_munlock()'s reverse map walk must visit every vma in a pages' +reverse map to determine that a page is NOT mapped into any VM_LOCKED vma. +However, the scan can terminate when it encounters a VM_LOCKED vma and can +successfully acquire the vma's mmap semphore for read and mlock the page. +Although try_to_munlock() can be called many [very many!] times when +munlock()ing a large region or tearing down a large address space that has been +mlocked via mlockall(), overall this is a fairly rare event. + +Mlocked Page: Page Reclaim in shrink_*_list() + +shrink_active_list() culls any obviously unevictable pages--i.e., +!page_evictable(page, NULL)--diverting these to the unevictable lru +list. However, shrink_active_list() only sees unevictable pages that +made it onto the active/inactive lru lists. Note that these pages do not +have PageUnevictable set--otherwise, they would be on the unevictable list and +shrink_active_list would never see them. Some examples of these unevictable pages on the LRU lists are: - (1) ramfs pages that have been placed on the LRU lists when first allocated. - - (2) SHM_LOCK'd shared memory pages. shmctl(SHM_LOCK) does not attempt to - allocate or fault in the pages in the shared memory region. This happens - when an application accesses the page the first time after SHM_LOCK'ing - the segment. +1) ramfs pages that have been placed on the lru lists when first allocated. - (3) mlocked pages that could not be isolated from the LRU and moved to the - unevictable list in mlock_vma_page(). +2) SHM_LOCKed shared memory pages. shmctl(SHM_LOCK) does not attempt to + allocate or fault in the pages in the shared memory region. This happens + when an application accesses the page the first time after SHM_LOCKing + the segment. - (4) Pages mapped into multiple VM_LOCKED VMAs, but try_to_munlock() couldn't - acquire the VMA's mmap semaphore to test the flags and set PageMlocked. - munlock_vma_page() was forced to let the page back on to the normal LRU - list for vmscan to handle. +3) Mlocked pages that could not be isolated from the lru and moved to the + unevictable list in mlock_vma_page(). -shrink_inactive_list() also diverts any unevictable pages that it finds on the -inactive lists to the appropriate zone's unevictable list. +3) Pages mapped into multiple VM_LOCKED vmas, but try_to_munlock() couldn't + acquire the vma's mmap semaphore to test the flags and set PageMlocked. + munlock_vma_page() was forced to let the page back on to the normal + LRU list for vmscan to handle. -shrink_inactive_list() should only see SHM_LOCK'd pages that became SHM_LOCK'd -after shrink_active_list() had moved them to the inactive list, or pages mapped -into VM_LOCKED VMAs that munlock_vma_page() couldn't isolate from the LRU to -recheck via try_to_munlock(). shrink_inactive_list() won't notice the latter, -but will pass on to shrink_page_list(). +shrink_inactive_list() also culls any unevictable pages that it finds on +the inactive lists, again diverting them to the appropriate zone's unevictable +lru list. shrink_inactive_list() should only see SHM_LOCKed pages that became +SHM_LOCKed after shrink_active_list() had moved them to the inactive list, or +pages mapped into VM_LOCKED vmas that munlock_vma_page() couldn't isolate from +the lru to recheck via try_to_munlock(). shrink_inactive_list() won't notice +the latter, but will pass on to shrink_page_list(). shrink_page_list() again culls obviously unevictable pages that it could encounter for similar reason to shrink_inactive_list(). Pages mapped into -VM_LOCKED VMAs but without PG_mlocked set will make it all the way to +VM_LOCKED vmas but without PG_mlocked set will make it all the way to try_to_unmap(). shrink_page_list() will divert them to the unevictable list when try_to_unmap() returns SWAP_MLOCK, as discussed above. diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS index 0cb20d821694..1f02d96a5dbf 100644 --- a/trunk/MAINTAINERS +++ b/trunk/MAINTAINERS @@ -72,6 +72,7 @@ M: Mail patches to L: Mailing list that is relevant to this area W: Web-page with status/info T: SCM tree type and location. Type is one of: git, hg, quilt. +F: Applicable files and/or directories S: Status, one of the following: Supported: Someone is actually paid to look after this. @@ -84,40 +85,23 @@ S: Status, one of the following: it has been replaced by a better system and you should be using that. -F: Files and directories with wildcard patterns. - A trailing slash includes all files and subdirectory files. - F: drivers/net/ all files in and below drivers/net - F: drivers/net/* all files in drivers/net, but not below - F: */net/* all files in "any top level directory"/net - One pattern per line. Multiple F: lines acceptable. -X: Files and directories that are NOT maintained, same rules as F: - Files exclusions are tested before file matches. - Can be useful for excluding a specific subdirectory, for instance: - F: net/ - X: net/ipv6/ - matches all files in and below net excluding net/ipv6/ - 3C505 NETWORK DRIVER P: Philip Blundell M: philb@gnu.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/3c505* 3C59X NETWORK DRIVER P: Steffen Klassert M: klassert@mathematik.tu-chemnitz.de L: netdev@vger.kernel.org S: Maintained -F: Documentation/networking/vortex.txt -F: drivers/net/3c59x.c 3CR990 NETWORK DRIVER P: David Dillow M: dave@thedillows.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/typhoon* 3W-9XXX SATA-RAID CONTROLLER DRIVER P: Adam Radford @@ -125,7 +109,6 @@ M: linuxraid@amcc.com L: linux-scsi@vger.kernel.org W: http://www.amcc.com S: Supported -F: drivers/scsi/3w-9xxx* 3W-XXXX ATA-RAID CONTROLLER DRIVER P: Adam Radford @@ -133,43 +116,35 @@ M: linuxraid@amcc.com L: linux-scsi@vger.kernel.org W: http://www.amcc.com S: Supported -F: drivers/scsi/3w-xxxx* 53C700 AND 53C700-66 SCSI DRIVER P: James E.J. Bottomley M: James.Bottomley@HansenPartnership.com L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/53c700* 6PACK NETWORK DRIVER FOR AX.25 P: Andreas Koensgen M: ajk@iehk.rwth-aachen.de L: linux-hams@vger.kernel.org S: Maintained -F: drivers/net/hamradio/6pack.c 8169 10/100/1000 GIGABIT ETHERNET DRIVER P: Francois Romieu M: romieu@fr.zoreil.com L: netdev@vger.kernel.org S: Maintained -F: drivers/net/r8169.c 8250/16?50 (AND CLONE UARTS) SERIAL DRIVER L: linux-serial@vger.kernel.org W: http://serial.sourceforge.net S: Orphan -F: drivers/serial/8250* -F: include/linux/serial_8250.h 8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.] P: Paul Gortmaker M: p_gortmaker@yahoo.com L: netdev@vger.kernel.org S: Maintained -F: drivers/net/*8390* -F: drivers/net/ax88796.c 9P FILE SYSTEM P: Eric Van Hensbergen @@ -180,17 +155,14 @@ P: Latchesar Ionkov M: lucho@ionkov.net L: v9fs-developer@lists.sourceforge.net W: http://swik.net/v9fs -T: git git://git.kernel.org/pub/scm/linux/kernel/ericvh/v9fs.git +T: git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs.git S: Maintained -F: Documentation/filesystems/9p.txt -F: fs/9p/ A2232 SERIAL BOARD DRIVER P: Enver Haase M: A2232@gmx.net L: linux-m68k@lists.linux-m68k.org S: Maintained -F: drivers/char/ser_a2232* AACRAID SCSI RAID DRIVER P: Adaptec OEM Raid Solutions @@ -198,29 +170,24 @@ M: aacraid@adaptec.com L: linux-scsi@vger.kernel.org W: http://www.adaptec.com/ S: Supported -F: Documentation/scsi/aacraid.txt -F: drivers/scsi/aacraid/ ABIT UGURU 1,2 HARDWARE MONITOR DRIVER P: Hans de Goede M: j.w.r.degoede@hhs.nl L: lm-sensors@lm-sensors.org S: Maintained -F: drivers/hwmon/abituguru.c ABIT UGURU 3 HARDWARE MONITOR DRIVER P: Alistair John Strachan M: alistair@devzero.co.uk L: lm-sensors@lm-sensors.org S: Maintained -F: drivers/hwmon/abituguru3.c ACENIC DRIVER P: Jes Sorensen M: jes@trained-monkey.org L: linux-acenic@sunsite.dk S: Maintained -F: drivers/net/acenic* ACER WMI LAPTOP EXTRAS P: Carlos Corbacho @@ -228,18 +195,14 @@ M: carlos@strangeworlds.co.uk L: aceracpi@googlegroups.com (subscribers-only) W: http://code.google.com/p/aceracpi S: Maintained -F: drivers/platform/x86/acer-wmi.c ACPI P: Len Brown M: lenb@kernel.org L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git S: Supported -F: drivers/acpi/ -F: drivers/pnp/pnpacpi/ -F: include/linux/acpi.h ACPI BATTERY DRIVERS P: Alexey Starikovskiy @@ -247,8 +210,6 @@ M: astarikovskiy@suse.de L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Supported -F: drivers/acpi/battery.c -F: drivers/acpi/*sbs* ACPI EC DRIVER P: Alexey Starikovskiy @@ -256,7 +217,6 @@ M: astarikovskiy@suse.de L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Supported -F: drivers/acpi/ec.c ACPI FAN DRIVER P: Zhang Rui @@ -264,14 +224,12 @@ M: rui.zhang@intel.com L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Supported -F: drivers/acpi/fan.c ACPI PCI HOTPLUG DRIVER P: Kristen Carlson Accardi M: kristen.c.accardi@intel.com L: linux-pci@vger.kernel.org S: Supported -F: drivers/pci/hotplug/acpi* ACPI THERMAL DRIVER P: Zhang Rui @@ -279,7 +237,6 @@ M: rui.zhang@intel.com L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Supported -F: drivers/acpi/*thermal* ACPI VIDEO DRIVER P: Zhang Rui @@ -287,7 +244,6 @@ M: rui.zhang@intel.com L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Supported -F: drivers/acpi/video.c ACPI WMI DRIVER P: Carlos Corbacho @@ -295,7 +251,6 @@ M: carlos@strangeworlds.co.uk L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Maintained -F: drivers/platform/x86/wmi.c AD1889 ALSA SOUND DRIVER P: Kyle McMartin @@ -305,99 +260,77 @@ M: T-Bone@parisc-linux.org W: http://wiki.parisc-linux.org/AD1889 L: linux-parisc@vger.kernel.org S: Maintained -F: sound/pci/ad1889.* ADM1025 HARDWARE MONITOR DRIVER P: Jean Delvare M: khali@linux-fr.org L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/adm1025 -F: drivers/hwmon/adm1025.c ADM1029 HARDWARE MONITOR DRIVER P: Corentin Labbe M: corentin.labbe@geomatys.fr L: lm-sensors@lm-sensors.org S: Maintained -F: drivers/hwmon/adm1029.c ADM8211 WIRELESS DRIVER P: Michael Wu M: flamingice@sourmilk.net L: linux-wireless@vger.kernel.org W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git +T: git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git S: Maintained -F: drivers/net/wireless/adm8211.* ADT746X FAN DRIVER P: Colin Leroy M: colin@colino.net S: Maintained -F: drivers/macintosh/therm_adt746x.c ADVANSYS SCSI DRIVER P: Matthew Wilcox M: matthew@wil.cx L: linux-scsi@vger.kernel.org S: Maintained -F: Documentation/scsi/advansys.txt -F: drivers/scsi/advansys.c AEDSP16 DRIVER P: Riccardo Facchetti M: fizban@tin.it S: Maintained -F: sound/oss/aedsp16.c AFFS FILE SYSTEM P: Roman Zippel M: zippel@linux-m68k.org S: Maintained -F: Documentation/filesystems/affs.txt -F: fs/affs/ AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN P: David Howells M: dhowells@redhat.com L: linux-afs@lists.infradead.org S: Supported -F: fs/afs/ -F: include/net/af_rxrpc.h -F: net/rxrpc/af_rxrpc.c AGPGART DRIVER P: David Airlie M: airlied@linux.ie -T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git S: Maintained -F: drivers/char/agp/ -F: include/linux/agp* AHA152X SCSI DRIVER P: Juergen E. Fischer -M: fischer@norbit.de +M: Juergen Fischer L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/aha152x* -F: drivers/scsi/pcmcia/aha152x* AIC7XXX / AIC79XX SCSI DRIVER P: Hannes Reinecke M: hare@suse.de L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/aic7xxx/ -F: drivers/scsi/aic7xxx_old/ AIO P: Benjamin LaHaise M: bcrl@kvack.org L: linux-aio@kvack.org S: Supported -F: fs/aio.c -F: include/linux/*aio*.h ALCATEL SPEEDTOUCH USB DRIVER P: Duncan Sands @@ -405,22 +338,17 @@ M: duncan.sands@free.fr L: linux-usb@vger.kernel.org W: http://www.linux-usb.org/SpeedTouch/ S: Maintained -F: drivers/usb/atm/speedtch.c -F: drivers/usb/atm/usbatm.c ALCHEMY AU1XX0 MMC DRIVER P: Manuel Lauss M: manuel.lauss@gmail.com S: Maintained -F: drivers/mmc/host/au1xmmc.c ALI1563 I2C DRIVER P: Rudolf Marek M: r.marek@assembler.cz L: linux-i2c@vger.kernel.org S: Maintained -F: Documentation/i2c/busses/i2c-ali1563 -F: drivers/i2c/busses/i2c-ali1563.c ALPHA PORT P: Richard Henderson @@ -430,41 +358,31 @@ P: Ivan Kokshaysky M: ink@jurassic.park.msu.ru S: Maintained for 2.4; PCI support for 2.6. L: linux-alpha@vger.kernel.org -F: arch/alpha/ AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER P: Thomas Dahlmann M: thomas.dahlmann@amd.com L: linux-geode@lists.infradead.org (moderated for non-subscribers) S: Supported -F: drivers/usb/gadget/amd5536udc.* AMD GEODE PROCESSOR/CHIPSET SUPPORT P: Jordan Crouse L: linux-geode@lists.infradead.org (moderated for non-subscribers) W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html S: Supported -F: arch/x86/kernel/geode_32.c -F: drivers/char/hw_random/geode-rng.c -F: drivers/crypto/geode* -F: drivers/video/geode/ -F: arch/x86/include/asm/geode.h AMD IOMMU (AMD-VI) P: Joerg Roedel M: joerg.roedel@amd.com L: iommu@lists.linux-foundation.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git +T: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git S: Supported -F: arch/x86/kernel/amd_iommu*.c -F: arch/x86/include/asm/amd_iommu*.h AMD MICROCODE UPDATE SUPPORT -P: Andreas Herrmann -M: andreas.herrmann3@amd.com -L: amd64-microcode@amd64.org -S: Supported -F: arch/x86/kernel/microcode_amd.c +P: Andreas Herrmann +M: andeas.herrmann3@amd.com +L: amd64-microcode@amd64.org +S: Supported AMS (Apple Motion Sensor) DRIVER P: Stelian Pop @@ -472,7 +390,6 @@ M: stelian@popies.net P: Michael Hanselmann M: linux-kernel@hansmi.ch S: Supported -F: drivers/hwmon/ams/ AMSO1100 RNIC DRIVER P: Tom Tucker @@ -481,7 +398,6 @@ P: Steve Wise M: swise@opengridcomputing.com L: general@lists.openfabrics.org S: Maintained -F: drivers/infiniband/hw/amso1100/ AOA (Apple Onboard Audio) ALSA DRIVER P: Johannes Berg @@ -489,7 +405,6 @@ M: johannes@sipsolutions.net L: linuxppc-dev@ozlabs.org L: alsa-devel@alsa-project.org (subscribers-only) S: Maintained -F: sound/aoa/ APM DRIVER P: Stephen Rothwell @@ -497,63 +412,48 @@ M: sfr@canb.auug.org.au L: linux-laptop@vger.kernel.org W: http://www.canb.auug.org.au/~sfr/ S: Supported -F: arch/x86/kernel/apm_32.c -F: include/linux/apm_bios.h APPLE BCM5974 MULTITOUCH DRIVER P: Henrik Rydberg M: rydberg@euromail.se L: linux-input@vger.kernel.org S: Maintained -F: drivers/input/mouse/bcm5974.c APPLE SMC DRIVER P: Nicolas Boichat M: nicolas@boichat.ch L: mactel-linux-devel@lists.sourceforge.net S: Maintained -F: drivers/hwmon/applesmc.c APPLETALK NETWORK LAYER P: Arnaldo Carvalho de Melo M: acme@ghostprotocols.net S: Maintained -F: drivers/net/appletalk/ -F: net/appletalk/ APPLETOUCH TOUCHPAD DRIVER P: Johannes Berg M: johannes@sipsolutions.net L: linux-input@vger.kernel.org S: Maintained -F: Documentation/input/appletouch.txt -F: drivers/input/mouse/appletouch.c ARC FRAMEBUFFER DRIVER P: Jaya Kumar M: jayalk@intworks.biz S: Maintained -F: drivers/video/arcfb.c -F: drivers/video/fb_defio.c ARM MFM AND FLOPPY DRIVERS P: Ian Molton M: spyro@f2s.com S: Maintained -F: arch/arm/lib/floppydma.S -F: arch/arm/include/asm/floppy.h ARM PRIMECELL MMCI PL180/1 DRIVER S: Orphan -F: drivers/mmc/host/mmci.* ARM/ADI ROADRUNNER MACHINE SUPPORT P: Lennert Buytenhek M: kernel@wantstofly.org L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) S: Maintained -F: arch/arm/mach-ixp23xx/ -F: arch/arm/mach-ixp23xx/include/mach/ ARM/ADS SPHERE MACHINE SUPPORT P: Lennert Buytenhek @@ -607,7 +507,7 @@ ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE P: Paulius Zaleckas M: paulius.zaleckas@teltonika.lt L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) -T: git git://gitorious.org/linux-gemini/mainline.git +T: git gitorious.org/linux-gemini/mainline.git S: Maintained ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) @@ -743,10 +643,10 @@ W: http://hackndev.com S: Maintained ARM/PALMZ72 SUPPORT -P: Sergey Lapin -M: slapin@ossfans.org -W: http://hackndev.com -S: Maintained +P: Sergey Lapin +M: slapin@ossfans.org +W: http://hackndev.com +S: Maintained ARM/PLEB SUPPORT P: Peter Chubb @@ -807,17 +707,16 @@ L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) S: Maintained ARM/NUVOTON W90X900 ARM ARCHITECTURE -P: Wan ZongShun -M: mcuos.com@gmail.com -L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) -W: http://www.mcuos.com -S: Maintained +P: Wan ZongShun +M: mcuos.com@gmail.com +L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) +W: http://www.mcuos.com +S: Maintained ARPD SUPPORT P: Jonathan Layes L: netdev@vger.kernel.org S: Maintained -F: net/ipv4/arp.c ASUS ACPI EXTRAS DRIVER P: Corentin Chary @@ -828,15 +727,12 @@ L: acpi4asus-user@lists.sourceforge.net W: http://sourceforge.net/projects/acpi4asus W: http://xf.iksaif.net/acpi4asus S: Maintained -F: arch/x86/kernel/acpi/boot.c -F: drivers/platform/x86/asus_acpi.c ASUS ASB100 HARDWARE MONITOR DRIVER P: Mark M. Hoffman M: mhoffman@lightlink.com L: lm-sensors@lm-sensors.org S: Maintained -F: drivers/hwmon/asb100.c ASUS LAPTOP EXTRAS DRIVER P: Corentin Chary @@ -845,7 +741,6 @@ L: acpi4asus-user@lists.sourceforge.net W: http://sourceforge.net/projects/acpi4asus W: http://xf.iksaif.net/acpi4asus S: Maintained -F: drivers/platform/x86/asus-laptop.c ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API P: Dan Williams @@ -855,19 +750,12 @@ M: maciej.sosnowski@intel.com L: linux-kernel@vger.kernel.org W: http://sourceforge.net/projects/xscaleiop S: Supported -F: Documentation/crypto/async-tx-api.txt -F: crypto/async_tx/ -F: drivers/dma/ -F: include/linux/dmaengine.h -F: include/linux/async_tx.h ATA OVER ETHERNET (AOE) DRIVER P: Ed L. Cashin M: ecashin@coraid.com W: http://www.coraid.com/support/linux S: Supported -F: Documentation/aoe/ -F: drivers/block/aoe/ ATHEROS ATH5K WIRELESS DRIVER P: Jiri Slaby @@ -881,7 +769,6 @@ M: me@bobcopeland.com L: linux-wireless@vger.kernel.org L: ath5k-devel@lists.ath5k.org S: Maintained -F: drivers/net/wireless/ath5k/ ATHEROS ATH9K WIRELESS DRIVER P: Luis R. Rodriguez @@ -891,7 +778,6 @@ M: jmalinen@atheros.com L: linux-wireless@vger.kernel.org L: ath9k-devel@lists.ath9k.org S: Supported -F: drivers/net/wireless/ath9k/ ATHEROS AR9170 WIRELESS DRIVER P: Christian Lamparter @@ -905,7 +791,6 @@ ATI_REMOTE2 DRIVER P: Ville Syrjala M: syrjala@sci.fi S: Maintained -F: drivers/input/misc/ati_remote2.c ATLX ETHERNET DRIVERS P: Jay Cliburn @@ -918,7 +803,6 @@ L: atl1-devel@lists.sourceforge.net W: http://sourceforge.net/projects/atl1 W: http://atl1.sourceforge.net S: Maintained -F: drivers/net/atlx/ ATM P: Chas Williams @@ -927,8 +811,6 @@ L: linux-atm-general@lists.sourceforge.net (subscribers-only) L: netdev@vger.kernel.org W: http://linux-atm.sourceforge.net S: Maintained -F: drivers/atm/ -F: include/linux/atm* ATMEL AT91 MCI DRIVER P: Nicolas Ferre @@ -937,34 +819,28 @@ L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) W: http://www.atmel.com/products/AT91/ W: http://www.at91.com/ S: Maintained -F: drivers/mmc/host/at91_mci.c ATMEL AT91 / AT32 SERIAL DRIVER P: Haavard Skinnemoen M: hskinnemoen@atmel.com L: linux-kernel@vger.kernel.org S: Supported -F: drivers/serial/atmel_serial.c ATMEL LCDFB DRIVER P: Nicolas Ferre M: nicolas.ferre@atmel.com L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/atmel_lcdfb.c -F: include/video/atmel_lcdc.h ATMEL MACB ETHERNET DRIVER P: Haavard Skinnemoen M: hskinnemoen@atmel.com S: Supported -F: drivers/net/macb.* ATMEL SPI DRIVER P: Haavard Skinnemoen M: hskinnemoen@atmel.com S: Supported -F: drivers/spi/atmel_spi.* ATMEL USBA UDC DRIVER P: Haavard Skinnemoen @@ -972,7 +848,6 @@ M: hskinnemoen@atmel.com L: kernel@avr32linux.org W: http://avr32linux.org/twiki/bin/view/Main/AtmelUsbDeviceDriver S: Supported -F: drivers/usb/gadget/atmel_usba_udc.* ATMEL WIRELESS DRIVER P: Simon Kelley @@ -981,7 +856,6 @@ L: linux-wireless@vger.kernel.org W: http://www.thekelleys.org.uk/atmel W: http://atmelwlandriver.sourceforge.net/ S: Maintained -F: drivers/net/wireless/atmel* AUDIT SUBSYSTEM P: Al Viro @@ -990,10 +864,8 @@ P: Eric Paris M: eparis@redhat.com L: linux-audit@redhat.com (subscribers-only) W: http://people.redhat.com/sgrubb/audit/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git +T: git git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current.git S: Maintained -F: include/linux/audit.h -F: kernel/audit* AUXILIARY DISPLAY DRIVERS P: Miguel Ojeda Sandonis @@ -1002,8 +874,6 @@ L: linux-kernel@vger.kernel.org W: http://miguelojeda.es/auxdisplay.htm W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm S: Maintained -F: drivers/auxdisplay/ -F: include/linux/cfag12864b.h AVR32 ARCHITECTURE P: Haavard Skinnemoen @@ -1012,13 +882,11 @@ W: http://www.atmel.com/products/AVR32/ W: http://avr32linux.org/ W: http://avrfreaks.net/ S: Supported -F: arch/avr32/ AVR32/AT32AP MACHINE SUPPORT P: Haavard Skinnemoen M: hskinnemoen@atmel.com S: Supported -F: arch/avr32/mach-at32ap/ AX.25 NETWORK LAYER P: Ralf Baechle @@ -1026,9 +894,6 @@ M: ralf@linux-mips.org L: linux-hams@vger.kernel.org W: http://www.linux-ax25.org/ S: Maintained -F: include/linux/ax25.h -F: include/net/ax25.h -F: net/ax25/ B43 WIRELESS DRIVER P: Michael Buesch @@ -1038,7 +903,6 @@ M: stefano.brivio@polimi.it L: linux-wireless@vger.kernel.org W: http://linuxwireless.org/en/users/Drivers/b43 S: Maintained -F: drivers/net/wireless/b43/ B43LEGACY WIRELESS DRIVER P: Larry Finger @@ -1048,14 +912,11 @@ M: stefano.brivio@polimi.it L: linux-wireless@vger.kernel.org W: http://linuxwireless.org/en/users/Drivers/b43 S: Maintained -F: drivers/net/wireless/b43legacy/ BACKLIGHT CLASS/SUBSYSTEM P: Richard Purdie M: rpurdie@rpsys.net S: Maintained -F: drivers/video/backlight/ -F: include/linux/backlight.h BAYCOM/HDLCDRV DRIVERS FOR AX.25 P: Thomas Sailer @@ -1063,24 +924,18 @@ M: t.sailer@alumni.ethz.ch L: linux-hams@vger.kernel.org W: http://www.baycom.org/~tom/ham/ham.html S: Maintained -F: drivers/net/hamradio/baycom* BEFS FILE SYSTEM P: Sergey S. Kostyliov M: rathamahata@php4.ru L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/befs.txt -F: fs/befs/ BFS FILE SYSTEM P: Tigran A. Aivazian M: tigran@aivazian.fsnet.co.uk L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/bfs.txt -F: fs/bfs/ -F: include/linux/bfs_fs.h BLACKFIN ARCHITECTURE P: Bryan Wu @@ -1088,7 +943,6 @@ M: cooloney@kernel.org L: uclinux-dist-devel@blackfin.uclinux.org W: http://blackfin.uclinux.org S: Supported -F: arch/blackfin/ BLACKFIN EMAC DRIVER P: Bryan Wu @@ -1096,7 +950,6 @@ M: cooloney@kernel.org L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) W: http://blackfin.uclinux.org S: Supported -F: drivers/net/bfin_mac.* BLACKFIN RTC DRIVER P: Mike Frysinger @@ -1104,7 +957,6 @@ M: vapier.adi@gmail.com L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) W: http://blackfin.uclinux.org S: Supported -F: drivers/rtc/rtc-bfin.c BLACKFIN SERIAL DRIVER P: Sonic Zhang @@ -1112,7 +964,6 @@ M: sonic.zhang@analog.com L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) W: http://blackfin.uclinux.org S: Supported -F: drivers/serial/bfin_5xx.c BLACKFIN WATCHDOG DRIVER P: Mike Frysinger @@ -1120,7 +971,6 @@ M: vapier.adi@gmail.com L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) W: http://blackfin.uclinux.org S: Supported -F: drivers/watchdog/bfin_wdt.c BLACKFIN I2C TWI DRIVER P: Sonic Zhang @@ -1128,22 +978,19 @@ M: sonic.zhang@analog.com L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) W: http://blackfin.uclinux.org/ S: Supported -F: drivers/i2c/busses/i2c-bfin-twi.c BLOCK LAYER P: Jens Axboe M: axboe@kernel.dk L: linux-kernel@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git +T: git kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git S: Maintained -F: block/ BLOCK2MTD DRIVER P: Joern Engel M: joern@lazybastard.org L: linux-mtd@lists.infradead.org S: Maintained -F: drivers/mtd/devices/block2mtd.c BLUETOOTH DRIVERS P: Marcel Holtmann @@ -1151,17 +998,14 @@ M: marcel@holtmann.org L: linux-bluetooth@vger.kernel.org W: http://www.bluez.org/ S: Maintained -F: drivers/bluetooth/ BLUETOOTH SUBSYSTEM P: Marcel Holtmann M: marcel@holtmann.org L: linux-bluetooth@vger.kernel.org W: http://www.bluez.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git S: Maintained -F: net/bluetooth/ -F: include/net/bluetooth/ BONDING DRIVER P: Jay Vosburgh @@ -1169,30 +1013,24 @@ M: fubar@us.ibm.com L: bonding-devel@lists.sourceforge.net W: http://sourceforge.net/projects/bonding/ S: Supported -F: drivers/net/bonding/ -F: include/linux/if_bonding.h BROADCOM B44 10/100 ETHERNET DRIVER P: Gary Zambrano M: zambrano@broadcom.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/b44.* BROADCOM BNX2 GIGABIT ETHERNET DRIVER P: Michael Chan M: mchan@broadcom.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/bnx2.* -F: drivers/net/bnx2_* BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER P: Eilon Greenstein M: eilong@broadcom.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/bnx2x* BROADCOM TG3 GIGABIT ETHERNET DRIVER P: Matt Carlson @@ -1201,51 +1039,41 @@ P: Michael Chan M: mchan@broadcom.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/tg3.* BSG (block layer generic sg v4 driver) P: FUJITA Tomonori M: fujita.tomonori@lab.ntt.co.jp L: linux-scsi@vger.kernel.org S: Supported -F: block/bsg.c -F: include/linux/bsg.h BT8XXGPIO DRIVER P: Michael Buesch M: mb@bu3sch.de W: http://bu3sch.de/btgpio.php S: Maintained -F: drivers/gpio/bt8xxgpio.c BTRFS FILE SYSTEM P: Chris Mason M: chris.mason@oracle.com L: linux-btrfs@vger.kernel.org W: http://btrfs.wiki.kernel.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable.git +T: git kernel.org:/pub/scm/linux/kernel/git/mason/btrfs-unstable.git S: Maintained -F: Documentation/filesystems/btrfs.txt -F: fs/btrfs/ BTTV VIDEO4LINUX DRIVER P: Mauro Carvalho Chehab M: mchehab@infradead.org L: linux-media@vger.kernel.org W: http://linuxtv.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: Documentation/video4linux/bttv/ -F: drivers/media/video/bt8xx/bttv* CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER P: Jonathan Corbet M: corbet@lwn.net L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: Documentation/video4linux/cafe_ccic -F: drivers/media/video/cafe_ccic* CALGARY x86-64 IOMMU P: Muli Ben-Yehuda @@ -1255,10 +1083,6 @@ M: jdmason@kudzu.us L: linux-kernel@vger.kernel.org L: discuss@x86-64.org S: Maintained -F: arch/x86/kernel/pci-calgary_64.c -F: arch/x86/kernel/tce_64.c -F: arch/x86/include/asm/calgary.h -F: arch/x86/include/asm/tce.h CAN NETWORK LAYER P: Urs Thuermann @@ -1268,9 +1092,6 @@ M: oliver.hartkopp@volkswagen.de L: socketcan-core@lists.berlios.de (subscribers-only) W: http://developer.berlios.de/projects/socketcan/ S: Maintained -F: drivers/net/can/ -F: include/linux/can/ -F: include/linux/can.h CELL BROADBAND ENGINE ARCHITECTURE P: Arnd Bergmann @@ -1279,23 +1100,12 @@ L: linuxppc-dev@ozlabs.org L: cbe-oss-dev@ozlabs.org W: http://www.ibm.com/developerworks/power/cell/ S: Supported -F: arch/powerpc/include/asm/cell*.h -F: arch/powerpc/include/asm/lv1call.h -F: arch/powerpc/include/asm/ps3*.h -F: arch/powerpc/include/asm/spu*.h -F: arch/powerpc/oprofile/*cell* -F: arch/powerpc/platforms/cell/ -F: arch/powerpc/platforms/ps3/ CERTIFIED WIRELESS USB (WUSB) SUBSYSTEM: P: David Vrabel M: david.vrabel@csr.com L: linux-usb@vger.kernel.org S: Supported -F: Documentation/usb/WUSB-Design-overview.txt -F: Documentation/usb/wusb-cbaf -F: drivers/usb/wusbcore/ -F: include/linux/usb/wusb* CFAG12864B LCD DRIVER P: Miguel Ojeda Sandonis @@ -1304,8 +1114,6 @@ L: linux-kernel@vger.kernel.org W: http://miguelojeda.es/auxdisplay.htm W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm S: Maintained -F: drivers/auxdisplay/cfag12864b.c -F: include/linux/cfag12864b.h CFAG12864BFB LCD FRAMEBUFFER DRIVER P: Miguel Ojeda Sandonis @@ -1314,25 +1122,18 @@ L: linux-kernel@vger.kernel.org W: http://miguelojeda.es/auxdisplay.htm W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm S: Maintained -F: drivers/auxdisplay/cfag12864bfb.c -F: include/linux/cfag12864b.h CFG80211 and NL80211 P: Johannes Berg M: johannes@sipsolutions.net L: linux-wireless@vger.kernel.org S: Maintained -F: include/linux/nl80211.h -F: include/net/cfg80211.h -F: net/wireless/* -X: net/wireless/wext* CHECKPATCH P: Andy Whitcroft M: apw@canonical.com L: linux-kernel@vger.kernel.org S: Supported -F: scripts/checkpatch.pl CISCO 10G ETHERNET DRIVER P: Scott Feldman @@ -1340,28 +1141,24 @@ M: scofeldm@cisco.com P: Joe Eykholt M: jeykholt@cisco.com S: Supported -F: drivers/net/enic/ CIRRUS LOGIC EP93XX ETHERNET DRIVER P: Lennert Buytenhek M: kernel@wantstofly.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/arm/ep93xx_eth.c CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER P: Lennert Buytenhek M: kernel@wantstofly.org L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/host/ohci-ep93xx.c CIRRUS LOGIC CS4270 SOUND DRIVER P: Timur Tabi M: timur@freescale.com L: alsa-devel@alsa-project.org S: Supported -F: sound/soc/codecs/cs4270* CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER P: Cirrus Logic Corporation (kernel 2.2 driver) @@ -1369,8 +1166,6 @@ M: Cirrus Logic Corporation, Thomas Woller P: Nils Faerber (port to kernel 2.4) M: Nils Faerber S: Maintained -F: Documentation/input/cs461x.txt -F: sound/pci/cs46xx/ CODA FILE SYSTEM P: Jan Harkes @@ -1379,9 +1174,6 @@ M: coda@cs.cmu.edu L: codalist@coda.cs.cmu.edu W: http://www.coda.cs.cmu.edu/ S: Maintained -F: Documentation/filesystems/coda.txt -F: fs/coda/ -F: include/linux/coda*.h COMMON INTERNET FILE SYSTEM (CIFS) P: Steve French @@ -1389,10 +1181,8 @@ M: sfrench@samba.org L: linux-cifs-client@lists.samba.org L: samba-technical@lists.samba.org W: http://linux-cifs.samba.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git S: Supported -F: Documentation/filesystems/cifs.txt -F: fs/cifs/ COMPACTPCI HOTPLUG CORE P: Scott Murray @@ -1400,7 +1190,6 @@ M: scottm@somanetworks.com M: scott@spiteful.org L: linux-pci@vger.kernel.org S: Supported -F: drivers/pci/hotplug/cpci_hotplug* COMPACTPCI HOTPLUG ZIATECH ZT5550 DRIVER P: Scott Murray @@ -1408,7 +1197,6 @@ M: scottm@somanetworks.com M: scott@spiteful.org L: linux-pci@vger.kernel.org S: Supported -F: drivers/pci/hotplug/cpcihp_zt5550.* COMPACTPCI HOTPLUG GENERIC DRIVER P: Scott Murray @@ -1416,21 +1204,17 @@ M: scottm@somanetworks.com M: scott@spiteful.org L: linux-pci@vger.kernel.org S: Supported -F: drivers/pci/hotplug/cpcihp_generic.c COMPAL LAPTOP SUPPORT P: Cezary Jackiewicz M: cezary.jackiewicz@gmail.com S: Maintained -F: drivers/platform/x86/compal-laptop.c COMPUTONE INTELLIPORT MULTIPORT CARD P: Michael H. Warfield M: mhw@wittsend.com W: http://www.wittsend.com/computone.html S: Maintained -F: Documentation/serial/computone.txt -F: drivers/char/ip2/ CONEXANT ACCESSRUNNER USB DRIVER P: Simon Arlott @@ -1438,15 +1222,12 @@ M: cxacru@fire.lp0.eu L: accessrunner-general@lists.sourceforge.net W: http://accessrunner.sourceforge.net/ S: Maintained -F: drivers/usb/atm/cxacru.c CONFIGFS P: Joel Becker M: joel.becker@oracle.com L: linux-kernel@vger.kernel.org S: Supported -F: fs/configfs/ -F: include/linux/configfs.h CONTROL GROUPS (CGROUPS) P: Paul Menage @@ -1455,41 +1236,31 @@ P: Li Zefan M: lizf@cn.fujitsu.com L: containers@lists.linux-foundation.org S: Maintained -F: include/linux/cgroup* -F: kernel/cgroup* CORETEMP HARDWARE MONITORING DRIVER P: Rudolf Marek M: r.marek@assembler.cz L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/coretemp -F: drivers/hwmon/coretemp.c COSA/SRP SYNC SERIAL DRIVER P: Jan "Yenya" Kasprzak M: kas@fi.muni.cz W: http://www.fi.muni.cz/~kas/cosa/ S: Maintained -F: drivers/net/wan/cosa* CPU FREQUENCY DRIVERS P: Dave Jones M: davej@redhat.com L: cpufreq@vger.kernel.org W: http://www.codemonkey.org.uk/projects/cpufreq/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git +T: git kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git S: Maintained -F: arch/x86/kernel/cpu/cpufreq/ -F: drivers/cpufreq/ -F: include/linux/cpufreq.h CPUID/MSR DRIVER P: H. Peter Anvin M: hpa@zytor.com S: Maintained -F: arch/x86/kernel/cpuid.c -F: arch/x86/kernel/msr.c CPUSETS P: Paul Menage @@ -1498,15 +1269,10 @@ L: linux-kernel@vger.kernel.org W: http://www.bullopensource.org/cpuset/ W: http://oss.sgi.com/projects/cpusets/ S: Supported -F: Documentation/cgroups/cpusets.txt -F: include/linux/cpuset.h -F: kernel/cpuset.c CRAMFS FILESYSTEM W: http://sourceforge.net/projects/cramfs/ S: Orphan -F: Documentation/filesystems/cramfs.txt -F: fs/cramfs/ CRIS PORT P: Mikael Starvik @@ -1516,7 +1282,6 @@ M: jesper.nilsson@axis.com L: dev-etrax@axis.com W: http://developer.axis.com S: Maintained -F: arch/cris/ CRYPTO API P: Herbert Xu @@ -1524,13 +1289,8 @@ M: herbert@gondor.apana.org.au P: David S. Miller M: davem@davemloft.net L: linux-crypto@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6.git S: Maintained -F: Documentation/crypto/ -F: arch/*/crypto/ -F: crypto/ -F: drivers/crypto/ -F: include/crypto/ CRYPTOGRAPHIC RANDOM NUMBER GENERATOR P: Neil Horman @@ -1542,21 +1302,16 @@ CS5535 Audio ALSA driver P: Jaya Kumar M: jayakumar.alsa@gmail.com S: Maintained -F: sound/pci/cs5535audio/ CX18 VIDEO4LINUX DRIVER -P: Hans Verkuil -M: hverkuil@xs4all.nl -P: Andy Walls -M: awalls@radix.net +P: Hans Verkuil, Andy Walls +M: hverkuil@xs4all.nl, awalls@radix.net L: ivtv-devel@ivtvdriver.org L: ivtv-users@ivtvdriver.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://linuxtv.org S: Maintained -F: Documentation/video4linux/cx18.txt -F: drivers/media/video/cx18/ CXGB3 ETHERNET DRIVER (CXGB3) P: Divy Le Ray @@ -1564,7 +1319,6 @@ M: divy@chelsio.com L: netdev@vger.kernel.org W: http://www.chelsio.com S: Supported -F: drivers/net/cxgb3/ CXGB3 IWARP RNIC DRIVER (IW_CXGB3) P: Steve Wise @@ -1572,32 +1326,32 @@ M: swise@chelsio.com L: general@lists.openfabrics.org W: http://www.openfabrics.org S: Supported -F: drivers/infiniband/hw/cxgb3/ CYBERPRO FB DRIVER P: Russell King M: rmk@arm.linux.org.uk W: http://www.arm.linux.org.uk/ S: Maintained -F: drivers/video/cyber2000fb.* + +CYBLAFB FRAMEBUFFER DRIVER +P: Knut Petersen +M: Knut_Petersen@t-online.de +L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) +S: Maintained CYCLADES 2X SYNC CARD DRIVER P: Arnaldo Carvalho de Melo M: acme@ghostprotocols.net W: http://oops.ghostprotocols.net:81/blog S: Maintained -F: drivers/net/wan/cycx* CYCLADES ASYNC MUX DRIVER W: http://www.cyclades.com/ S: Orphan -F: drivers/char/cyclades.c -F: include/linux/cyclades.h CYCLADES PC300 DRIVER W: http://www.cyclades.com/ S: Orphan -F: drivers/net/wan/pc300* DAMA SLAVE for AX.25 P: Joerg Reuter @@ -1606,21 +1360,12 @@ W: http://yaina.de/jreuter/ W: http://www.qsl.net/dl1bke/ L: linux-hams@vger.kernel.org S: Maintained -F: net/ax25/af_ax25.c -F: net/ax25/ax25_dev.c -F: net/ax25/ax25_ds_* -F: net/ax25/ax25_in.c -F: net/ax25/ax25_out.c -F: net/ax25/ax25_timer.c -F: net/ax25/sysctl_net_ax25.c DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER P: Tobias Ringstrom M: tori@unhappy.mine.nu L: netdev@vger.kernel.org S: Maintained -F: Documentation/networking/dmfe.txt -F: drivers/net/tulip/dmfe.c DC390/AM53C974 SCSI driver P: Kurt Garloff @@ -1629,7 +1374,6 @@ W: http://www.garloff.de/kurt/linux/dc390/ P: Guennadi Liakhovetski M: g.liakhovetski@gmx.de S: Maintained -F: drivers/scsi/tmscsim.* DC395x SCSI driver P: Oliver Neukum @@ -1642,8 +1386,6 @@ W: http://twibble.org/dist/dc395x/ L: dc395x@twibble.org L: http://lists.twibble.org/mailman/listinfo/dc395x/ S: Maintained -F: Documentation/scsi/dc395x.txt -F: drivers/scsi/dc395x.* DCCP PROTOCOL P: Arnaldo Carvalho de Melo @@ -1651,9 +1393,6 @@ M: acme@ghostprotocols.net L: dccp@vger.kernel.org W: http://linux-net.osdl.org/index.php/DCCP S: Maintained -F: include/linux/dccp.h -F: include/linux/tfrc.h -F: net/dccp/ DECnet NETWORK LAYER P: Christine Caulfield @@ -1661,35 +1400,27 @@ M: christine.caulfield@googlemail.com W: http://linux-decnet.sourceforge.net L: linux-decnet-user@lists.sourceforge.net S: Maintained -F: Documentation/networking/decnet.txt -F: net/decnet/ DEFXX FDDI NETWORK DRIVER P: Maciej W. Rozycki M: macro@linux-mips.org S: Maintained -F: drivers/net/defxx.* DELL LAPTOP DRIVER P: Matthew Garrett M: mjg59@srcf.ucam.org S: Maintained -F: drivers/platform/x86/dell-laptop.c DELL LAPTOP SMM DRIVER P: Massimo Dal Zotto M: dz@debian.org W: http://www.debian.org/~dz/i8k/ S: Maintained -F: drivers/char/i8k.c -F: include/linux/i8k.h DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas) P: Doug Warzecha M: Douglas_Warzecha@dell.com S: Maintained -F: Documentation/dcdbas.txt -F: drivers/firmware/dcdbas.* DELL WMI EXTRAS DRIVER P: Matthew Garrett @@ -1708,10 +1439,6 @@ P: Alasdair Kergon L: dm-devel@redhat.com W: http://sources.redhat.com/dm S: Maintained -F: Documentation/device-mapper/ -F: drivers/md/dm* -F: include/linux/device-mapper.h -F: include/linux/dm-*.h DIGI INTL. EPCA DRIVER P: Digi International, Inc @@ -1719,18 +1446,12 @@ M: Eng.Linux@digi.com L: Eng.Linux@digi.com W: http://www.digi.com S: Orphan -F: Documentation/serial/digiepca.txt -F: drivers/char/epca* -F: drivers/char/digi* DIRECTORY NOTIFICATION (DNOTIFY) P: Stephen Rothwell M: sfr@canb.auug.org.au L: linux-kernel@vger.kernel.org S: Supported -F: Documentation/filesystems/dnotify.txt -F: fs/notify/dnotify/ -F: include/linux/dnotify.h DISK GEOMETRY AND PARTITION HANDLING P: Andries Brouwer @@ -1745,9 +1466,6 @@ P: Jan Kara M: jack@suse.cz L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/quota.txt -F: fs/quota/ -F: include/linux/quota*.h DISTRIBUTED LOCK MANAGER (DLM) P: Christine Caulfield @@ -1756,9 +1474,8 @@ P: David Teigland M: teigland@redhat.com L: cluster-devel@redhat.com W: http://sources.redhat.com/cluster/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm.git +T: git kernel.org:/pub/scm/linux/kernel/git/teigland/dlm.git S: Supported -F: fs/dlm/ DMA GENERIC OFFLOAD ENGINE SUBSYSTEM P: Maciej Sosnowski @@ -1767,16 +1484,12 @@ P: Dan Williams M: dan.j.williams@intel.com L: linux-kernel@vger.kernel.org S: Supported -F: drivers/dma/ -F: include/linux/dma* DME1737 HARDWARE MONITOR DRIVER P: Juerg Haefliger M: juergh@gmail.com L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/dme1737 -F: drivers/hwmon/dme1737.c DOCBOOK FOR DOCUMENTATION P: Randy Dunlap @@ -1788,22 +1501,18 @@ P: Shaohua Li M: shaohua.li@intel.com L: linux-acpi@vger.kernel.org S: Supported -F: drivers/acpi/dock.c -DOCUMENTATION +DOCUMENTATION (/Documentation directory) P: Randy Dunlap M: rdunlap@xenotime.net L: linux-doc@vger.kernel.org S: Maintained -F: Documentation/ DOUBLETALK DRIVER P: James R. Van Zandt M: jrv@vanzandt.mv.com L: blinux-list@redhat.com S: Maintained -F: drivers/char/dtlk.c -F: include/linux/dtlk.h DPT_I2O SCSI RAID DRIVER P: Adaptec OEM Raid Solutions @@ -1811,8 +1520,6 @@ M: aacraid@adaptec.com L: linux-scsi@vger.kernel.org W: http://www.adaptec.com/ S: Maintained -F: drivers/scsi/dpt* -F: drivers/scsi/dpt/ DRIVER CORE, KOBJECTS, AND SYSFS P: Greg Kroah-Hartman @@ -1820,55 +1527,48 @@ M: gregkh@suse.de L: linux-kernel@vger.kernel.org T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ S: Supported -F: Documentation/kobject.txt -F: drivers/base/ -F: fs/sysfs/ -F: include/linux/kobj* -F: lib/kobj* DRM DRIVERS P: David Airlie M: airlied@linux.ie L: dri-devel@lists.sourceforge.net -T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git S: Maintained -F: drivers/gpu/drm/ DSCC4 DRIVER P: Francois Romieu M: romieu@fr.zoreil.com L: netdev@vger.kernel.org S: Maintained -F: drivers/net/wan/dscc4.c + +DVB SUBSYSTEM AND DRIVERS +P: LinuxTV.org Project +M: linux-media@vger.kernel.org +W: http://linuxtv.org/ +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +S: Maintained DZ DECSTATION DZ11 SERIAL DRIVER P: Maciej W. Rozycki M: macro@linux-mips.org S: Maintained -F: drivers/serial/dz.* EATA-DMA SCSI DRIVER P: Michael Neuffer -M: mike@i-Connect.Net -L: linux-eata@i-connect.net -L: linux-scsi@vger.kernel.org +L: linux-eata@i-connect.net, linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/eata* EATA ISA/EISA/PCI SCSI DRIVER P: Dario Ballabio M: ballabio_dario@emc.com L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/eata.c EATA-PIO SCSI DRIVER P: Michael Neuffer M: mike@i-Connect.Net -L: linux-eata@i-connect.net -L: linux-scsi@vger.kernel.org +L: linux-eata@i-connect.net, linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/eata_pio.* EBTABLES P: Bart De Schuymer @@ -1877,105 +1577,87 @@ L: ebtables-user@lists.sourceforge.net L: ebtables-devel@lists.sourceforge.net W: http://ebtables.sourceforge.net/ S: Maintained -F: include/linux/netfilter_bridge/ebt_*.h -F: net/bridge/netfilter/ebt*.c ECRYPT FILE SYSTEM -P: Tyler Hicks -M: tyhicks@linux.vnet.ibm.com -M: Dustin Kirkland -P: kirkland@canonical.com +P: Tyler Hicks, Dustin Kirkland +M: tyhicks@linux.vnet.ibm.com, kirkland@canonical.com L: ecryptfs-devel@lists.launchpad.net W: https://launchpad.net/ecryptfs S: Supported -F: Documentation/filesystems/ecryptfs.txt -F: fs/ecryptfs/ EDAC-CORE P: Doug Thompson M: dougthompson@xmission.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Supported -F: Documentation/edac.txt -F: drivers/edac/edac_* -F: include/linux/edac.h EDAC-E752X P: Mark Gross P: Doug Thompson M: mark.gross@intel.com M: dougthompson@xmission.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/e752x_edac.c EDAC-E7XXX P: Doug Thompson M: dougthompson@xmission.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/e7xxx_edac.c EDAC-I82443BXGX P: Tim Small M: tim@buttersideup.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/i82443bxgx_edac.c EDAC-I3000 P: Jason Uhlenkott M: juhlenko@akamai.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/i3000_edac.c EDAC-I5000 P: Doug Thompson M: dougthompson@xmission.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/i5000_edac.c EDAC-I5400 P: Mauro Carvalho Chehab M: mchehab@redhat.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/i5400_edac.c EDAC-I82975X P: Ranganathan Desikan P: Arvind R. M: rdesikan@jetzbroadband.com M: arvind@acarlab.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/i82975x_edac.c EDAC-PASEMI P: Egor Martovetsky M: egor@pasemi.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/pasemi_edac.c EDAC-R82600 P: Tim Small M: tim@buttersideup.com -L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) +L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained -F: drivers/edac/r82600_edac.c EEEPC LAPTOP EXTRAS DRIVER P: Corentin Chary @@ -1983,12 +1665,10 @@ M: corentincj@iksaif.net L: acpi4asus-user@lists.sourceforge.net W: http://sourceforge.net/projects/acpi4asus S: Maintained -F: drivers/platform/x86/eeepc-laptop.c EFS FILESYSTEM W: http://aeschi.ch.eu.org/efs/ S: Orphan -F: fs/efs/ EHCA (IBM GX bus InfiniBand adapter) DRIVER P: Hoang-Nam Nguyen @@ -1997,7 +1677,6 @@ P: Christoph Raisch M: raisch@de.ibm.com L: general@lists.openfabrics.org S: Supported -F: drivers/infiniband/hw/ehca/ EMBEDDED LINUX P: Paul Gortmaker @@ -2013,29 +1692,22 @@ M: james.smart@emulex.com L: linux-scsi@vger.kernel.org W: http://sourceforge.net/projects/lpfcxxxx S: Supported -F: drivers/scsi/lpfc/ EPSON 1355 FRAMEBUFFER DRIVER P: Christopher Hoover -M: ch@murgatroid.com -P: Christopher Hoover -M: ch@hpl.hp.com +M: ch@murgatroid.com, ch@hpl.hp.com S: Maintained -F: drivers/video/epson1355fb.c EPSON S1D13XXX FRAMEBUFFER DRIVER P: Kristoffer Ericson M: kristoffer.ericson@gmail.com S: Maintained -F: drivers/video/s1d13xxxfb.c -F: include/video/s1d13xxxfb.h ETHEREXPRESS-16 NETWORK DRIVER P: Philip Blundell M: philb@gnu.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/eexpress.* ETHERNET BRIDGE P: Stephen Hemminger @@ -2043,126 +1715,87 @@ M: shemminger@linux-foundation.org L: bridge@lists.linux-foundation.org W: http://www.linux-foundation.org/en/Net:Bridge S: Maintained -F: include/linux/netfilter_bridge/ -F: net/bridge/ ETHERTEAM 16I DRIVER P: Mika Kuoppala M: miku@iki.fi S: Maintained -F: drivers/net/eth16i.c EXT2 FILE SYSTEM L: linux-ext4@vger.kernel.org S: Maintained -F: Documentation/filesystems/ext2.txt -F: fs/ext2/ -F: include/linux/ext2* EXT3 FILE SYSTEM -P: Stephen Tweedie -M: sct@redhat.com -P: Andrew Morton -M: akpm@linux-foundation.org -P: Andreas Dilger -M: adilger@sun.com +P: Stephen Tweedie, Andrew Morton +M: sct@redhat.com, akpm@linux-foundation.org, adilger@sun.com L: linux-ext4@vger.kernel.org S: Maintained -F: Documentation/filesystems/ext3.txt -F: fs/ext3/ -F: include/linux/ext3* EXT4 FILE SYSTEM P: Theodore Ts'o -M: tytso@mit.edu -P: Andreas Dilger -M: adilger@sun.com +M: tytso@mit.edu, adilger@sun.com L: linux-ext4@vger.kernel.org W: http://ext4.wiki.kernel.org S: Maintained -F: Documentation/filesystems/ext4.txt -F: fs/ext4/ F71805F HARDWARE MONITORING DRIVER P: Jean Delvare M: khali@linux-fr.org L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/f71805f -F: drivers/hwmon/f71805f.c FARSYNC SYNCHRONOUS DRIVER P: Kevin Curtis M: kevin.curtis@farsite.co.uk W: http://www.farsite.co.uk/ S: Supported -F: drivers/net/wan/farsync.* FAULT INJECTION SUPPORT P: Akinobu Mita M: akinobu.mita@gmail.com S: Supported -F: Documentation/fault-injection/ -F: lib/fault-inject.c FILE LOCKING (flock() and fcntl()/lockf()) P: Matthew Wilcox M: matthew@wil.cx L: linux-fsdevel@vger.kernel.org S: Maintained -F: include/linux/fcntl.h -F: include/linux/fs.h -F: fs/fcntl.c -F: fs/locks.c FILESYSTEMS (VFS and infrastructure) P: Alexander Viro M: viro@zeniv.linux.org.uk L: linux-fsdevel@vger.kernel.org S: Maintained -F: fs/* FINTEK F75375S HARDWARE MONITOR AND FAN CONTROLLER DRIVER P: Riku Voipio M: riku.vipio@iki.fi L: lm-sensors@lm-sensors.org S: Maintained -F: drivers/hwmon/f75375s.c -F: include/linux/f75375s.h -FIREWIRE SUBSYSTEM -P: Kristian Hoegsberg -M: krh@redhat.com -P: Stefan Richter -M: stefanr@s5r6.in-berlin.de +FIREWIRE SUBSYSTEM (drivers/firewire, ) +P: Kristian Hoegsberg, Stefan Richter +M: krh@redhat.com, stefanr@s5r6.in-berlin.de L: linux1394-devel@lists.sourceforge.net W: http://www.linux1394.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git S: Maintained -F: drivers/firewire/ -F: include/linux/firewire*.h FIRMWARE LOADER (request_firmware) L: linux-kernel@vger.kernel.org S: Orphan -F: Documentation/firmware_class/ -F: drivers/base/firmware*.c -F: include/linux/firmware.h FPU EMULATOR P: Bill Metzenthen -M: billm@melbpc.org.au -W: http://floatingpoint.sourceforge.net/emulator/index.html +M: billm@suburbia.net +W: http://suburbia.net/~billm/floating-point/emulator/ S: Maintained -F: arch/x86/math-emu/ FRAME RELAY DLCI/FRAD (Sangoma drivers too) P: Mike McLagan M: mike.mclagan@linux.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/wan/dlci.c -F: drivers/net/wan/sdla.c FRAMEBUFFER LAYER P: Antonino Daplas @@ -2170,9 +1803,6 @@ M: adaplas@gmail.com L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) W: http://linux-fbdev.sourceforge.net/ S: Maintained -F: Documentation/fb/ -F: drivers/video/fb* -F: include/linux/fb.h FREESCALE DMA DRIVER P: Li Yang @@ -2182,7 +1812,6 @@ M: zw@zh-kernel.org L: linuxppc-embedded@ozlabs.org L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/dma/fsldma.* FREESCALE I2C CPM DRIVER P: Jochen Friedrich @@ -2190,7 +1819,6 @@ M: jochen@scram.de L: linuxppc-dev@ozlabs.org L: linux-i2c@vger.kernel.org S: Maintained -F: drivers/i2c/busses/i2c-cpm.c FREESCALE IMX / MXC FRAMEBUFFER DRIVER P: Sascha Hauer @@ -2198,8 +1826,6 @@ M: kernel@pengutronix.de L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) S: Maintained -F: arch/arm/plat-mxc/include/mach/imxfb.h -F: drivers/video/imxfb.c FREESCALE SOC FS_ENET DRIVER P: Pantelis Antoniou @@ -2209,16 +1835,12 @@ M: vbordug@ru.mvista.com L: linuxppc-dev@ozlabs.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/fs_enet/ -F: include/linux/fs_enet_pd.h FREESCALE QUICC ENGINE LIBRARY P: Timur Tabi M: timur@freescale.com L: linuxppc-dev@ozlabs.org S: Supported -F: arch/powerpc/sysdev/qe_lib/ -F: arch/powerpc/include/asm/*qe.h FREESCALE HIGHSPEED USB DEVICE DRIVER P: Li Yang @@ -2226,7 +1848,6 @@ M: leoli@freescale.com L: linux-usb@vger.kernel.org L: linuxppc-dev@ozlabs.org S: Maintained -F: drivers/usb/gadget/fsl_usb2_udc.c FREESCALE QUICC ENGINE UCC ETHERNET DRIVER P: Li Yang @@ -2234,14 +1855,12 @@ M: leoli@freescale.com L: netdev@vger.kernel.org L: linuxppc-dev@ozlabs.org S: Maintained -F: drivers/net/ucc_geth* FREESCALE QUICC ENGINE UCC UART DRIVER P: Timur Tabi M: timur@freescale.com L: linuxppc-dev@ozlabs.org S: Supported -F: drivers/serial/ucc_uart.c FREESCALE SOC SOUND DRIVERS P: Timur Tabi @@ -2249,15 +1868,12 @@ M: timur@freescale.com L: alsa-devel@alsa-project.org L: linuxppc-dev@ozlabs.org S: Supported -F: sound/soc/fsl/fsl* -F: sound/soc/fsl/mpc8610_hpcd.c FREEVXFS FILESYSTEM P: Christoph Hellwig M: hch@infradead.org W: ftp://ftp.openlinux.org/pub/people/hch/vxfs S: Maintained -F: fs/freevxfs/ FREEZER P: Pavel Machek @@ -2266,32 +1882,22 @@ P: Rafael J. Wysocki M: rjw@sisk.pl L: linux-pm@lists.linux-foundation.org S: Supported -F: Documentation/power/freezing-of-tasks.txt -F: include/linux/freezer.h -F: kernel/freezer.c FTRACE P: Steven Rostedt M: rostedt@goodmis.org S: Maintained -F: Documentation/ftrace.txt -F: arch/*/*/*/ftrace.h -F: arch/*/kernel/ftrace.c -F: include/*/ftrace.h -F: kernel/trace/ FUJITSU FR-V (FRV) PORT P: David Howells M: dhowells@redhat.com S: Maintained -F: arch/frv/ FUJITSU LAPTOP EXTRAS P: Jonathan Woithe M: jwoithe@physics.adelaide.edu.au L: linux-acpi@vger.kernel.org S: Maintained -F: drivers/platform/x86/fujitsu-laptop.c FUSE: FILESYSTEM IN USERSPACE P: Miklos Szeredi @@ -2299,15 +1905,12 @@ M: miklos@szeredi.hu L: fuse-devel@lists.sourceforge.net W: http://fuse.sourceforge.net/ S: Maintained -F: fs/fuse/ -F: include/linux/fuse.h FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit) P: Rik Faith M: faith@cs.unc.edu L: linux-scsi@vger.kernel.org S: Odd Fixes (e.g., new signatures) -F: drivers/scsi/fdomain.* GDT SCSI DISK ARRAY CONTROLLER DRIVER P: Achim Leubner @@ -2315,39 +1918,26 @@ M: achim_leubner@adaptec.com L: linux-scsi@vger.kernel.org W: http://www.icp-vortex.com/ S: Supported -F: drivers/scsi/gdt* GENERIC GPIO I2C DRIVER P: Haavard Skinnemoen M: hskinnemoen@atmel.com S: Supported -F: drivers/i2c/busses/i2c-gpio.c -F: include/linux/i2c-gpio.h GENERIC HDLC (WAN) DRIVERS P: Krzysztof Halasa M: khc@pm.waw.pl W: http://www.kernel.org/pub/linux/utils/net/hdlc/ S: Maintained -F: drivers/net/wan/c101.c -F: drivers/net/wan/hd6457* -F: drivers/net/wan/hdlc* -F: drivers/net/wan/n2.c -F: drivers/net/wan/pc300too.c -F: drivers/net/wan/pci200syn.c -F: drivers/net/wan/wanxl* GFS2 FILE SYSTEM P: Steven Whitehouse M: swhiteho@redhat.com L: cluster-devel@redhat.com W: http://sources.redhat.com/cluster/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git +T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git +T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git S: Supported -F: Documentation/filesystems/gfs2*.txt -F: fs/gfs2/ -F: include/linux/gfs2_ondisk.h GIGASET ISDN DRIVERS P: Hansjoerg Lipp @@ -2357,9 +1947,6 @@ M: tilman@imap.cc L: gigaset307x-common@lists.sourceforge.net W: http://gigaset307x.sourceforge.net/ S: Maintained -F: Documentation/isdn/README.gigaset -F: drivers/isdn/gigaset/ -F: include/linux/gigaset_dev.h HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER P: Frank Seidel @@ -2367,7 +1954,6 @@ M: frank@f-seidel.de L: lm-sensors@lm-sensors.org W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/ S: Maintained -F: drivers/hwmon/hdaps.c HYPERVISOR VIRTUAL CONSOLE DRIVER L: linuxppc-dev@ozlabs.org @@ -2379,61 +1965,51 @@ GSPCA FINEPIX SUBDRIVER P: Frank Zago M: frank@zago.net L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: drivers/media/video/gspca/finepix.c GSPCA M5602 SUBDRIVER P: Erik Andren M: erik.andren@gmail.com L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: drivers/media/video/gspca/m5602/ GSPCA PAC207 SONIXB SUBDRIVER P: Hans de Goede M: hdegoede@redhat.com L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: drivers/media/video/gspca/pac207.c GSPCA T613 SUBDRIVER P: Leandro Costantino M: lcostantino@gmail.com L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: drivers/media/video/gspca/t613.c GSPCA USB WEBCAM DRIVER P: Jean-Francois Moine M: moinejf@free.fr W: http://moinejf.free.fr L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: drivers/media/video/gspca/ HARDWARE MONITORING L: lm-sensors@lm-sensors.org W: http://www.lm-sensors.org/ S: Orphan -F: drivers/hwmon/ HARDWARE RANDOM NUMBER GENERATOR CORE S: Orphan -F: Documentation/hw_random.txt -F: drivers/char/hw_random/ -F: include/linux/hw_random.h HARMONY SOUND DRIVER P: Kyle McMartin M: kyle@mcmartin.ca L: linux-parisc@vger.kernel.org S: Maintained -F: sound/parisc/harmony.* HAYES ESP SERIAL DRIVER P: Andrew J. Robinson @@ -2441,33 +2017,30 @@ M: arobinso@nyx.net L: linux-kernel@vger.kernel.org W: http://www.nyx.net/~arobinso S: Maintained -F: Documentation/serial/hayes-esp.txt -F: drivers/char/esp.c + +HEWLETT-PACKARD FIBRE CHANNEL 64-bit/66MHz PCI non-intelligent HBA +P: Chirag Kantharia +M: chirag.kantharia@hp.com +L: iss_storagedev@hp.com +S: Maintained HEWLETT-PACKARD SMART2 RAID DRIVER P: Chirag Kantharia M: chirag.kantharia@hp.com L: iss_storagedev@hp.com S: Maintained -F: Documentation/blockdev/cpqarray.txt -F: drivers/block/cpqarray.* HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss) P: Mike Miller M: mike.miller@hp.com L: iss_storagedev@hp.com S: Supported -F: Documentation/blockdev/cciss.txt -F: drivers/block/cciss* -F: include/linux/cciss_ioctl.h HFS FILESYSTEM P: Roman Zippel M: zippel@linux-m68k.org L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/hfs.txt -F: fs/hfs/ HGA FRAMEBUFFER DRIVER P: Ferenc Bakonyi @@ -2475,7 +2048,6 @@ M: fero@drama.obuda.kando.hu L: linux-nvidia@lists.surfsouth.com W: http://drama.obuda.kando.hu/~fero/cgi-bin/hgafb.shtml S: Maintained -F: drivers/video/hgafb.c HIBERNATION (aka Software Suspend, aka swsusp) P: Pavel Machek @@ -2484,32 +2056,19 @@ P: Rafael J. Wysocki M: rjw@sisk.pl L: linux-pm@lists.linux-foundation.org S: Supported -F: arch/x86/power/ -F: drivers/base/power/ -F: kernel/power/ -F: include/linux/suspend.h -F: include/linux/freezer.h -F: include/linux/pm.h -F: include/asm-*/suspend*.h -F: arch/*/include/asm/suspend*.h HID CORE LAYER P: Jiri Kosina M: jkosina@suse.cz L: linux-input@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git +T: git kernel.org:/pub/scm/linux/kernel/git/jikos/hid.git S: Maintained -F: drivers/hid/ -F: include/linux/hid* HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS P: Thomas Gleixner M: tglx@linutronix.de L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/timers/ -F: kernel/hrtimer.c -F: include/linux/hrtimer.h HIGH-SPEED SCC DRIVER FOR AX.25 P: Klaus Kudielka @@ -2517,25 +2076,18 @@ M: klaus.kudielka@ieee.org L: linux-hams@vger.kernel.org W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/ S: Maintained -F: drivers/net/hamradio/dmascc.c -F: drivers/net/hamradio/scc.c HIGHPOINT ROCKETRAID 3xxx RAID DRIVER P: HighPoint Linux Team M: linux@highpoint-tech.com W: http://www.highpoint-tech.com S: Supported -F: Documentation/scsi/hptiop.txt -F: drivers/scsi/hptiop.c HIPPI P: Jes Sorensen M: jes@trained-monkey.org L: linux-hippi@sunsite.dk S: Maintained -F: include/linux/hippidevice.h -F: include/linux/if_hippi.h -F: net/802/hippi.c HOST AP DRIVER P: Jouni Malinen @@ -2544,79 +2096,65 @@ L: hostap@shmoo.com (subscribers-only) L: linux-wireless@vger.kernel.org W: http://hostap.epitest.fi/ S: Maintained -F: drivers/net/wireless/hostap/ HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER P: Carlos Corbacho M: carlos@strangeworlds.co.uk S: Odd Fixes -F: drivers/platform/x86/tc1100-wmi.c HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series P: Jaroslav Kysela M: perex@perex.cz S: Maintained -F: drivers/net/hp100.* -HPET: High Precision Event Timers driver +HPET: High Precision Event Timers driver (drivers/char/hpet.c) P: Clemens Ladisch M: clemens@ladisch.de S: Maintained -F: Documentation/timers/hpet.txt -F: drivers/char/hpet.c -F: include/linux/hpet.h HPET: i386 P: Venkatesh Pallipadi (Venki) M: venkatesh.pallipadi@intel.com S: Maintained -F: arch/x86/kernel/hpet.c -F: arch/x86/include/asm/hpet.h HPET: x86_64 P: Vojtech Pavlik M: vojtech@suse.cz S: Maintained -HPET: ACPI +HPET: ACPI hpet.c P: Bob Picco M: bob.picco@hp.com S: Maintained -F: drivers/char/hpet.c HPFS FILESYSTEM P: Mikulas Patocka M: mikulas@artax.karlin.mff.cuni.cz W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi S: Maintained -F: fs/hpfs/ -HSO 3G MODEM DRIVER -P: Jan Dumon -M: j.dumon@option.com +HSO 3G Modem Driver (hso.c) +P: Denis Joseph Barrow +M: d.barow@option.com W: http://www.pharscape.org S: Maintained -F: drivers/net/usb/hso.c HTCPEN TOUCHSCREEN DRIVER P: Pau Oliva Fora M: pof@eslack.org L: linux-input@vger.kernel.org S: Maintained -F: drivers/input/touchscreen/htcpen.c HUGETLB FILESYSTEM P: William Irwin M: wli@holomorphy.com S: Maintained -F: fs/hugetlbfs/ I2C/SMBUS STUB DRIVER P: Mark M. Hoffman M: mhoffman@lightlink.com L: linux-i2c@vger.kernel.org S: Maintained -F: drivers/i2c/busses/i2c-stub.c I2C SUBSYSTEM P: Jean Delvare (PC drivers, core) @@ -2627,31 +2165,24 @@ L: linux-i2c@vger.kernel.org W: http://i2c.wiki.kernel.org/ T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/ S: Maintained -F: Documentation/i2c/ -F: drivers/i2c/ -F: include/linux/i2c.h -F: include/linux/i2c-dev.h -F: include/linux/i2c-id.h I2C-TINY-USB DRIVER P: Till Harbaum M: till@harbaum.org L: linux-i2c@vger.kernel.org -W: http://www.harbaum.org/till/i2c_tiny_usb +T: http://www.harbaum.org/till/i2c_tiny_usb S: Maintained -F: drivers/i2c/busses/i2c-tiny-usb.c i386 BOOT CODE P: H. Peter Anvin M: hpa@zytor.com L: Linux-Kernel@vger.kernel.org S: Maintained -F: arch/x86/boot/ i386 SETUP CODE / CPU ERRATA WORKAROUNDS P: H. Peter Anvin M: hpa@zytor.com -T: git git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git +T: git.kernel.org:/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git S: Maintained IA64 (Itanium) PLATFORM @@ -2659,22 +2190,19 @@ P: Tony Luck M: tony.luck@intel.com L: linux-ia64@vger.kernel.org W: http://www.ia64-linux.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git S: Maintained -F: arch/ia64/ IBM MCA SCSI SUBSYSTEM DRIVER P: Michael Lang M: langa2@kph.uni-mainz.de W: http://www.uni-mainz.de/~langm000/linux.html S: Maintained -F: drivers/scsi/ibmmca.c IBM Power Linux RAID adapter P: Brian King M: brking@us.ibm.com S: Supported -F: drivers/scsi/ipr.* IBM ServeRAID RAID DRIVER P: Jack Hammer @@ -2682,7 +2210,6 @@ P: Dave Jeffery M: ipslinux@adaptec.com W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html S: Supported -F: drivers/scsi/ips.* IDE SUBSYSTEM P: Bartlomiej Zolnierkiewicz @@ -2690,55 +2217,45 @@ M: bzolnier@gmail.com L: linux-ide@vger.kernel.org T: quilt kernel.org/pub/linux/kernel/people/bart/pata-2.6/ S: Maintained -F: Documentation/ide/ -F: drivers/ide/ -F: include/linux/ide.h IDE/ATAPI DRIVERS P: Borislav Petkov M: petkovbb@gmail.com L: linux-ide@vger.kernel.org S: Maintained -F: Documentation/cdrom/ide-cd -F: drivers/ide/ide-cd* IDLE-I7300 P: Andy Henroid M: andrew.d.henroid@intel.com L: linux-pm@lists.linux-foundation.org S: Supported -F: drivers/idle/i7300_idle.c -IEEE 1394 SUBSYSTEM +IEEE 1394 SUBSYSTEM (drivers/ieee1394) P: Ben Collins M: ben.collins@ubuntu.com P: Stefan Richter M: stefanr@s5r6.in-berlin.de L: linux1394-devel@lists.sourceforge.net W: http://www.linux1394.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git S: Maintained -F: drivers/ieee1394/ -IEEE 1394 RAW I/O DRIVER +IEEE 1394 RAW I/O DRIVER (raw1394) P: Dan Dennedy M: dan@dennedy.org P: Stefan Richter M: stefanr@s5r6.in-berlin.de L: linux1394-devel@lists.sourceforge.net S: Maintained -F: drivers/ieee1394/raw1394* INTEGRITY MEASUREMENT ARCHITECTURE (IMA) P: Mimi Zohar M: zohar@us.ibm.com S: Supported -F: security/integrity/ima/ IMS TWINTURBO FRAMEBUFFER DRIVER L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Orphan -F: drivers/video/imsttfb.c INFINIBAND SUBSYSTEM P: Roland Dreier @@ -2749,11 +2266,8 @@ P: Hal Rosenstock M: hal.rosenstock@gmail.com L: general@lists.openfabrics.org (moderated for non-subscribers) W: http://www.openib.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git +T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git S: Supported -F: Documentation/infiniband/ -F: drivers/infiniband/ -F: include/linux/if_infiniband.h INOTIFY P: John McCutchan @@ -2762,33 +2276,26 @@ P: Robert Love M: rlove@rlove.org L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/inotify.txt -F: fs/notify/inotify/ -F: include/linux/inotify.h INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS P: Dmitry Torokhov M: dmitry.torokhov@gmail.com M: dtor@mail.ru L: linux-input@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git +T: git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git S: Maintained -F: drivers/input/ INTEL FRAMEBUFFER DRIVER (excluding 810 and 815) P: Sylvain Meyer M: sylvain.meyer@worldonline.fr L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: Documentation/fb/intelfb.txt -F: drivers/video/intelfb/ INTEL 810/815 FRAMEBUFFER DRIVER P: Antonino Daplas M: adaplas@gmail.com L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/i810/ INTEL MENLOW THERMAL DRIVER P: Sujith Thomas @@ -2796,61 +2303,46 @@ M: sujith.thomas@intel.com L: linux-acpi@vger.kernel.org W: http://www.lesswatts.org/projects/acpi/ S: Supported -F: drivers/platform/x86/intel_menlow.c INTEL IA32 MICROCODE UPDATE SUPPORT P: Tigran Aivazian M: tigran@aivazian.fsnet.co.uk S: Maintained -F: arch/x86/kernel/microcode_core.c -F: arch/x86/kernel/microcode_intel.c INTEL I/OAT DMA DRIVER P: Maciej Sosnowski M: maciej.sosnowski@intel.com L: linux-kernel@vger.kernel.org S: Supported -F: drivers/dma/ioat* INTEL IOMMU (VT-d) P: David Woodhouse M: dwmw2@infradead.org L: iommu@lists.linux-foundation.org -T: git git://git.infradead.org/iommu-2.6.git +T: git://git.infradead.org/iommu-2.6.git S: Supported -F: drivers/pci/intel-iommu.c -F: include/linux/intel-iommu.h INTEL IOP-ADMA DMA DRIVER P: Dan Williams M: dan.j.williams@intel.com L: linux-kernel@vger.kernel.org S: Supported -F: drivers/dma/iop-adma.c INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT P: Krzysztof Halasa M: khc@pm.waw.pl S: Maintained -F: arch/arm/mach-ixp4xx/include/mach/qmgr.h -F: arch/arm/mach-ixp4xx/include/mach/npe.h -F: arch/arm/mach-ixp4xx/ixp4xx_qmgr.c -F: arch/arm/mach-ixp4xx/ixp4xx_npe.c -F: drivers/net/arm/ixp4xx_eth.c -F: drivers/net/wan/ixp4xx_hss.c INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT P: Deepak Saxena M: dsaxena@plexity.net S: Maintained -F: drivers/char/hw_random/ixp4xx-rng.c INTEL IXP2000 ETHERNET DRIVER P: Lennert Buytenhek M: kernel@wantstofly.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/ixp2000/ INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/ixgb/ixgbe) P: Jeff Kirsher @@ -2866,12 +2358,6 @@ M: john.ronciak@intel.com L: e1000-devel@lists.sourceforge.net W: http://e1000.sourceforge.net/ S: Supported -F: drivers/net/e100.c -F: drivers/net/e1000/ -F: drivers/net/e1000e/ -F: drivers/net/igb/ -F: drivers/net/ixgb/ -F: drivers/net/ixgbe/ INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT P: Zhu Yi @@ -2885,8 +2371,6 @@ L: ipw2100-devel@lists.sourceforge.net W: http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel W: http://ipw2100.sourceforge.net S: Supported -F: Documentation/networking/README.ipw2100 -F: drivers/net/wireless/ipw2x00/ipw2100.* INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT P: Zhu Yi @@ -2900,8 +2384,6 @@ L: ipw2100-devel@lists.sourceforge.net W: http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel W: http://ipw2200.sourceforge.net S: Supported -F: Documentation/networking/README.ipw2200 -F: drivers/net/wireless/ipw2x00/ipw2200.* INTEL WIRELESS WIMAX CONNECTION 2400 P: Inaky Perez-Gonzalez @@ -2910,9 +2392,6 @@ M: linux-wimax@intel.com L: wimax@linuxwimax.org S: Supported W: http://linuxwimax.org -F: Documentation/wimax/README.i2400m -F: drivers/net/wimax/i2400m/ -F: include/linux/wimax/i2400m.h INTEL WIRELESS WIFI LINK (iwlwifi) P: Zhu Yi @@ -2922,29 +2401,25 @@ M: reinette.chatre@intel.com L: linux-wireless@vger.kernel.org L: ipw3945-devel@lists.sourceforge.net W: http://intellinuxwireless.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git S: Supported -F: drivers/net/wireless/iwlwifi/ IOC3 ETHERNET DRIVER P: Ralf Baechle M: ralf@linux-mips.org L: linux-mips@linux-mips.org S: Maintained -F: drivers/net/ioc3-eth.c IOC3 SERIAL DRIVER P: Pat Gefre M: pfg@sgi.com L: linux-mips@linux-mips.org S: Maintained -F: drivers/serial/ioc3_serial.c IP MASQUERADING P: Juanjo Ciarlante M: jjciarla@raiz.uncu.edu.ar S: Maintained -F: net/ipv4/netfilter/ipt_MASQUERADE.c IP1000A 10/100/1000 GIGABIT ETHERNET DRIVER P: Francois Romieu @@ -2955,7 +2430,6 @@ P: Jesse Huang M: jesse@icplus.com.tw L: netdev@vger.kernel.org S: Maintained -F: drivers/net/ipg.c IPATH DRIVER P: Ralph Campbell @@ -2963,7 +2437,6 @@ M: infinipath@qlogic.com L: general@lists.openfabrics.org T: git git://git.qlogic.com/ipath-linux-2.6 S: Supported -F: drivers/infiniband/hw/ipath/ IPMI SUBSYSTEM P: Corey Minyard @@ -2971,9 +2444,6 @@ M: minyard@acm.org L: openipmi-developer@lists.sourceforge.net W: http://openipmi.sourceforge.net/ S: Supported -F: Documentation/IPMI.txt -F: drivers/char/ipmi/ -F: include/linux/ipmi* IPS SCSI RAID DRIVER P: Adaptec OEM Raid Solutions @@ -2981,7 +2451,6 @@ M: aacraid@adaptec.com L: linux-scsi@vger.kernel.org W: http://www.adaptec.com/ S: Maintained -F: drivers/scsi/ips* IPVS P: Wensong Zhang @@ -2993,8 +2462,6 @@ M: ja@ssi.bg L: netdev@vger.kernel.org L: lvs-devel@vger.kernel.org S: Maintained -F: Documentation/networking/ipvs-sysctl.txt -F: net/netfilter/ipvs/ IPWIRELESS DRIVER P: Jiri Kosina @@ -3002,17 +2469,13 @@ M: jkosina@suse.cz P: David Sterba M: dsterba@suse.cz S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git -F: drivers/char/pcmcia/ipwireless/ +T: git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git IPX NETWORK LAYER P: Arnaldo Carvalho de Melo M: acme@ghostprotocols.net L: netdev@vger.kernel.org S: Maintained -F: include/linux/ipx.h -F: include/net/ipx.h -F: net/ipx/ IRDA SUBSYSTEM P: Samuel Ortiz @@ -3020,40 +2483,27 @@ M: samuel@sortiz.org L: irda-users@lists.sourceforge.net (subscribers-only) W: http://irda.sourceforge.net/ S: Maintained -F: Documentation/networking/irda.txt -F: drivers/net/irda/ -F: include/net/irda/ -F: net/irda/ ISAPNP P: Jaroslav Kysela M: perex@perex.cz S: Maintained -F: Documentation/isapnp.txt -F: drivers/pnp/isapnp/ -F: include/linux/isapnp.h ISCSI P: Mike Christie M: michaelc@cs.wisc.edu L: open-iscsi@googlegroups.com W: www.open-iscsi.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mnc/linux-2.6-iscsi.git +T: git kernel.org:/pub/scm/linux/kernel/mnc/linux-2.6-iscsi.git S: Maintained -F: drivers/scsi/*iscsi* -F: include/scsi/*iscsi* ISDN SUBSYSTEM P: Karsten Keil M: isdn@linux-pingi.de L: isdn4linux@listserv.isdn4linux.de (subscribers-only) W: http://www.isdn4linux.de -T: git git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git S: Maintained -F: Documentation/isdn/ -F: drivers/isdn/ -F: include/linux/isdn.h -F: include/linux/isdn/ ISDN SUBSYSTEM (Eicon active card driver) P: Armin Schindler @@ -3061,7 +2511,6 @@ M: mac@melware.de L: isdn4linux@listserv.isdn4linux.de (subscribers-only) W: http://www.melware.de S: Maintained -F: drivers/isdn/hardware/eicon/ IVTV VIDEO4LINUX DRIVER P: Hans Verkuil @@ -3069,29 +2518,23 @@ M: hverkuil@xs4all.nl L: ivtv-devel@ivtvdriver.org L: ivtv-users@ivtvdriver.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://www.ivtvdriver.org S: Maintained -F: Documentation/video4linux/*.ivtv -F: drivers/media/video/ivtv/ -F: include/linux/ivtv* JFS FILESYSTEM P: Dave Kleikamp M: shaggy@austin.ibm.com L: jfs-discussion@lists.sourceforge.net W: http://jfs.sourceforge.net/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git S: Supported -F: Documentation/filesystems/jfs.txt -F: fs/jfs/ JME NETWORK DRIVER P: Guo-Fu Tseng M: cooldavid@cooldavid.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/jme.* JOURNALLING FLASH FILE SYSTEM V2 (JFFS2) P: David Woodhouse @@ -3099,36 +2542,24 @@ M: dwmw2@infradead.org L: linux-mtd@lists.infradead.org W: http://www.linux-mtd.infradead.org/doc/jffs2.html S: Maintained -F: fs/jffs2/ -F: include/linux/jffs2.h -F: include/mtd/jffs2-user.h JOURNALLING LAYER FOR BLOCK DEVICES (JBD) -P: Stephen Tweedie -M: sct@redhat.com -P: Andrew Morton -M: akpm@linux-foundation.org +P: Stephen Tweedie, Andrew Morton +M: sct@redhat.com, akpm@linux-foundation.org L: linux-ext4@vger.kernel.org S: Maintained -F: fs/jbd*/ -F: include/linux/ext*jbd*.h -F: include/linux/jbd*.h K8TEMP HARDWARE MONITORING DRIVER P: Rudolf Marek M: r.marek@assembler.cz L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/k8temp -F: drivers/hwmon/k8temp.c KCONFIG P: Roman Zippel M: zippel@linux-m68k.org L: linux-kbuild@vger.kernel.org S: Maintained -F: Documentation/kbuild/kconfig-language.txt -F: scripts/kconfig/ KDUMP P: Vivek Goyal @@ -3139,32 +2570,26 @@ L: kexec@lists.infradead.org L: linux-kernel@vger.kernel.org W: http://lse.sourceforge.net/kdump/ S: Maintained -F: Documentation/kdump/ KERNEL AUTOMOUNTER (AUTOFS) P: H. Peter Anvin M: hpa@zytor.com L: autofs@linux.kernel.org S: Odd Fixes -F: fs/autofs/ KERNEL AUTOMOUNTER v4 (AUTOFS4) P: Ian Kent M: raven@themaw.net L: autofs@linux.kernel.org S: Maintained -F: fs/autofs4/ -KERNEL BUILD +KERNEL BUILD (kbuild: Makefile, scripts/Makefile.*) P: Sam Ravnborg M: sam@ravnborg.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-next.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-fixes.git +T: git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild-next.git +T: git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild-fixes.git L: linux-kbuild@vger.kernel.org S: Maintained -F: Documentation/kbuild/ -F: Makefile -F: scripts/Makefile.* KERNEL JANITORS P: Several @@ -3180,13 +2605,6 @@ M: neilb@suse.de L: linux-nfs@vger.kernel.org W: http://nfs.sourceforge.net/ S: Supported -F: fs/nfsd/ -F: include/linux/nfsd/ -F: fs/lockd/ -F: fs/nfs_common/ -F: net/sunrpc/ -F: include/linux/lockd/ -F: include/linux/sunrpc/ KERNEL VIRTUAL MACHINE (KVM) P: Avi Kivity @@ -3194,11 +2612,6 @@ M: avi@redhat.com L: kvm@vger.kernel.org W: http://kvm.qumranet.com S: Supported -F: Documentation/*/kvm.txt -F: arch/*/kvm/ -F: arch/*/include/asm/kvm* -F: include/linux/kvm* -F: virt/kvm/ KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V P: Joerg Roedel @@ -3206,9 +2619,6 @@ M: joerg.roedel@amd.com L: kvm@vger.kernel.org W: http://kvm.qumranet.com S: Supported -F: arch/x86/include/asm/svm.h -F: arch/x86/kvm/kvm_svm.h -F: arch/x86/kvm/svm.c KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC P: Hollis Blanchard @@ -3216,8 +2626,6 @@ M: hollisb@us.ibm.com L: kvm-ppc@vger.kernel.org W: http://kvm.qumranet.com S: Supported -F: arch/powerpc/include/asm/kvm* -F: arch/powerpc/kvm/ KERNEL VIRTUAL MACHINE For Itanium (KVM/IA64) P: Xiantao Zhang @@ -3225,9 +2633,6 @@ M: xiantao.zhang@intel.com L: kvm-ia64@vger.kernel.org W: http://kvm.qumranet.com S: Supported -F: Documentation/ia64/kvm.txt -F: arch/ia64/include/asm/kvm* -F: arch/ia64/kvm/ KERNEL VIRTUAL MACHINE for s390 (KVM/s390) P: Carsten Otte @@ -3238,9 +2643,6 @@ M: linux390@de.ibm.com L: linux-s390@vger.kernel.org W: http://www.ibm.com/developerworks/linux/linux390/ S: Supported -F: Documentation/s390/kvm.txt -F: arch/s390/include/asm/kvm* -F: arch/s390/kvm/ KEXEC P: Eric Biederman @@ -3249,28 +2651,18 @@ W: http://ftp.kernel.org/pub/linux/kernel/people/horms/kexec-tools/ L: linux-kernel@vger.kernel.org L: kexec@lists.infradead.org S: Maintained -F: include/linux/kexec.h -F: kernel/kexec.c KGDB P: Jason Wessel M: jason.wessel@windriver.com L: kgdb-bugreport@lists.sourceforge.net S: Maintained -F: Documentation/DocBook/kgdb.tmpl -F: drivers/misc/kgdbts.c -F: drivers/serial/kgdboc.c -F: include/linux/kgdb.h -F: kernel/kgdb.c KMEMTRACE P: Eduard - Gabriel Munteanu M: eduard.munteanu@linux360.ro L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/vm/kmemtrace.txt -F: include/trace/kmemtrace.h -F: kernel/trace/kmemtrace.c KPROBES P: Ananth N Mavinakayanahalli @@ -3283,9 +2675,6 @@ P: Masami Hiramatsu M: mhiramat@redhat.com L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/kprobes.txt -F: include/linux/kprobes.h -F: kernel/kprobes.c KS0108 LCD CONTROLLER DRIVER P: Miguel Ojeda Sandonis @@ -3294,31 +2683,21 @@ L: linux-kernel@vger.kernel.org W: http://miguelojeda.es/auxdisplay.htm W: http://jair.lab.fi.uva.es/~migojed/auxdisplay.htm S: Maintained -F: Documentation/auxdisplay/ks0108 -F: drivers/auxdisplay/ks0108.c -F: include/linux/ks0108.h LAPB module L: linux-x25@vger.kernel.org S: Orphan -F: Documentation/networking/lapb-module.txt -F: include/*/lapb.h -F: net/lapb/ LASI 53c700 driver for PARISC P: James E.J. Bottomley M: James.Bottomley@HansenPartnership.com L: linux-scsi@vger.kernel.org S: Maintained -F: Documentation/scsi/53c700.txt -F: drivers/scsi/53c700* LED SUBSYSTEM P: Richard Purdie M: rpurdie@rpsys.net S: Maintained -F: drivers/leds/ -F: include/linux/leds.h LEGO USB Tower driver P: Juergen Stuber @@ -3326,7 +2705,6 @@ M: starblue@users.sourceforge.net L: legousb-devel@lists.sourceforge.net W: http://legousb.sourceforge.net/ S: Maintained -F: drivers/usb/misc/legousbtower.c LGUEST P: Rusty Russell @@ -3334,11 +2712,6 @@ M: rusty@rustcorp.com.au L: lguest@ozlabs.org W: http://lguest.ozlabs.org/ S: Maintained -F: Documentation/lguest/ -F: arch/x86/lguest/ -F: drivers/lguest/ -F: include/linux/lguest*.h -F: arch/x86/include/asm/lguest*.h LINUX FOR IBM pSERIES (RS/6000) P: Paul Mackerras @@ -3346,6 +2719,12 @@ M: paulus@au.ibm.com W: http://www.ibm.com/linux/ltc/projects/ppc S: Supported +LINUX FOR NCR VOYAGER +P: James Bottomley +M: James.Bottomley@HansenPartnership.com +W: http://www.hansenpartnership.com/voyager +S: Maintained + LINUX FOR POWERPC (32-BIT AND 64-BIT) P: Benjamin Herrenschmidt M: benh@kernel.crashing.org @@ -3353,7 +2732,7 @@ P: Paul Mackerras M: paulus@samba.org W: http://www.penguinppc.org/ L: linuxppc-dev@ozlabs.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git +T: git kernel.org:/pub/scm/linux/kernel/git/benh/powerpc.git S: Supported LINUX FOR POWER MACINTOSH @@ -3378,7 +2757,7 @@ P: Matt Porter M: mporter@kernel.crashing.org W: http://www.penguinppc.org/ L: linuxppc-dev@ozlabs.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc.git +T: git kernel.org:/pub/scm/linux/kernel/git/jwboyer/powerpc.git S: Maintained LINUX FOR POWERPC EMBEDDED XILINX VIRTEX @@ -3415,39 +2794,30 @@ LINUX SECURITY MODULE (LSM) FRAMEWORK P: Chris Wright M: chrisw@sous-sol.org L: linux-security-module@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git S: Supported LLC (802.2) P: Arnaldo Carvalho de Melo M: acme@ghostprotocols.net S: Maintained -F: include/linux/llc.h -F: include/net/llc* -F: net/llc/ LIS3LV02D ACCELEROMETER DRIVER P: Eric Piel M: eric.piel@tremplin-utc.net S: Maintained -F: Documentation/hwmon/lis3lv02d -F: drivers/hwmon/lis3lv02d.* LM83 HARDWARE MONITOR DRIVER P: Jean Delvare M: khali@linux-fr.org L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/lm83 -F: drivers/hwmon/lm83.c LM90 HARDWARE MONITOR DRIVER P: Jean Delvare M: khali@linux-fr.org L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/lm90 -F: drivers/hwmon/lm90.c LOCKDEP AND LOCKSTAT P: Peter Zijlstra @@ -3455,12 +2825,8 @@ M: peterz@infradead.org P: Ingo Molnar M: mingo@redhat.com L: linux-kernel@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-lockdep.git +T: git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-lockdep.git S: Maintained -F: Documentation/lockdep*.txt -F: Documentation/lockstat.txt -F: include/linux/lockdep.h -F: kernel/lockdep* LOGICAL DISK MANAGER SUPPORT (LDM, Windows 2000/XP/Vista Dynamic Disks) P: Richard Russon (FlatCap) @@ -3468,8 +2834,6 @@ M: ldm@flatcap.org L: linux-ntfs-dev@lists.sourceforge.net W: http://www.linux-ntfs.org/content/view/19/37/ S: Maintained -F: Documentation/ldm.txt -F: fs/partitions/ldm.* LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) P: Eric Moore @@ -3479,14 +2843,12 @@ L: DL-MPTFusionLinux@lsi.com L: linux-scsi@vger.kernel.org W: http://www.lsilogic.com/support S: Supported -F: drivers/message/fusion/ LSILOGIC/SYMBIOS/NCR 53C8XX and 53C1010 PCI-SCSI drivers P: Matthew Wilcox M: matthew@wil.cx L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/sym53c8xx_2/ LTP (Linux Test Project) P: Subrata Modak @@ -3495,7 +2857,7 @@ P: Mike Frysinger M: vapier@gentoo.org L: ltp-list@lists.sourceforge.net (subscribers-only) W: http://ltp.sourceforge.net/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git +T: git kernel.org/pub/scm/linux/kernel/git/galak/ltp.git S: Maintained M32R ARCHITECTURE @@ -3505,8 +2867,6 @@ L: linux-m32r@ml.linux-m32r.org L: linux-m32r-ja@ml.linux-m32r.org (in Japanese) W: http://www.linux-m32r.org/ S: Maintained -F: arch/m32r/ -F: include/asm-m32r/ M68K ARCHITECTURE P: Geert Uytterhoeven @@ -3515,10 +2875,8 @@ P: Roman Zippel M: zippel@linux-m68k.org L: linux-m68k@lists.linux-m68k.org W: http://www.linux-m68k.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git +T: git git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git S: Maintained -F: arch/m68k/ -F: drivers/zorro/ M68K ON APPLE MACINTOSH P: Joshua Thompson @@ -3526,25 +2884,20 @@ M: funaho@jurai.org W: http://www.mac.linux-m68k.org/ L: linux-m68k@lists.linux-m68k.org S: Maintained -F: arch/m68k/mac/ M68K ON HP9000/300 P: Philip Blundell M: philb@gnu.org W: http://www.tazenda.demon.co.uk/phil/linux-hp S: Maintained -F: arch/m68k/hp300/ MAC80211 P: Johannes Berg M: johannes@sipsolutions.net L: linux-wireless@vger.kernel.org W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git S: Maintained -F: Documentation/networking/mac80211-injection.txt -F: include/net/mac80211.h -F: net/mac80211/ MAC80211 PID RATE CONTROL P: Stefano Brivio @@ -3553,17 +2906,14 @@ P: Mattias Nissler M: mattias.nissler@gmx.de L: linux-wireless@vger.kernel.org W: http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/PID -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git S: Maintained -F: net/mac80211/rc80211_pid* MACVLAN DRIVER P: Patrick McHardy M: kaber@trash.net L: netdev@vger.kernel.org S: Maintained -F: drivers/net/macvlan.c -F: include/linux/if_macvlan.h MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7 P: Michael Kerrisk @@ -3577,15 +2927,12 @@ P: Dan Williams M: dcbw@redhat.com L: libertas-dev@lists.infradead.org S: Maintained -F: drivers/net/wireless/libertas/ MARVELL MV643XX ETHERNET DRIVER P: Lennert Buytenhek M: buytenh@marvell.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/mv643xx_eth.* -F: include/linux/mv643xx.h MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER P: Nicolas Pitre @@ -3606,31 +2953,12 @@ P: Petr Vandrovec M: vandrove@vc.cvut.cz L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/matrox/matroxfb_* -F: include/linux/matroxfb.h MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER P: Hans J. Koch M: hjk@linutronix.de L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/max6650 -F: drivers/hwmon/max6650.c - -MEDIA INPUT INFRASTRUCTURE (V4L/DVB) -P: Mauro Carvalho Chehab -M: mchehab@infradead.org -P: LinuxTV.org Project -L: linux-media@vger.kernel.org -W: http://linuxtv.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git -S: Maintained -F: Documentation/dvb/ -F: Documentation/video4linux/ -F: drivers/media/ -F: include/media/ -F: include/linux/dvb/ -F: include/linux/videodev*.h MEGARAID SCSI DRIVERS P: Neela Syam Kolli @@ -3638,17 +2966,12 @@ M: megaraidlinux@lsi.com L: linux-scsi@vger.kernel.org W: http://megaraid.lsilogic.com S: Maintained -F: Documentation/scsi/megaraid.txt -F: drivers/scsi/megaraid.* -F: drivers/scsi/megaraid/ MEMORY MANAGEMENT L: linux-mm@kvack.org L: linux-kernel@vger.kernel.org W: http://www.linux-mm.org S: Maintained -F: include/linux/mm.h -F: mm/ MEMORY RESOURCE CONTROLLER P: Balbir Singh @@ -3660,7 +2983,6 @@ M: kamezawa.hiroyu@jp.fujitsu.com L: linux-mm@kvack.org L: linux-kernel@vger.kernel.org S: Maintained -F: mm/memcontrol.c MEMORY TECHNOLOGY DEVICES (MTD) P: David Woodhouse @@ -3669,84 +2991,55 @@ W: http://www.linux-mtd.infradead.org/ L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/mtd-2.6.git S: Maintained -F: drivers/mtd/ -F: include/linux/mtd/ -F: include/mtd/ - -MICROBLAZE ARCHITECTURE -P: Michal Simek -M: monstr@monstr.eu -L: microblaze-uclinux@itee.uq.edu.au -W: http://www.monstr.eu/fdt/ -T: git git://git.monstr.eu/linux-2.6-microblaze.git -S: Supported -F: arch/microblaze/ MICROTEK X6 SCANNER P: Oliver Neukum M: oliver@neukum.name S: Maintained -F: drivers/usb/image/microtek.* MIPS P: Ralf Baechle M: ralf@linux-mips.org W: http://www.linux-mips.org/ L: linux-mips@linux-mips.org -T: git git://git.linux-mips.org/pub/scm/linux.git +T: git www.linux-mips.org:/pub/scm/linux.git S: Supported -F: Documentation/mips/ -F: arch/mips/ MISCELLANEOUS MCA-SUPPORT P: James Bottomley M: James.Bottomley@HansenPartnership.com L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/ia64/mca.txt -F: Documentation/mca.txt -F: drivers/mca/ -F: include/linux/mca* MODULE SUPPORT P: Rusty Russell M: rusty@rustcorp.com.au L: linux-kernel@vger.kernel.org S: Maintained -F: include/linux/module.h -F: kernel/module.c MOTION EYE VAIO PICTUREBOOK CAMERA DRIVER P: Stelian Pop M: stelian@popies.net W: http://popies.net/meye/ S: Maintained -F: Documentation/video4linux/meye.txt -F: drivers/media/video/meye.* -F: include/linux/meye.h MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER P: Pavel Pisa M: ppisa@pikron.com L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) S: Maintained -F: drivers/mmc/host/imxmmc.* MOUSE AND MISC DEVICES [GENERAL] P: Alessandro Rubini M: rubini@ipvvis.unipv.it L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/input/mouse/ -F: include/linux/gpio_mouse.h MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD P: Jiri Slaby M: jirislaby@gmail.com L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/serial/moxa-smartio -F: drivers/char/mxser.* MSI LAPTOP SUPPORT P: Lennart Poettering @@ -3754,54 +3047,43 @@ M: mzxreary@0pointer.de W: https://tango.0pointer.de/mailman/listinfo/s270-linux W: http://0pointer.de/lennart/tchibo.html S: Maintained -F: drivers/platform/x86/msi-laptop.c MULTIFUNCTION DEVICES (MFD) P: Samuel Ortiz M: sameo@linux.intel.com L: linux-kernel@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/sameo/mfd-2.6.git S: Supported -F: drivers/mfd/ MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM P: Pierre Ossman M: pierre@ossman.eu L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/mmc/ -F: include/linux/mmc/ MULTIMEDIA CARD (MMC) ETC. OVER SPI P: David Brownell M: dbrownell@users.sourceforge.net L: linux-kernel@vger.kernel.org S: Odd Fixes -F: drivers/mmc/host/mmc_spi.c -F: include/linux/spi/mmc_spi.h MULTISOUND SOUND DRIVER P: Andrew Veliath M: andrewtv@usa.net S: Maintained -F: Documentation/sound/oss/MultiSound -F: sound/oss/msnd* MULTITECH MULTIPORT CARD (ISICOM) P: Jiri Slaby M: jirislaby@gmail.com L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/char/isicom.c -F: include/linux/isicom.h MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER P: Felipe Balbi M: felipe.balbi@nokia.com L: linux-usb@vger.kernel.org -T: git git://gitorious.org/musb/mainline.git +T: git gitorious.org:/musb/mainline.git S: Maintained -F: drivers/usb/musb/ MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE) P: Andrew Gallatin @@ -3811,27 +3093,23 @@ M: brice@myri.com L: netdev@vger.kernel.org W: http://www.myri.com/scs/download-Myri10GE.html S: Supported -F: drivers/net/myri10ge/ NATSEMI ETHERNET DRIVER (DP8381x) P: Tim Hockin M: thockin@hockin.org S: Maintained -F: drivers/net/natsemi.c NCP FILESYSTEM P: Petr Vandrovec M: vandrove@vc.cvut.cz L: linware@sh.cvut.cz S: Maintained -F: fs/ncpfs/ NCR DUAL 700 SCSI DRIVER (MICROCHANNEL) P: James E.J. Bottomley M: James.Bottomley@HansenPartnership.com L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/NCR_D700.* NETEFFECT IWARP RNIC DRIVER (IW_NES) P: Faisal Latif @@ -3848,7 +3126,6 @@ P: Stephen Hemminger M: shemminger@linux-foundation.org L: netem@lists.linux-foundation.org S: Maintained -F: net/sched/sch_netem.c NETERION (S2IO) 10GbE DRIVER (xframe/vxge) P: Ramkrishna Vepa @@ -3865,8 +3142,6 @@ L: netdev@vger.kernel.org W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous W: http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous S: Supported -F: Documentation/networking/s2io.txt -F: drivers/net/s2io* NETFILTER/IPTABLES/IPCHAINS P: Rusty Russell @@ -3882,12 +3157,6 @@ L: coreteam@netfilter.org W: http://www.netfilter.org/ W: http://www.iptables.org/ S: Supported -F: include/linux/netfilter* -F: include/linux/netfilter/ -F: include/net/netfilter/ -F: net/*/netfilter.c -F: net/*/netfilter/ -F: net/netfilter/ NETLABEL P: Paul Moore @@ -3895,9 +3164,6 @@ M: paul.moore@hp.com W: http://netlabel.sf.net L: netdev@vger.kernel.org S: Supported -F: Documentation/netlabel/ -F: include/net/netlabel.h -F: net/netlabel/ NETROM NETWORK LAYER P: Ralf Baechle @@ -3905,25 +3171,18 @@ M: ralf@linux-mips.org L: linux-hams@vger.kernel.org W: http://www.linux-ax25.org/ S: Maintained -F: include/linux/netrom.h -F: include/net/netrom.h -F: net/netrom/ NETWORK BLOCK DEVICE (NBD) P: Paul Clements M: Paul.Clements@steeleye.com S: Maintained -F: Documentation/blockdev/nbd.txt -F: drivers/block/nbd.c -F: include/linux/nbd.h NETWORK DEVICE DRIVERS P: Jeff Garzik M: jgarzik@pobox.com L: netdev@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git S: Maintained -F: drivers/net/ NETWORKING [GENERAL] P: Networking Team @@ -3931,8 +3190,6 @@ M: netdev@vger.kernel.org L: netdev@vger.kernel.org W: http://linux-net.osdl.org/ S: Maintained -F: net/ -F: include/net/ NETWORKING [IPv4/IPv6] P: David S. Miller @@ -3948,11 +3205,8 @@ M: yoshfuji@linux-ipv6.org P: Patrick McHardy M: kaber@trash.net L: netdev@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6.git S: Maintained -F: net/ipv4/ -F: net/ipv6/ -F: include/net/ip* NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK) P: Paul Moore @@ -3964,11 +3218,8 @@ NETWORKING [WIRELESS] P: John W. Linville M: linville@tuxdriver.com L: linux-wireless@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git S: Maintained -F: net/wireless/ -F: include/net/ieee80211* -F: include/net/wireless.h NETXEN (1/10) GbE SUPPORT P: Dhananjay Phadke @@ -3976,7 +3227,6 @@ M: dhananjay@netxen.com L: netdev@vger.kernel.org W: http://www.netxen.com S: Supported -F: drivers/net/netxen/ NFS, SUNRPC, AND LOCKD CLIENTS P: Trond Myklebust @@ -3985,13 +3235,6 @@ L: linux-nfs@vger.kernel.org W: http://client.linux-nfs.org T: git git://git.linux-nfs.org/pub/linux/nfs-2.6.git S: Maintained -F: fs/lockd/ -F: fs/nfs/ -F: fs/nfs_common/ -F: net/sunrpc/ -F: include/linux/lockd/ -F: include/linux/nfs* -F: include/linux/sunrpc/ NI5010 NETWORK DRIVER P: Jan-Pascal van Best @@ -4000,7 +3243,6 @@ P: Andreas Mohr M: andi@lisas.de L: netdev@vger.kernel.org S: Maintained -F: drivers/net/ni5010.* NILFS2 FILESYSTEM P: KONISHI Ryusuke @@ -4008,17 +3250,12 @@ M: konishi.ryusuke@lab.ntt.co.jp L: users@nilfs.org W: http://www.nilfs.org/en/ S: Supported -F: Documentation/filesystems/nilfs2.txt -F: fs/nilfs2/ -F: include/linux/nilfs2_fs.h NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER P: YOKOTA Hiroshi M: yokota@netlab.is.tsukuba.ac.jp W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ S: Maintained -F: Documentation/scsi/NinjaSCSI.txt -F: drivers/scsi/pcmcia/nsp_* NINJA SCSI-32Bi/UDE PCI/CARDBUS SCSI HOST ADAPTER DRIVER P: GOTO Masanori @@ -4027,8 +3264,6 @@ P: YOKOTA Hiroshi M: yokota@netlab.is.tsukuba.ac.jp W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ S: Maintained -F: Documentation/scsi/NinjaSCSI.txt -F: drivers/scsi/nsp32* NTFS FILESYSTEM P: Anton Altaparmakov @@ -4036,55 +3271,43 @@ M: aia21@cantab.net L: linux-ntfs-dev@lists.sourceforge.net L: linux-kernel@vger.kernel.org W: http://www.linux-ntfs.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git S: Maintained -F: Documentation/filesystems/ntfs.txt -F: fs/ntfs/ NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER P: Antonino Daplas M: adaplas@gmail.com L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/riva/ -F: drivers/video/nvidia/ OMFS FILESYSTEM P: Bob Copeland M: me@bobcopeland.com L: linux-karma-devel@lists.sourceforge.net S: Maintained -F: Documentation/filesystems/omfs.txt -F: fs/omfs/ OMNIKEY CARDMAN 4000 DRIVER P: Harald Welte M: laforge@gnumonks.org S: Maintained -F: drivers/char/pcmcia/cm4000_cs.c -F: include/linux/cm4000_cs.h OMNIKEY CARDMAN 4040 DRIVER P: Harald Welte M: laforge@gnumonks.org S: Maintained -F: drivers/char/pcmcia/cm4040_cs.* OMNIVISION OV7670 SENSOR DRIVER P: Jonathan Corbet M: corbet@lwn.net L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: drivers/media/video/ov7670.c ONENAND FLASH DRIVER P: Kyungmin Park M: kyungmin.park@samsung.com L: linux-mtd@lists.infradead.org S: Maintained -F: drivers/mtd/onenand/ -F: include/linux/mtd/onenand*.h ONSTREAM SCSI TAPE DRIVER P: Willem Riede @@ -4092,25 +3315,18 @@ M: osst@riede.org L: osst-users@lists.sourceforge.net L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/osst* -F: drivers/scsi/st* OPENCORES I2C BUS DRIVER P: Peter Korsgaard M: jacmet@sunsite.dk L: linux-i2c@vger.kernel.org S: Maintained -F: Documentation/i2c/busses/i2c-ocores -F: drivers/i2c/busses/i2c-ocores.c OPROFILE P: Robert Richter M: robert.richter@amd.com L: oprofile-list@lists.sf.net S: Maintained -F: arch/*/oprofile/ -F: drivers/oprofile/ -F: include/linux/oprofile.h ORACLE CLUSTER FILESYSTEM 2 (OCFS2) P: Mark Fasheh @@ -4121,9 +3337,6 @@ L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers) W: http://oss.oracle.com/projects/ocfs2/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2.git S: Supported -F: Documentation/filesystems/ocfs2.txt -F: Documentation/filesystems/dlmfs.txt -F: fs/ocfs2/ ORINOCO DRIVER P: Pavel Roskin @@ -4135,7 +3348,6 @@ L: orinoco-users@lists.sourceforge.net L: orinoco-devel@lists.sourceforge.net W: http://www.nongnu.org/orinoco/ S: Maintained -F: drivers/net/wireless/orinoco/ OSD LIBRARY P: Boaz Harrosh @@ -4144,7 +3356,7 @@ P: Benny Halevy M: bhalevy@panasas.com L: osd-dev@open-osd.org W: http://open-osd.org -T: git git://git.open-osd.org/open-osd.git +T: git://git.open-osd.org/open-osd.git S: Maintained P54 WIRELESS DRIVER @@ -4152,29 +3364,25 @@ P: Michael Wu M: flamingice@sourmilk.net L: linux-wireless@vger.kernel.org W: http://prism54.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git +T: git kernel.org:/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git S: Maintained -F: drivers/net/wireless/p54/ PA SEMI ETHERNET DRIVER P: Olof Johansson M: olof@lixom.net L: netdev@vger.kernel.org S: Maintained -F: drivers/net/pasemi_mac.* PA SEMI SMBUS DRIVER P: Olof Johansson M: olof@lixom.net L: linux-i2c@vger.kernel.org S: Maintained -F: drivers/i2c/busses/i2c-pasemi.c PANASONIC LAPTOP ACPI EXTRAS DRIVER P: Harald Welte M: laforge@gnumonks.org S: Maintained -F: drivers/platform/x86/panasonic-laptop.c PANASONIC MN10300/AM33 PORT P: David Howells @@ -4184,16 +3392,10 @@ M: yasutake.koichi@jp.panasonic.com L: linux-am33-list@redhat.com (moderated for non-subscribers) W: ftp://ftp.redhat.com/pub/redhat/gnupro/AM33/ S: Maintained -F: Documentation/mn10300/ -F: arch/mn10300/ PARALLEL PORT SUPPORT L: linux-parport@lists.infradead.org (subscribers-only) S: Orphan -F: drivers/parport/ -F: include/linux/parport*.h -F: drivers/char/ppdev.c -F: include/linux/ppdev.h PARAVIRT_OPS INTERFACE P: Jeremy Fitzhardinge @@ -4207,9 +3409,6 @@ M: rusty@rustcorp.com.au L: virtualization@lists.osdl.org L: linux-kernel@vger.kernel.org S: Supported -F: Documentation/ia64/paravirt_ops.txt -F: arch/*/kernel/paravirt* -F: arch/*/include/asm/paravirt.h PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES P: Tim Waugh @@ -4217,8 +3416,6 @@ M: tim@cyberelk.net L: linux-parport@lists.infradead.org (subscribers-only) W: http://www.torque.net/linux-pp.html S: Maintained -F: Documentation/blockdev/paride.txt -F: drivers/block/paride/ PARISC ARCHITECTURE P: Kyle McMartin @@ -4227,31 +3424,24 @@ P: Helge Deller M: deller@gmx.de L: linux-parisc@vger.kernel.org W: http://www.parisc-linux.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git S: Maintained -F: arch/parisc/ -F: drivers/parisc/ PC87360 HARDWARE MONITORING DRIVER P: Jim Cromie M: jim.cromie@gmail.com L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/pc87360 -F: drivers/hwmon/pc87360.c PC8736x GPIO DRIVER P: Jim Cromie M: jim.cromie@gmail.com S: Maintained -F: drivers/char/pc8736x_gpio.c PCA9532 LED DRIVER P: Riku Voipio M: riku.voipio@iki.fi S: Maintained -F: drivers/leds/leds-pca9532.c -F: include/linux/leds-pca9532.h PCI ERROR RECOVERY P: Linas Vepstas @@ -4259,82 +3449,63 @@ M: linas@austin.ibm.com L: linux-kernel@vger.kernel.org L: linux-pci@vger.kernel.org S: Supported -F: Documentation/PCI/pci-error-recovery.txt -F: Documentation/powerpc/eeh-pci-error-recovery.txt PCI SUBSYSTEM P: Jesse Barnes M: jbarnes@virtuousgeek.org L: linux-kernel@vger.kernel.org L: linux-pci@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/jbarnes/pci-2.6.git S: Supported -F: Documentation/PCI/ -F: drivers/pci/ -F: include/linux/pci* PCIE HOTPLUG DRIVER P: Kristen Carlson Accardi M: kristen.c.accardi@intel.com L: linux-pci@vger.kernel.org S: Supported -F: drivers/pci/pcie/ PCMCIA SUBSYSTEM P: Linux PCMCIA Team L: linux-pcmcia@lists.infradead.org W: http://lists.infradead.org/mailman/listinfo/linux-pcmcia -T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git S: Maintained -F: Documentation/pcmcia/ -F: drivers/pcmcia/ -F: include/pcmcia/ PCNET32 NETWORK DRIVER P: Don Fry M: pcnet32@verizon.net L: netdev@vger.kernel.org S: Maintained -F: drivers/net/pcnet32.c PER-TASK DELAY ACCOUNTING P: Balbir Singh M: balbir@linux.vnet.ibm.com L: linux-kernel@vger.kernel.org S: Maintained -F: include/linux/delayacct.h -F: kernel/delayacct.c PERSONALITY HANDLING P: Christoph Hellwig M: hch@infradead.org L: linux-abi-devel@lists.sourceforge.net S: Maintained -F: include/linux/personality.h PHRAM MTD DRIVER P: Joern Engel M: joern@lazybastard.org L: linux-mtd@lists.infradead.org S: Maintained -F: drivers/mtd/devices/phram.c PKTCDVD DRIVER P: Peter Osterlund M: petero2@telia.com L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/block/pktcdvd.c -F: include/linux/pktcdvd.h POSIX CLOCKS and TIMERS P: Thomas Gleixner M: tglx@linutronix.de L: linux-kernel@vger.kernel.org S: Supported -F: fs/timerfd.c -F: include/linux/timer* -F: kernel/*timer* POWER SUPPLY CLASS/SUBSYSTEM and DRIVERS P: Anton Vorontsov @@ -4342,10 +3513,8 @@ M: cbou@mail.ru P: David Woodhouse M: dwmw2@infradead.org L: linux-kernel@vger.kernel.org -T: git git://git.infradead.org/battery-2.6.git +T: git git.infradead.org/battery-2.6.git S: Maintained -F: include/linux/power_supply.h -F: drivers/power/power_supply* PNP SUPPORT P: Adam Belay @@ -4353,42 +3522,33 @@ M: abelay@mit.edu P: Bjorn Helgaas M: bjorn.helgaas@hp.com S: Maintained -F: drivers/pnp/ PNXxxxx I2C DRIVER P: Vitaly Wool M: vitalywool@gmail.com L: linux-i2c@vger.kernel.org S: Maintained -F: drivers/i2c/busses/i2c-pnx.c PPP PROTOCOL DRIVERS AND COMPRESSORS P: Paul Mackerras M: paulus@samba.org L: linux-ppp@vger.kernel.org S: Maintained -F: drivers/net/ppp_* PPP OVER ATM (RFC 2364) P: Mitchell Blank Jr M: mitch@sfgoth.com S: Maintained -F: net/atm/pppoatm.c -F: include/linux/atmppp.h PPP OVER ETHERNET P: Michal Ostrowski M: mostrows@earthlink.net S: Maintained -F: drivers/net/pppoe.c -F: drivers/net/pppox.c PPP OVER L2TP P: James Chapman M: jchapman@katalix.com S: Maintained -F: drivers/net/pppol2tp.c -F: include/linux/if_pppol2tp.h PREEMPTIBLE KERNEL P: Robert Love @@ -4397,8 +3557,6 @@ L: linux-kernel@vger.kernel.org L: kpreempt-tech@lists.sourceforge.net W: ftp://ftp.kernel.org/pub/linux/kernel/people/rml/preempt-kernel S: Supported -F: Documentation/preempt-locking.txt -F: include/linux/preempt.h PRISM54 WIRELESS DRIVER P: Luis R. Rodriguez @@ -4406,7 +3564,6 @@ M: mcgrof@gmail.com L: linux-wireless@vger.kernel.org W: http://prism54.org S: Maintained -F: drivers/net/wireless/prism54/ PROMISE DC4030 CACHING DISK CONTROLLER DRIVER P: Peter Denison @@ -4419,7 +3576,6 @@ P: Mikael Pettersson M: mikpe@it.uu.se L: linux-ide@vger.kernel.org S: Maintained -F: drivers/ata/sata_promise.* PS3 NETWORK SUPPORT P: Masakazu Mokuno @@ -4427,7 +3583,6 @@ M: mokuno@sm.sony.co.jp L: netdev@vger.kernel.org L: cbe-oss-dev@ozlabs.org S: Supported -F: drivers/net/ps3_gelic_net.* PS3 PLATFORM SUPPORT P: Geoff Levand @@ -4435,13 +3590,6 @@ M: geoffrey.levand@am.sony.com L: linuxppc-dev@ozlabs.org L: cbe-oss-dev@ozlabs.org S: Supported -F: arch/powerpc/boot/ps3* -F: arch/powerpc/include/asm/lv1call.h -F: arch/powerpc/include/asm/ps3*.h -F: arch/powerpc/platforms/ps3/ -F: drivers/*/ps3* -F: drivers/ps3/ -F: drivers/usb/host/*ps3.c PS3VRAM DRIVER P: Jim Paris @@ -4455,10 +3603,8 @@ M: isely@pobox.com L: pvrusb2@isely.net (subscribers-only) L: linux-media@vger.kernel.org W: http://www.isely.net/pvrusb2/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: Documentation/video4linux/README.pvrusb2 -F: drivers/media/video/pvrusb2/ PXA2xx/PXA3xx SUPPORT P: Eric Miao @@ -4467,12 +3613,6 @@ P: Russell King M: linux@arm.linux.org.uk L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) S: Maintained -F: arch/arm/mach-pxa/ -F: drivers/pcmcia/pxa2xx* -F: drivers/spi/pxa2xx* -F: drivers/usb/gadget/pxa2* -F: include/sound/pxa2xx-lib.h -F: sound/soc/pxa/pxa2xx* PXA168 SUPPORT P: Eric Miao @@ -4480,14 +3620,14 @@ M: eric.miao@marvell.com P: Jason Chagas M: jason.chagas@marvell.com L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git S: Supported PXA910 SUPPORT P: Eric Miao M: eric.miao@marvell.com L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git S: Supported PXA MMCI DRIVER @@ -4504,16 +3644,12 @@ P: Andrew Vasquez M: linux-driver@qlogic.com L: linux-scsi@vger.kernel.org S: Supported -F: Documentation/scsi/LICENSE.qla2xxx -F: drivers/scsi/qla2xxx/ QLOGIC QLA3XXX NETWORK DRIVER P: Ron Mercer M: linux-driver@qlogic.com L: netdev@vger.kernel.org S: Supported -F: Documentation/networking/LICENSE.qla3xxx -F: drivers/net/qla3xxx.* QLOGIC QLGE 10Gb ETHERNET DRIVER P: Ron Mercer @@ -4521,7 +3657,6 @@ M: linux-driver@qlogic.com M: ron.mercer@qlogic.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/qlge/ QNX4 FILESYSTEM P: Anders Larsen @@ -4529,24 +3664,18 @@ M: al@alarsen.net L: linux-kernel@vger.kernel.org W: http://www.alarsen.net/linux/qnx4fs/ S: Maintained -F: fs/qnx4/ -F: include/linux/qnx4_fs.h -F: include/linux/qnxtypes.h RADEON FRAMEBUFFER DISPLAY DRIVER P: Benjamin Herrenschmidt M: benh@kernel.crashing.org L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/aty/radeon* -F: include/linux/radeonfb.h RAGE128 FRAMEBUFFER DISPLAY DRIVER P: Paul Mackerras M: paulus@samba.org L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/aty/aty128fb.c RALINK RT2X00 WIRELESS LAN DRIVER P: rt2x00 project @@ -4554,43 +3683,36 @@ L: linux-wireless@vger.kernel.org L: users@rt2x00.serialmonkey.com W: http://rt2x00.serialmonkey.com/ S: Maintained -T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git +T: git kernel.org:/pub/scm/linux/kernel/git/ivd/rt2x00.git F: drivers/net/wireless/rt2x00/ RAMDISK RAM BLOCK DEVICE DRIVER P: Nick Piggin M: npiggin@suse.de S: Maintained -F: Documentation/blockdev/ramdisk.txt -F: drivers/block/brd.c RANDOM NUMBER DRIVER P: Matt Mackall M: mpm@selenic.com S: Maintained -F: drivers/char/random.c RAPIDIO SUBSYSTEM P: Matt Porter M: mporter@kernel.crashing.org L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/rapidio/ RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER P: Corey Thomas M: coreythomas@charter.net L: linux-wireless@vger.kernel.org S: Maintained -F: drivers/net/wireless/ray* RCUTORTURE MODULE P: Josh Triplett M: josh@freedesktop.org L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/RCU/torture.txt -F: kernel/rcutorture.c RDC R-321X SoC P: Florian Fainelli @@ -4603,14 +3725,12 @@ P: Florian Fainelli M: florian.fainelli@telecomint.eu L: netdev@vger.kernel.org S: Maintained -F: drivers/net/r6040.c RDS - RELIABLE DATAGRAM SOCKETS P: Andy Grover M: andy.grover@oracle.com L: rds-devel@oss.oracle.com S: Supported -F: net/rds/ READ-COPY UPDATE (RCU) P: Dipankar Sarma @@ -4618,54 +3738,37 @@ M: dipankar@in.ibm.com W: http://www.rdrop.com/users/paulmck/rclock/ L: linux-kernel@vger.kernel.org S: Supported -F: Documentation/RCU/rcu.txt -F: Documentation/RCU/rcuref.txt -F: include/linux/rcupdate.h -F: include/linux/srcu.h -F: kernel/rcupdate.c REAL TIME CLOCK DRIVER P: Paul Gortmaker M: p_gortmaker@yahoo.com L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/rtc.txt -F: drivers/rtc/ -F: include/linux/rtc.h REAL TIME CLOCK (RTC) SUBSYSTEM P: Alessandro Zummo M: a.zummo@towertech.it L: rtc-linux@googlegroups.com S: Maintained -F: Documentation/rtc.txt -F: drivers/rtc/ -F: include/linux/rtc.h REISERFS FILE SYSTEM L: reiserfs-devel@vger.kernel.org S: Supported -F: fs/reiserfs/ RFKILL P: Ivo van Doorn M: IvDoorn@gmail.com L: netdev@vger.kernel.org S: Maintained -F Documentation/rfkill.txt -F: net/rfkill/ +F: net/rfkill RISCOM8 DRIVER S: Orphan -F: Documentation/serial/riscom8.txt -F: drivers/char/riscom8* ROCKETPORT DRIVER P: Comtrol Corp. W: http://www.comtrol.com S: Maintained -F: Documentation/serial/rocket.txt -F: drivers/char/rocket* ROSE NETWORK LAYER P: Ralf Baechle @@ -4673,38 +3776,32 @@ M: ralf@linux-mips.org L: linux-hams@vger.kernel.org W: http://www.linux-ax25.org/ S: Maintained -F: include/linux/rose.h -F: include/net/rose.h -F: net/rose/ RTL8180 WIRELESS DRIVER P: John W. Linville M: linville@tuxdriver.com L: linux-wireless@vger.kernel.org W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git +T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-testing.git S: Maintained -F: drivers/net/wireless/rtl818* RTL8187 WIRELESS DRIVER -P: Herton Ronaldo Krzesinski -M: herton@mandriva.com.br -P: Hin-Tak Leung -M: htl10@users.sourceforge.net -P: Larry Finger -M: Larry.Finger@lwfinger.net -L: linux-wireless@vger.kernel.org -W: http://linuxwireless.org/ -T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git -S: Maintained -F: drivers/net/wireless/rtl818x/rtl8187* +P: Herton Ronaldo Krzesinski +M: herton@mandriva.com.br +P: Hin-Tak Leung +M htl10@users.sourceforge.net +P: Larry Finger +M: Larry.Finger@lwfinger.net +L: linux-wireless@vger.kernel.org +W: http://linuxwireless.org/ +T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-testing.git +S: Maintained S3 SAVAGE FRAMEBUFFER DRIVER P: Antonino Daplas M: adaplas@gmail.com L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/savage/ S390 P: Martin Schwidefsky @@ -4715,7 +3812,6 @@ M: linux390@de.ibm.com L: linux-s390@vger.kernel.org W: http://www.ibm.com/developerworks/linux/linux390/ S: Supported -F: arch/s390/ S390 NETWORK DRIVERS P: Ursula Braun @@ -4726,7 +3822,6 @@ M: linux390@de.ibm.com L: linux-s390@vger.kernel.org W: http://www.ibm.com/developerworks/linux/linux390/ S: Supported -F: drivers/s390/net/ S390 ZCRYPT DRIVER P: Felix Beck @@ -4736,7 +3831,6 @@ M: ralph.wuerthner@de.ibm.com M: linux390@de.ibm.com L: linux-s390@vger.kernel.org S: Supported -F: drivers/s390/crypto/ S390 ZFCP DRIVER P: Christof Schmitt @@ -4747,8 +3841,6 @@ M: linux390@de.ibm.com L: linux-s390@vger.kernel.org W: http://www.ibm.com/developerworks/linux/linux390/ S: Supported -F: Documentation/s390/zfcpdump.txt -F: drivers/s390/scsi/zfcp_* S390 IUCV NETWORK LAYER P: Ursula Braun @@ -4757,9 +3849,6 @@ M: linux390@de.ibm.com L: linux-s390@vger.kernel.org W: http://www.ibm.com/developerworks/linux/linux390/ S: Supported -F: drivers/s390/net/*iucv* -F: include/net/iucv/ -F: net/iucv/ S3C24XX SD/MMC Driver P: Ben Dooks @@ -4767,34 +3856,27 @@ M: ben-linux@fluff.org L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-kernel@vger.kernel.org S: Supported -F: drivers/mmc/host/s3cmci.* SAA7146 VIDEO4LINUX-2 DRIVER P: Michael Hunold M: michael@mihu.de L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://www.mihu.de/linux/saa7146 S: Maintained -F: drivers/media/common/saa7146* -F: drivers/media/video/*7146* -F: include/media/*7146* SC1200 WDT DRIVER P: Zwane Mwaikambo M: zwane@arm.linux.org.uk S: Maintained -F: drivers/watchdog/sc1200wdt.c SCHEDULER P: Ingo Molnar M: mingo@elte.hu -P: Peter Zijlstra -M: peterz@infradead.org +P: Robert Love [the preemptible kernel bits] +M: rml@tech9.net L: linux-kernel@vger.kernel.org S: Maintained -F: kernel/sched* -F: include/linux/sched.h SCSI CDROM DRIVER P: Jens Axboe @@ -4802,7 +3884,6 @@ M: axboe@kernel.dk L: linux-scsi@vger.kernel.org W: http://www.kernel.dk S: Maintained -F: drivers/scsi/sr* SCSI SG DRIVER P: Doug Gilbert @@ -4810,27 +3891,21 @@ M: dgilbert@interlog.com L: linux-scsi@vger.kernel.org W: http://www.torque.net/sg S: Maintained -F: drivers/scsi/sg.c -F: include/scsi/sg.h SCSI SUBSYSTEM P: James E.J. Bottomley M: James.Bottomley@HansenPartnership.com L: linux-scsi@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git S: Maintained -F: drivers/scsi/ -F: include/scsi/ SCSI TAPE DRIVER P: Kai Mäkisara M: Kai.Makisara@kolumbus.fi L: linux-scsi@vger.kernel.org S: Maintained -F: Documentation/scsi/st.txt -F: drivers/scsi/st* SCTP PROTOCOL P: Vlad Yasevich @@ -4840,41 +3915,27 @@ M: sri@us.ibm.com L: linux-sctp@vger.kernel.org W: http://lksctp.sourceforge.net S: Supported -F: Documentation/networking/sctp.txt -F: include/linux/sctp.h -F: include/net/sctp/ -F: net/sctp/ SCx200 CPU SUPPORT P: Jim Cromie M: jim.cromie@gmail.com S: Odd Fixes -F: Documentation/i2c/busses/scx200_acb -F: arch/x86/kernel/scx200_32.c -F: drivers/watchdog/scx200_wdt.c -F: drivers/i2c/busses/scx200* -F: drivers/mtd/maps/scx200_docflash.c -F: include/linux/scx200.h SCx200 GPIO DRIVER P: Jim Cromie M: jim.cromie@gmail.com S: Maintained -F: drivers/char/scx200_gpio.c -F: include/linux/scx200_gpio.h SCx200 HRT CLOCKSOURCE DRIVER P: Jim Cromie M: jim.cromie@gmail.com S: Maintained -F: drivers/clocksource/scx200_hrt.c SDRICOH_CS MMC/SD HOST CONTROLLER INTERFACE DRIVER P: Sascha Sommer M: saschasommer@freenet.de L: sdricohcs-devel@lists.sourceforge.net (subscribers-only) S: Maintained -F: drivers/mmc/host/sdricoh_cs.c SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER P: Pierre Ossman @@ -4888,17 +3949,16 @@ M: avorontsov@ru.mvista.com L: linuxppc-dev@ozlabs.org L: sdhci-devel@lists.ossman.eu S: Maintained -F: drivers/mmc/host/sdhci.* SECURITY SUBSYSTEM +F: security/ P: James Morris M: jmorris@namei.org L: linux-kernel@vger.kernel.org L: linux-security-module@vger.kernel.org (suggested Cc:) -T: git git://www.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git +T: git kernel.org:pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git W: http://security.wiki.kernel.org/ S: Supported -F: security/ SECURITY CONTACT P: Security Officers @@ -4913,39 +3973,31 @@ M: jmorris@namei.org P: Eric Paris M: eparis@parisplace.org L: linux-kernel@vger.kernel.org (kernel issues) -L: selinux@tycho.nsa.gov (subscribers-only, general discussion) +L: selinux@tycho.nsa.gov (subscribers-only, general discussion) W: http://selinuxproject.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git +T: git kernel.org:pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git S: Supported -F: include/linux/selinux* -F: security/selinux/ SENSABLE PHANTOM P: Jiri Slaby M: jirislaby@gmail.com S: Maintained -F: drivers/misc/phantom.c -F: include/linux/phantom.h SERIAL ATA (SATA) SUBSYSTEM P: Jeff Garzik M: jgarzik@pobox.com L: linux-ide@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git +T: git kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git S: Supported -F: drivers/ata/ -F: include/linux/ata.h -F: include/linux/libata.h SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER P: Sathya Perla M: sathyap@serverengines.com -P: Subbu Seetharaman -M: subbus@serverengines.com -L: netdev@vger.kernel.org -W: http://www.serverengines.com -S: Supported -F: drivers/net/benet/ +P: Subbu Seetharaman +M: subbus@serverengines.com +L: netdev@vger.kernel.org +W: http://www.serverengines.com +S: Supported SFC NETWORK DRIVER P: Steve Hodgson @@ -4953,22 +4005,17 @@ P: Ben Hutchings P: Robert Stonehouse M: linux-net-drivers@solarflare.com S: Supported -F: drivers/net/sfc/ SGI GRU DRIVER P: Jack Steiner M: steiner@sgi.com S: Maintained -F: drivers/misc/sgi-gru/ SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER P: Pat Gefre M: pfg@sgi.com L: linux-ia64@vger.kernel.org S: Supported -F: Documentation/ia64/serial.txt -F: drivers/serial/ioc?_serial.c -F: include/linux/ioc?.h SGI VISUAL WORKSTATION 320 AND 540 P: Andrey Panin @@ -4976,13 +4023,11 @@ M: pazke@donpac.ru L: linux-visws-devel@lists.sf.net W: http://linux-visws.sf.net S: Maintained for 2.6. -F: Documentation/sgi-visws.txt SGI XP/XPC/XPNET DRIVER -P: Robin Holt -M: holt@sgi.com +P: Dean Nelson +M: dcn@sgi.com S: Maintained -F: drivers/misc/sgi-xp/ SHARP LH SUPPORT (LH7952X & LH7A40X) P: Marc Singer @@ -4990,18 +4035,12 @@ M: elf@buici.com W: http://projects.buici.com/arm L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) S: Maintained -F: Documentation/arm/Sharp-LH/ADC-LH7-Touchscreen -F: arch/arm/mach-lh7a40x/ -F: drivers/serial/serial_lh7a40x.c -F: drivers/usb/gadget/lh7a40* -F: drivers/usb/host/ohci-lh7a40* SHPC HOTPLUG DRIVER P: Kristen Carlson Accardi M: kristen.c.accardi@intel.com L: linux-pci@vger.kernel.org S: Supported -F: drivers/pci/hotplug/shpchp* SIMTEC EB110ATX (Chalice CATS) P: Ben Dooks @@ -5009,7 +4048,6 @@ P: Vincent Sanders M: support@simtec.co.uk W: http://www.simtec.co.uk/products/EB110ATX/ S: Supported -F: arch/arm/mach-ebsa110/ SIMTEC EB2410ITX (BAST) P: Ben Dooks @@ -5017,16 +4055,12 @@ P: Vincent Sanders M: support@simtec.co.uk W: http://www.simtec.co.uk/products/EB2410ITX/ S: Supported -F: arch/arm/mach-s3c2410/ -F: drivers/*/*s3c2410* -F: drivers/*/*/*s3c2410* SIS 190 ETHERNET DRIVER P: Francois Romieu M: romieu@fr.zoreil.com L: netdev@vger.kernel.org S: Maintained -F: drivers/net/sis190.c SIS 900/7016 FAST ETHERNET DRIVER P: Daniele Venzano @@ -5034,39 +4068,30 @@ M: venza@brownhat.org W: http://www.brownhat.org/sis900.html L: netdev@vger.kernel.org S: Maintained -F: drivers/net/sis900.* SIS 96X I2C/SMBUS DRIVER P: Mark M. Hoffman M: mhoffman@lightlink.com L: linux-i2c@vger.kernel.org S: Maintained -F: Documentation/i2c/busses/i2c-sis96x -F: drivers/i2c/busses/i2c-sis96x.c SIS FRAMEBUFFER DRIVER P: Thomas Winischhofer M: thomas@winischhofer.net W: http://www.winischhofer.net/linuxsisvga.shtml S: Maintained -F: Documentation/fb/sisfb.txt -F: drivers/video/sis/ -F: include/video/sisfb.h SIS USB2VGA DRIVER P: Thomas Winischhofer M: thomas@winischhofer.net W: http://www.winischhofer.at/linuxsisusbvga.shtml S: Maintained -F: drivers/usb/misc/sisusbvga/ SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS P: Stephen Hemminger M: shemminger@linux-foundation.org L: netdev@vger.kernel.org S: Maintained -F: drivers/net/skge.* -F: drivers/net/sky2.* SLAB ALLOCATOR P: Christoph Lameter @@ -5077,43 +4102,34 @@ P: Matt Mackall M: mpm@selenic.com L: linux-mm@kvack.org S: Maintained -F: include/linux/sl?b*.h -F: mm/sl?b.c SMC91x ETHERNET DRIVER P: Nicolas Pitre M: nico@cam.org S: Maintained -F: drivers/net/smc91x.* SMSC47B397 HARDWARE MONITOR DRIVER P: Mark M. Hoffman M: mhoffman@lightlink.com L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/smsc47b397 -F: drivers/hwmon/smsc47b397.c SMSC911x ETHERNET DRIVER P: Steve Glendinning M: steve.glendinning@smsc.com L: netdev@vger.kernel.org S: Supported -F: include/linux/smsc911x.h -F: drivers/net/smsc911x.* SMSC9420 PCI ETHERNET DRIVER P: Steve Glendinning M: steve.glendinning@smsc.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/smsc9420.* SMX UIO Interface P: Ben Nizette M: bn@niasdigital.com S: Maintained -F: drivers/uio/uio_smx.c SN-IA64 (Itanium) SUB-PLATFORM P: Jes Sorensen @@ -5122,45 +4138,36 @@ L: linux-altix@sgi.com L: linux-ia64@vger.kernel.org W: http://www.sgi.com/altix S: Maintained -F: arch/ia64/sn/ SOC-CAMERA V4L2 SUBSYSTEM P: Guennadi Liakhovetski M: g.liakhovetski@gmx.de L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git S: Maintained -F: include/media/v4l2* -F: drivers/media/video/v4l2* SOEKRIS NET48XX LED SUPPORT P: Chris Boot M: bootc@bootc.net S: Maintained -F: drivers/leds/leds-net48xx.c SOFTWARE RAID (Multiple Disks) SUPPORT P: Neil Brown M: neilb@suse.de L: linux-raid@vger.kernel.org S: Supported -F: drivers/md/ -F: include/linux/raid/ SONIC NETWORK DRIVER P: Thomas Bogendoerfer M: tsbogend@alpha.franken.de L: netdev@vger.kernel.org S: Maintained -F: drivers/net/sonic.* SONICS SILICON BACKPLANE DRIVER (SSB) P: Michael Buesch M: mb@bu3sch.de L: netdev@vger.kernel.org S: Maintained -F: drivers/ssb/ -F: include/linux/ssb/ SONY VAIO CONTROL DEVICE DRIVER P: Mattia Dongili @@ -5168,10 +4175,6 @@ M: malattia@linux.it L: linux-acpi@vger.kernel.org W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers S: Maintained -F: Documentation/laptops/sony-laptop.txt -F: drivers/char/sonypi.c -F: drivers/platform/x86/sony-laptop.c -F: include/linux/sony-laptop.h SONY MEMORYSTICK CARD SUPPORT P: Alex Dubov @@ -5179,7 +4182,6 @@ M: oakad@yahoo.com L: linux-kernel@vger.kernel.org W: http://tifmxx.berlios.de/ S: Maintained -F: drivers/memstick/host/tifm_ms.c SOUND P: Jaroslav Kysela @@ -5188,44 +4190,36 @@ P: Takashi Iwai M: tiwai@suse.de L: alsa-devel@alsa-project.org (subscribers-only) S: Maintained -F: sound/ SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) P: Liam Girdwood M: lrg@slimlogic.co.uk P: Mark Brown M: broonie@opensource.wolfsonmicro.com -T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc +T: git opensource.wolfsonmicro.com/linux-2.6-asoc L: alsa-devel@alsa-project.org (subscribers-only) W: http://alsa-project.org/main/index.php/ASoC S: Supported -F: sound/soc/ SPARC + UltraSPARC (sparc/sparc64) P: David S. Miller M: davem@davemloft.net L: sparclinux@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git -T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git S: Maintained -F: arch/sparc/ SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER P: Roger Wolff M: R.E.Wolff@BitWizard.nl -L: linux-kernel@vger.kernel.org +L: linux-kernel@vger.kernel.org ? S: Supported -F: Documentation/serial/specialix.txt -F: drivers/char/specialix* SPI SUBSYSTEM P: David Brownell M: dbrownell@users.sourceforge.net L: spi-devel-general@lists.sourceforge.net S: Maintained -F: Documentation/spi/ -F: drivers/spi/ -F: include/linux/spi/ SPIDERNET NETWORK DRIVER for CELL P: Ishizaki Kou @@ -5234,8 +4228,6 @@ P: Jens Osterkamp M: jens@de.ibm.com L: netdev@vger.kernel.org S: Supported -F: Documentation/networking/spider_net.txt -F: drivers/net/spider_net* SPU FILE SYSTEM P: Jeremy Kerr @@ -5244,8 +4236,6 @@ L: linuxppc-dev@ozlabs.org L: cbe-oss-dev@ozlabs.org W: http://www.ibm.com/developerworks/power/cell/ S: Supported -F: Documentation/filesystems/spufs.txt -F: arch/powerpc/platforms/cell/spufs/ SQUASHFS FILE SYSTEM P: Phillip Lougher @@ -5253,15 +4243,12 @@ M: phillip@lougher.demon.co.uk L: squashfs-devel@lists.sourceforge.net (subscribers-only) W: http://squashfs.org.uk S: Maintained -F: Documentation/filesystems/squashfs.txt -F: fs/squashfs/ SRM (Alpha) environment access P: Jan-Benedict Glaw M: jbglaw@lug-owl.de L: linux-kernel@vger.kernel.org S: Maintained -F: arch/alpha/kernel/srm_env.c STABLE BRANCH P: Greg Kroah-Hartman @@ -5277,46 +4264,35 @@ M: gregkh@suse.de L: linux-kernel@vger.kernel.org T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ S: Maintained -F: drivers/staging/ STARFIRE/DURALAN NETWORK DRIVER P: Ion Badulescu M: ionut@cs.columbia.edu S: Maintained -F: drivers/net/starfire* STARMODE RADIO IP (STRIP) PROTOCOL DRIVER W: http://mosquitonet.Stanford.EDU/strip.html S: Orphan -F: drivers/net/wireless/strip.c -F: include/linux/if_strip.h STRADIS MPEG-2 DECODER DRIVER P: Nathan Laredo M: laredo@gnu.org W: http://www.stradis.com/ S: Maintained -F: drivers/media/video/stradis.c SUN3/3X P: Sam Creasey M: sammy@sammy.net W: http://sammy.net/sun3/ S: Maintained -F: arch/m68k/kernel/*sun3* -F: arch/m68k/sun3*/ -F: arch/m68k/include/asm/sun3* SUPERH P: Paul Mundt M: lethal@linux-sh.org L: linux-sh@vger.kernel.org W: http://www.linux-sh.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.git S: Supported -F: Documentation/sh/ -F: arch/sh/ -F: drivers/sh/ SUSPEND TO RAM P: Len Brown @@ -5327,48 +4303,29 @@ P: Rafael J. Wysocki M: rjw@sisk.pl L: linux-pm@lists.linux-foundation.org S: Supported -F: Documentation/power/ -F: arch/x86/kernel/acpi/ -F: drivers/base/power/ -F: kernel/power/ -F: include/linux/suspend.h -F: include/linux/freezer.h -F: include/linux/pm.h -F: include/asm-*/suspend.h SVGA HANDLING P: Martin Mares M: mj@ucw.cz L: linux-video@atrey.karlin.mff.cuni.cz S: Maintained -F: Documentation/svga.txt -F: arch/x86/boot/video* SYSV FILESYSTEM P: Christoph Hellwig M: hch@infradead.org S: Maintained -F: Documentation/filesystems/sysv-fs.txt -F: fs/sysv/ -F: include/linux/sysv_fs.h TASKSTATS STATISTICS INTERFACE P: Balbir Singh M: balbir@linux.vnet.ibm.com L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/accounting/taskstats* -F: include/linux/taskstats* -F: kernel/taskstats.c TC CLASSIFIER P: Jamal Hadi Salim M: hadi@cyberus.ca L: netdev@vger.kernel.org S: Maintained -F: include/linux/pkt_cls.h -F: include/net/pkt_cls.h -F: net/sched/ TCP LOW PRIORITY MODULE P: Wong Hoi Sing, Edison @@ -5377,7 +4334,6 @@ P: Hung Hing Lun, Mike M: hlhung3i@gmail.com W: http://tcp-lp-mod.sourceforge.net/ S: Maintained -F: net/ipv4/tcp_lp.c TEHUTI ETHERNET DRIVER P: Alexander Indenbaum @@ -5386,19 +4342,16 @@ P: Andy Gospodarek M: andy@greyhouse.net L: netdev@vger.kernel.org S: Supported -F: drivers/net/tehuti* Telecom Clock Driver for MCPL0010 P: Mark Gross M: mark.gross@intel.com S: Supported -F: drivers/char/tlclk.c TENSILICA XTENSA PORT (xtensa) P: Chris Zankel M: chris@zankel.net S: Maintained -F: arch/xtensa/ THINKPAD ACPI EXTRAS DRIVER P: Henrique de Moraes Holschuh @@ -5406,17 +4359,13 @@ M: ibm-acpi@hmh.eng.br L: ibm-acpi-devel@lists.sourceforge.net W: http://ibm-acpi.sourceforge.net W: http://thinkwiki.org/wiki/Ibm-acpi -T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git +T: git repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git S: Maintained -F: drivers/platform/x86/thinkpad_acpi.c TI FLASH MEDIA INTERFACE DRIVER P: Alex Dubov M: oakad@yahoo.com S: Maintained -F: drivers/misc/tifm* -F: drivers/mmc/host/tifm_sd.c -F: include/linux/tifm.h TI OMAP MMC INTERFACE DRIVER P: Carlos Aguiar, Anderson Briglia and Syed Khasim @@ -5424,13 +4373,11 @@ M: linux-omap@vger.kernel.org W: http://linux.omap.com W: http://www.muru.com/linux/omap/ S: Maintained -F: drivers/mmc/host/omap.c TI OMAP RANDOM NUMBER GENERATOR SUPPORT P: Deepak Saxena M: dsaxena@plexity.net S: Maintained -F: drivers/char/hw_random/omap-rng.c TIPC NETWORK LAYER P: Per Liden @@ -5442,11 +4389,8 @@ M: allan.stephens@windriver.com L: tipc-discussion@lists.sourceforge.net W: http://tipc.sourceforge.net/ W: http://tipc.cslab.ericsson.net/ -T: git git://tipc.cslab.ericsson.net/pub/git/tipc.git +T: git tipc.cslab.ericsson.net:/pub/git/tipc.git S: Maintained -F: include/linux/tipc*.h -F: include/net/tipc/ -F: net/tipc/ TLAN NETWORK DRIVER P: Samuel Chessman @@ -5454,8 +4398,6 @@ M: chessman@tux.org L: tlan-devel@lists.sourceforge.net (subscribers-only) W: http://sourceforge.net/projects/tlan/ S: Maintained -F: Documentation/networking/tlan.txt -F: drivers/net/tlan.* TOMOYO SECURITY MODULE P: Kentaro Takeda @@ -5469,11 +4411,9 @@ L: tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese) W: http://tomoyo.sourceforge.jp/ T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.2.x/tomoyo-lsm/patches/ S: Maintained -F: security/tomoyo/ TOSHIBA ACPI EXTRAS DRIVER S: Orphan -F: drivers/platform/x86/toshiba_acpi.c TOSHIBA SMM DRIVER P: Jonathan Buzzard @@ -5481,14 +4421,11 @@ M: jonathan@buzzard.org.uk L: tlinux-users@tce.toshiba-dme.co.jp W: http://www.buzzard.org.uk/toshiba/ S: Maintained -F: drivers/char/toshiba.c -F: include/linux/toshiba.h TMIO MMC DRIVER P: Ian Molton M: ian@mnementh.co.uk S: Maintained -F: drivers/mmc/host/tmio_mmc.* TPM DEVICE DRIVER P: Debora Velarde @@ -5501,13 +4438,12 @@ M: m.selhorst@sirrix.com W: http://www.sirrix.com L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/char/tpm/ TRIVIAL PATCHES P: Jiri Kosina M: trivial@kernel.org L: linux-kernel@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git +T: git kernel.org:/pub/scm/linux/kernel/git/jikos/trivial.git S: Maintained TTY LAYER @@ -5523,7 +4459,6 @@ P: Kyle McMartin M: kyle@mcmartin.ca L: netdev@vger.kernel.org S: Maintained -F: drivers/net/tulip/ TUN/TAP driver P: Maxim Krasnyansky @@ -5531,22 +4466,17 @@ M: maxk@qualcomm.com L: vtun@office.satix.net W: http://vtun.sourceforge.net/tun S: Maintained -F: Documentation/networking/tuntap.txt -F: arch/um/os-Linux/drivers/ TURBOCHANNEL SUBSYSTEM P: Maciej W. Rozycki M: macro@linux-mips.org S: Maintained -F: drivers/tc/ -F: include/linux/tc.h U14-34F SCSI DRIVER P: Dario Ballabio M: ballabio_dario@emc.com L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/u14-34f.c UBI FILE SYSTEM (UBIFS) P: Artem Bityutskiy @@ -5557,8 +4487,6 @@ L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/ubifs-2.6.git W: http://www.linux-mtd.infradead.org/doc/ubifs.html S: Maintained -F: Documentation/filesystems/ubifs.txt -F: fs/ubifs/ UCLINUX (AND M68KNOMMU) P: Greg Ungerer @@ -5566,7 +4494,6 @@ M: gerg@uclinux.org W: http://www.uclinux.org/ L: uclinux-dev@uclinux.org (subscribers-only) S: Maintained -F: arch/m68knommu/ UCLINUX FOR RENESAS H8/300 P: Yoshinori Sato @@ -5579,25 +4506,18 @@ P: Jan Kara M: jack@suse.cz W: http://linux-udf.sourceforge.net S: Maintained -F: Documentation/filesystems/udf.txt -F: fs/udf/ UFS FILESYSTEM P: Evgeniy Dushistov M: dushistov@mail.ru L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/ufs.txt -F: fs/ufs/ ULTRA-WIDEBAND (UWB) SUBSYSTEM: P: David Vrabel M: david.vrabel@csr.com L: linux-usb@vger.kernel.org S: Supported -F: drivers/uwb/* -F: include/linux/uwb.h -F: include/linux/uwb/ UNIFORM CDROM DRIVER P: Jens Axboe @@ -5605,9 +4525,6 @@ M: axboe@kernel.dk L: linux-kernel@vger.kernel.org W: http://www.kernel.dk S: Maintained -F: Documentation/cdrom/ -F: drivers/cdrom/cdrom.c -F: include/linux/cdrom.h UNSORTED BLOCK IMAGES (UBI) P: Artem Bityutskiy @@ -5616,17 +4533,12 @@ W: http://www.linux-mtd.infradead.org/ L: linux-mtd@lists.infradead.org T: git git://git.infradead.org/ubi-2.6.git S: Maintained -F: drivers/mtd/ubi/ -F: include/linux/mtd/ubi.h -F: include/mtd/ubi-user.h USB ACM DRIVER P: Oliver Neukum M: oliver@neukum.name L: linux-usb@vger.kernel.org S: Maintained -F: Documentation/usb/acm.txt -F: drivers/usb/class/cdc-acm.* USB BLOCK DRIVER (UB ub) P: Pete Zaitcev @@ -5634,7 +4546,6 @@ M: zaitcev@redhat.com L: linux-kernel@vger.kernel.org L: linux-usb@vger.kernel.org S: Supported -F: drivers/block/ub.c USB CDC ETHERNET DRIVER P: Greg Kroah-Hartman @@ -5642,15 +4553,12 @@ M: greg@kroah.com L: linux-usb@vger.kernel.org S: Maintained W: http://www.kroah.com/linux-usb/ -F: drivers/net/usb/cdc_*.c -F: include/linux/usb/cdc.h USB CYPRESS C67X00 DRIVER P: Peter Korsgaard M: jacmet@sunsite.dk L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/c67x00/ USB DAVICOM DM9601 DRIVER P: Peter Korsgaard @@ -5658,7 +4566,6 @@ M: jacmet@sunsite.dk L: netdev@vger.kernel.org W: http://www.linux-usb.org/usbnet S: Maintained -F: drivers/net/usb/dm9601.c USB DIAMOND RIO500 DRIVER P: Cesar Miquel @@ -5666,25 +4573,21 @@ M: miquel@df.uba.ar L: rio500-users@lists.sourceforge.net W: http://rio500.sourceforge.net S: Maintained -F: drivers/usb/misc/rio500* USB EHCI DRIVER P: David Brownell M: dbrownell@users.sourceforge.net L: linux-usb@vger.kernel.org S: Odd Fixes -F: Documentation/usb/ehci.txt -F: drivers/usb/host/ehci* USB ET61X[12]51 DRIVER P: Luca Risolia M: luca.risolia@studio.unibo.it L: linux-usb@vger.kernel.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://www.linux-projects.org S: Maintained -F: drivers/media/video/et61x251/ USB GADGET/PERIPHERAL SUBSYSTEM P: David Brownell @@ -5692,32 +4595,25 @@ M: dbrownell@users.sourceforge.net L: linux-usb@vger.kernel.org W: http://www.linux-usb.org/gadget S: Maintained -F: drivers/usb/gadget/ -F: include/linux/usb/gadget* USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...) P: Jiri Kosina M: jkosina@suse.cz L: linux-usb@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git +T: git kernel.org:/pub/scm/linux/kernel/git/jikos/hid.git S: Maintained -F: Documentation/usb/hiddev.txt -F: drivers/hid/usbhid/ USB ISP116X DRIVER P: Olav Kongas M: ok@artecdesign.ee L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/host/isp116x* -F: include/linux/usb/isp116x.h USB KAWASAKI LSI DRIVER P: Oliver Neukum M: oliver@neukum.name L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/serial/kl5kusb105.* USB MASS STORAGE DRIVER P: Matthew Dharm @@ -5726,22 +4622,18 @@ L: linux-usb@vger.kernel.org L: usb-storage@lists.one-eyed-alien.net S: Maintained W: http://www.one-eyed-alien.net/~mdharm/linux-usb/ -F: drivers/usb/storage/ USB OHCI DRIVER P: David Brownell M: dbrownell@users.sourceforge.net L: linux-usb@vger.kernel.org S: Odd Fixes -F: Documentation/usb/ohci.txt -F: drivers/usb/host/ohci* USB OPTION-CARD DRIVER P: Matthias Urlichs M: smurf@smurf.noris.de L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/serial/option.c USB OV511 DRIVER P: Mark McClelland @@ -5749,7 +4641,6 @@ M: mmcclell@bigfoot.com L: linux-usb@vger.kernel.org W: http://alpha.dyndns.org/ov511/ S: Maintained -F: drivers/media/video/ov511.* USB PEGASUS DRIVER P: Petko Manolov @@ -5758,14 +4649,12 @@ L: linux-usb@vger.kernel.org L: netdev@vger.kernel.org W: http://pegasus2.sourceforge.net/ S: Maintained -F: drivers/net/usb/pegasus.* USB PRINTER DRIVER (usblp) P: Pete Zaitcev M: zaitcev@redhat.com L: linux-usb@vger.kernel.org S: Supported -F: drivers/usb/class/usblp.c USB RTL8150 DRIVER P: Petko Manolov @@ -5774,7 +4663,6 @@ L: linux-usb@vger.kernel.org L: netdev@vger.kernel.org W: http://pegasus2.sourceforge.net/ S: Maintained -F: drivers/net/usb/rtl8150.c USB SE401 DRIVER P: Jeroen Vreeken @@ -5782,15 +4670,12 @@ M: pe1rxq@amsat.org L: linux-usb@vger.kernel.org W: http://www.chello.nl/~j.vreeken/se401/ S: Maintained -F: Documentation/video4linux/se401.txt -F: drivers/media/video/se401.* USB SERIAL BELKIN F5U103 DRIVER P: William Greathouse M: wgreathouse@smva.com L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/serial/belkin_sa.* USB SERIAL CYPRESS M8 DRIVER P: Lonnie Mendez @@ -5799,14 +4684,12 @@ L: linux-usb@vger.kernel.org S: Maintained W: http://geocities.com/i0xox0i W: http://firstlight.net/cvs -F: drivers/usb/serial/cypress_m8.* USB SERIAL CYBERJACK DRIVER P: Matthias Bruestle and Harald Welte M: support@reiner-sct.com W: http://www.reiner-sct.de/support/treiber_cyberjack.php S: Maintained -F: drivers/usb/serial/cyberjack.c USB SERIAL DIGI ACCELEPORT DRIVER P: Peter Berger and Al Borchers @@ -5814,24 +4697,18 @@ M: pberger@brimson.com M: alborchers@steinerpoint.com L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/serial/digi_acceleport.c USB SERIAL DRIVER P: Greg Kroah-Hartman M: gregkh@suse.de L: linux-usb@vger.kernel.org S: Supported -F: Documentation/usb/usb-serial.txt -F: drivers/usb/serial/generic.c -F: drivers/usb/serial/usb-serial.c -F: include/linux/usb/serial.h USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER P: Gary Brubaker M: xavyer@ix.netcom.com L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/serial/empeg.c USB SERIAL KEYSPAN DRIVER P: Greg Kroah-Hartman @@ -5839,7 +4716,6 @@ M: greg@kroah.com L: linux-usb@vger.kernel.org W: http://www.kroah.com/linux/ S: Maintained -F: drivers/usb/serial/*keyspan* USB SERIAL WHITEHEAT DRIVER P: Support Department @@ -5847,25 +4723,21 @@ M: support@connecttech.com L: linux-usb@vger.kernel.org W: http://www.connecttech.com S: Supported -F: drivers/usb/serial/whiteheat* USB SMSC95XX ETHERNET DRIVER P: Steve Glendinning M: steve.glendinning@smsc.com L: netdev@vger.kernel.org S: Supported -F: drivers/net/usb/smsc95xx.* USB SN9C1xx DRIVER P: Luca Risolia M: luca.risolia@studio.unibo.it L: linux-usb@vger.kernel.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://www.linux-projects.org S: Maintained -F: Documentation/video4linux/sn9c102.txt -F: drivers/media/video/sn9c102/ USB SUBSYSTEM P: Greg Kroah-Hartman @@ -5874,18 +4746,12 @@ L: linux-usb@vger.kernel.org W: http://www.linux-usb.org T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ S: Supported -F: Documentation/usb/ -F: drivers/net/usb/ -F: drivers/usb/ -F: include/linux/usb.h -F: include/linux/usb/ USB UHCI DRIVER P: Alan Stern M: stern@rowland.harvard.edu L: linux-usb@vger.kernel.org S: Maintained -F: drivers/usb/host/uhci* USB "USBNET" DRIVER FRAMEWORK P: David Brownell @@ -5893,47 +4759,39 @@ M: dbrownell@users.sourceforge.net L: netdev@vger.kernel.org W: http://www.linux-usb.org/usbnet S: Maintained -F: drivers/net/usb/usbnet.c -F: include/linux/usb/usbnet.h USB VIDEO CLASS P: Laurent Pinchart M: laurent.pinchart@skynet.be L: linux-uvc-devel@lists.berlios.de (subscribers-only) L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://linux-uvc.berlios.de S: Maintained -F: drivers/media/video/uvc/ USB W996[87]CF DRIVER P: Luca Risolia M: luca.risolia@studio.unibo.it L: linux-usb@vger.kernel.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://www.linux-projects.org S: Maintained -F: Documentation/video4linux/w9968cf.txt -F: drivers/media/video/w996* USB WIRELESS RNDIS DRIVER (rndis_wlan) P: Jussi Kivilinna M: jussi.kivilinna@mbnet.fi L: linux-wireless@vger.kernel.org S: Maintained -F: drivers/net/wireless/rndis_wlan.c USB ZC0301 DRIVER P: Luca Risolia M: luca.risolia@studio.unibo.it L: linux-usb@vger.kernel.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://www.linux-projects.org S: Maintained -F: Documentation/video4linux/zc0301.txt -F: drivers/media/video/zc0301/ USB ZD1201 DRIVER P: Jeroen Vreeken @@ -5941,18 +4799,15 @@ M: pe1rxq@amsat.org L: linux-usb@vger.kernel.org W: http://linux-lc100020.sourceforge.net S: Maintained -F: drivers/net/wireless/zd1201.* USB ZR364XX DRIVER P: Antoine Jacquet M: royale@zerezo.com L: linux-usb@vger.kernel.org L: linux-media@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git W: http://royale.zerezo.com/zr364xx/ S: Maintained -F: Documentation/video4linux/zr364xx.txt -F: drivers/media/video/zr364xx.c USER-MODE LINUX (UML) P: Jeff Dike @@ -5961,10 +4816,6 @@ L: user-mode-linux-devel@lists.sourceforge.net L: user-mode-linux-user@lists.sourceforge.net W: http://user-mode-linux.sourceforge.net S: Maintained -F: Documentation/uml/ -F: arch/um/ -F: fs/hostfs/ -F: fs/hppfs/ USERSPACE I/O (UIO) P: Hans J. Koch @@ -5973,16 +4824,13 @@ P: Greg Kroah-Hartman M: gregkh@suse.de L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/DocBook/uio-howto.tmpl -F: drivers/uio/ -F: include/linux/uio*.h UTIL-LINUX-NG PACKAGE P: Karel Zak M: kzak@redhat.com L: util-linux-ng@vger.kernel.org W: http://kernel.org/~kzak/util-linux-ng/ -T: git git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git +T: git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git S: Maintained UVESAFB DRIVER @@ -5991,30 +4839,23 @@ M: spock@gentoo.org L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) W: http://dev.gentoo.org/~spock/projects/uvesafb/ S: Maintained -F: Documentation/fb/uvesafb.txt -F: drivers/video/uvesafb.* VFAT/FAT/MSDOS FILESYSTEM P: OGAWA Hirofumi M: hirofumi@mail.parknet.co.jp L: linux-kernel@vger.kernel.org S: Maintained -F: Documentation/filesystems/vfat.txt -F: fs/fat/ VIA RHINE NETWORK DRIVER P: Roger Luethi M: rl@hellgate.ch S: Maintained -F: drivers/net/via-rhine.c VIAPRO SMBUS DRIVER P: Jean Delvare M: khali@linux-fr.org L: linux-i2c@vger.kernel.org S: Maintained -F: Documentation/i2c/busses/i2c-viapro -F: drivers/i2c/busses/i2c-viapro.c VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER P: Joseph Chan @@ -6023,23 +4864,26 @@ P: Scott Fang M: ScottFang@viatech.com.cn L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers) S: Maintained -F: drivers/video/via/ VIA VELOCITY NETWORK DRIVER P: Francois Romieu M: romieu@fr.zoreil.com L: netdev@vger.kernel.org S: Maintained -F: drivers/net/via-velocity.* + +VIDEO FOR LINUX (V4L) +P: Mauro Carvalho Chehab +M: mchehab@infradead.org +L: linux-media@vger.kernel.org +W: http://linuxtv.org +T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/linux-2.6.git +S: Maintained VLAN (802.1Q) P: Patrick McHardy M: kaber@trash.net L: netdev@vger.kernel.org S: Maintained -F: drivers/net/macvlan.c -F: include/linux/if_*vlan.h -F: net/8021q/ VOLTAGE AND CURRENT REGULATOR FRAMEWORK P: Liam Girdwood @@ -6048,64 +4892,49 @@ P: Mark Brown M: broonie@opensource.wolfsonmicro.com W: http://opensource.wolfsonmicro.com/node/15 W: http://www.slimlogic.co.uk/?p=48 -T: git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6.git +T: git kernel.org/pub/scm/linux/kernel/git/lrg/voltage-2.6.git S: Supported -F: drivers/regulator/ -F: include/linux/regulator/ VT1211 HARDWARE MONITOR DRIVER P: Juerg Haefliger M: juergh@gmail.com L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/vt1211 -F: drivers/hwmon/vt1211.c VT8231 HARDWARE MONITOR DRIVER P: Roger Lucas M: vt8231@hiddenengine.co.uk L: lm-sensors@lm-sensors.org S: Maintained -F: drivers/hwmon/vt8231.c W1 DALLAS'S 1-WIRE BUS P: Evgeniy Polyakov M: johnpol@2ka.mipt.ru S: Maintained -F: Documentation/w1/ -F: drivers/w1/ W83791D HARDWARE MONITORING DRIVER P: Marc Hulsman M: m.hulsman@tudelft.nl L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/w83791d -F: drivers/hwmon/w83791d.c W83793 HARDWARE MONITORING DRIVER P: Rudolf Marek M: r.marek@assembler.cz L: lm-sensors@lm-sensors.org S: Maintained -F: Documentation/hwmon/w83793 -F: drivers/hwmon/w83793.c W83L51xD SD/MMC CARD INTERFACE DRIVER P: Pierre Ossman M: pierre@ossman.eu L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/mmc/host/wbsd.* WATCHDOG DEVICE DRIVERS P: Wim Van Sebroeck M: wim@iguana.be -T: git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git +T: git kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git S: Maintained -F: Documentation/watchdog/ -F: drivers/watchdog/ -F: include/linux/watchdog.h WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS P: Jean Tourrilhes @@ -6113,15 +4942,12 @@ M: jt@hpl.hp.com L: linux-wireless@vger.kernel.org W: http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/ S: Maintained -F: Documentation/networking/wavelan.txt -F: drivers/net/wireless/wavelan* WD7000 SCSI DRIVER P: Miroslav Zagorac M: zaga@fly.cc.fer.hr L: linux-scsi@vger.kernel.org S: Maintained -F: drivers/scsi/wd7000.c WIMAX STACK P: Inaky Perez-Gonzalez @@ -6135,14 +4961,11 @@ WIMEDIA LLC PROTOCOL (WLP) SUBSYSTEM P: David Vrabel M: david.vrabel@csr.com S: Maintained -F: include/linux/wlp.h -F: drivers/uwb/wlp/ WISTRON LAPTOP BUTTON DRIVER P: Miloslav Trmac M: mitr@volny.cz S: Maintained -F: drivers/input/misc/wistron_btns.c WL3501 WIRELESS PCMCIA CARD DRIVER P: Arnaldo Carvalho de Melo @@ -6150,7 +4973,6 @@ M: acme@ghostprotocols.net L: linux-wireless@vger.kernel.org W: http://oops.ghostprotocols.net:81/blog S: Maintained -F: drivers/net/wireless/wl3501* WM97XX TOUCHSCREEN DRIVERS P: Mark Brown @@ -6161,17 +4983,12 @@ L: linux-input@vger.kernel.org T: git git://opensource.wolfsonmicro.com/linux-2.6-touch W: http://opensource.wolfsonmicro.com/node/7 S: Supported -F: drivers/input/touchscreen/*wm97* -F: include/linux/wm97xx.h X.25 NETWORK LAYER P: Henner Eisen M: eis@baty.hanse.de L: linux-x25@vger.kernel.org S: Maintained -F: Documentation/networking/x25* -F: include/net/x25* -F: net/x25/ X86 ARCHITECTURE (32-BIT AND 64-BIT) P: Thomas Gleixner @@ -6182,10 +4999,8 @@ P: H. Peter Anvin M: hpa@zytor.com M: x86@kernel.org L: linux-kernel@vger.kernel.org -T: git git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git +T: git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git S: Maintained -F: Documentation/x86/ -F: arch/x86/ XEN HYPERVISOR INTERFACE P: Jeremy Fitzhardinge @@ -6195,11 +5010,6 @@ M: chrisw@sous-sol.org L: virtualization@lists.osdl.org L: xen-devel@lists.xensource.com S: Supported -F: arch/x86/xen/ -F: drivers/*/xen-*front.c -F: drivers/xen/ -F: arch/x86/include/asm/xen/ -F: include/xen/ XFS FILESYSTEM P: Silicon Graphics Inc @@ -6208,10 +5018,8 @@ M: felixb@sgi.com M: xfs-masters@oss.sgi.com L: xfs@oss.sgi.com W: http://oss.sgi.com/projects/xfs -T: git git://oss.sgi.com/xfs/xfs.git +T: git://oss.sgi.com/xfs/xfs.git S: Supported -F: Documentation/filesystems/xfs.txt -F: fs/xfs/ XILINX SYSTEMACE DRIVER P: Grant Likely @@ -6219,30 +5027,24 @@ M: grant.likely@secretlab.ca W: http://www.secretlab.ca/ L: linux-kernel@vger.kernel.org S: Maintained -F: drivers/block/xsysace.c XILINX UARTLITE SERIAL DRIVER P: Peter Korsgaard M: jacmet@sunsite.dk L: linux-serial@vger.kernel.org S: Maintained -F: drivers/serial/uartlite.c YAM DRIVER FOR AX.25 P: Jean-Paul Roubelat M: jpr@f6fbb.org L: linux-hams@vger.kernel.org S: Maintained -F: drivers/net/hamradio/yam* -F: include/linux/yam.h YEALINK PHONE DRIVER P: Henk Vergonet M: Henk.Vergonet@gmail.com L: usbb2k-api-dev@nongnu.org S: Maintained -F: Documentation/input/yealink.txt -F: drivers/input/misc/yealink.* Z8530 DRIVER FOR AX.25 P: Joerg Reuter @@ -6251,9 +5053,6 @@ W: http://yaina.de/jreuter/ W: http://www.qsl.net/dl1bke/ L: linux-hams@vger.kernel.org S: Maintained -F: Documentation/networking/z8530drv.txt -F: drivers/net/hamradio/*scc.c -F: drivers/net/hamradio/z8530.h ZD1211RW WIRELESS DRIVER P: Daniel Drake @@ -6264,7 +5063,6 @@ W: http://zd1211.ath.cx/wiki/DriverRewrite L: linux-wireless@vger.kernel.org L: zd1211-devs@lists.sourceforge.net (subscribers-only) S: Maintained -F: drivers/net/wireless/zd1211rw/ ZR36067 VIDEO FOR LINUX DRIVER L: mjpeg-users@lists.sourceforge.net @@ -6272,15 +5070,12 @@ L: linux-media@vger.kernel.org W: http://mjpeg.sourceforge.net/driver-zoran/ T: Mercurial http://linuxtv.org/hg/v4l-dvb S: Odd Fixes -F: drivers/media/video/zoran/ ZS DECSTATION Z85C30 SERIAL DRIVER P: Maciej W. Rozycki M: macro@linux-mips.org S: Maintained -F: drivers/serial/zs.* THE REST P: Linus Torvalds -T: git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git S: Buried alive in reporters diff --git a/trunk/Makefile b/trunk/Makefile index 4f7e3ccde05b..e5ad5fd96177 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -169,7 +169,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ -e s/arm.*/arm/ -e s/sa110/arm/ \ -e s/s390x/s390/ -e s/parisc64/parisc/ \ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \ - -e s/sh[234].*/sh/ ) + -e s/sh.*/sh/ ) # Cross compiling and selecting different set of gcc/bin-utils # --------------------------------------------------------------------------- @@ -210,11 +210,6 @@ ifeq ($(ARCH),sparc64) SRCARCH := sparc endif -# Additional ARCH settings for sh -ifeq ($(ARCH),sh64) - SRCARCH := sh -endif - # Where to locate arch specific headers hdr-arch := $(SRCARCH) @@ -572,7 +567,7 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) # disable pointer signed / unsigned warnings in gcc 4.0 KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,) -# disable invalid "can't wrap" optimizations for signed / pointers +# disable invalid "can't wrap" optimzations for signed / pointers KBUILD_CFLAGS += $(call cc-option,-fwrapv) # revert to pre-gcc-4.4 behaviour of .eh_frame @@ -602,10 +597,6 @@ LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID) LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID) -ifeq ($(CONFIG_STRIP_ASM_SYMS),y) -LDFLAGS_vmlinux += -X -endif - # Default kernel image to build when no specific target is given. # KBUILD_IMAGE may be overruled on the command line or # set in the environment @@ -1596,5 +1587,5 @@ PHONY += FORCE FORCE: # Declare the contents of the .PHONY variable as phony. We keep that -# information in a variable so we can use it in if_changed and friends. +# information in a variable se we can use it in if_changed and friends. .PHONY: $(PHONY) diff --git a/trunk/arch/Kconfig b/trunk/arch/Kconfig index 78a35e9dc104..dc81b34c5d82 100644 --- a/trunk/arch/Kconfig +++ b/trunk/arch/Kconfig @@ -109,6 +109,3 @@ config HAVE_CLK config HAVE_DMA_API_DEBUG bool - -config HAVE_DEFAULT_NO_SPIN_MUTEXES - bool diff --git a/trunk/arch/arm/mach-omap2/usb-musb.c b/trunk/arch/arm/mach-omap2/usb-musb.c index 34a56a136efd..fc74e913c415 100644 --- a/trunk/arch/arm/mach-omap2/usb-musb.c +++ b/trunk/arch/arm/mach-omap2/usb-musb.c @@ -131,14 +131,14 @@ static struct musb_hdrc_platform_data musb_plat = { .power = 50, /* up to 100 mA */ }; -static u64 musb_dmamask = DMA_BIT_MASK(32); +static u64 musb_dmamask = DMA_32BIT_MASK; static struct platform_device musb_device = { .name = "musb_hdrc", .id = -1, .dev = { .dma_mask = &musb_dmamask, - .coherent_dma_mask = DMA_BIT_MASK(32), + .coherent_dma_mask = DMA_32BIT_MASK, .platform_data = &musb_plat, }, .num_resources = ARRAY_SIZE(musb_resources), @@ -146,14 +146,14 @@ static struct platform_device musb_device = { }; #ifdef CONFIG_NOP_USB_XCEIV -static u64 nop_xceiv_dmamask = DMA_BIT_MASK(32); +static u64 nop_xceiv_dmamask = DMA_32BIT_MASK; static struct platform_device nop_xceiv_device = { .name = "nop_usb_xceiv", .id = -1, .dev = { .dma_mask = &nop_xceiv_dmamask, - .coherent_dma_mask = DMA_BIT_MASK(32), + .coherent_dma_mask = DMA_32BIT_MASK, .platform_data = NULL, }, }; diff --git a/trunk/arch/ia64/kernel/pci-swiotlb.c b/trunk/arch/ia64/kernel/pci-swiotlb.c index 285aae8431c6..573f02c39a00 100644 --- a/trunk/arch/ia64/kernel/pci-swiotlb.c +++ b/trunk/arch/ia64/kernel/pci-swiotlb.c @@ -16,7 +16,7 @@ EXPORT_SYMBOL(swiotlb); static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp) { - if (dev->coherent_dma_mask != DMA_BIT_MASK(64)) + if (dev->coherent_dma_mask != DMA_64BIT_MASK) gfp |= GFP_DMA; return swiotlb_alloc_coherent(dev, size, dma_handle, gfp); } diff --git a/trunk/arch/microblaze/Kconfig b/trunk/arch/microblaze/Kconfig deleted file mode 100644 index 8cc312b5d4dc..000000000000 --- a/trunk/arch/microblaze/Kconfig +++ /dev/null @@ -1,141 +0,0 @@ -# For a description of the syntax of this configuration file, -# see Documentation/kbuild/kconfig-language.txt. - -mainmenu "Linux/Microblaze Kernel Configuration" - -config MICROBLAZE - def_bool y - select HAVE_LMB - -config SWAP - def_bool n - -config RWSEM_GENERIC_SPINLOCK - def_bool y - -config RWSEM_XCHGADD_ALGORITHM - bool - -config ARCH_HAS_ILOG2_U32 - def_bool n - -config ARCH_HAS_ILOG2_U64 - def_bool n - -config GENERIC_FIND_NEXT_BIT - def_bool y - -config GENERIC_HWEIGHT - def_bool y - -config GENERIC_HARDIRQS - def_bool y - -config GENERIC_IRQ_PROBE - def_bool y - -config GENERIC_CALIBRATE_DELAY - def_bool y - -config GENERIC_TIME - def_bool y - -config GENERIC_TIME_VSYSCALL - def_bool n - -config GENERIC_CLOCKEVENTS - def_bool y - -config GENERIC_HARDIRQS_NO__DO_IRQ - def_bool y - -config PCI - depends on !MMU - def_bool n - -config NO_DMA - depends on !MMU - def_bool n - -source "init/Kconfig" - -source "kernel/Kconfig.freezer" - -source "arch/microblaze/platform/Kconfig.platform" - -menu "Processor type and features" - -source kernel/time/Kconfig - -source "kernel/Kconfig.preempt" - -source "kernel/Kconfig.hz" - -config MMU - def_bool n - -config NO_MMU - bool - depends on !MMU - default y - -comment "Boot options" - -config CMDLINE_BOOL - bool "Default bootloader kernel arguments" - -config CMDLINE - string "Default kernel command string" - depends on CMDLINE_BOOL - default "console=ttyUL0,115200" - help - On some architectures there is currently no way for the boot loader - to pass arguments to the kernel. For these architectures, you should - supply some command-line options at build time by entering them - here. - -config CMDLINE_FORCE - bool "Force default kernel command string" - depends on CMDLINE_BOOL - default n - help - Set this to have arguments from the default kernel command string - override those passed by the boot loader. - -config OF - def_bool y - -config OF_DEVICE - def_bool y - -config PROC_DEVICETREE - bool "Support for device tree in /proc" - depends on PROC_FS - help - This option adds a device-tree directory under /proc which contains - an image of the device tree that the kernel copies from Open - Firmware or other boot firmware. If unsure, say Y here. - -endmenu - -source "mm/Kconfig" - -menu "Exectuable file formats" - -source "fs/Kconfig.binfmt" - -endmenu - -source "net/Kconfig" - -source "drivers/Kconfig" - -source "fs/Kconfig" - -source "arch/microblaze/Kconfig.debug" - -source "security/Kconfig" - -source "crypto/Kconfig" - -source "lib/Kconfig" diff --git a/trunk/arch/microblaze/Kconfig.debug b/trunk/arch/microblaze/Kconfig.debug deleted file mode 100644 index 242cd35bdb4b..000000000000 --- a/trunk/arch/microblaze/Kconfig.debug +++ /dev/null @@ -1,26 +0,0 @@ -# For a description of the syntax of this configuration file, -# see Documentation/kbuild/kconfig-language.txt. - -menu "Kernel hacking" - -source "lib/Kconfig.debug" - -config EARLY_PRINTK - bool "Early printk function for kernel" - default n - help - This option turns on/off early printk messages to console. - First Uartlite node is taken. - -config HEART_BEAT - bool "Heart beat function for kernel" - default n - help - This option turns on/off heart beat kernel functionality. - First GPIO node is taken. - -config DEBUG_BOOTMEM - depends on DEBUG_KERNEL - bool "Debug BOOTMEM initialization" - -endmenu diff --git a/trunk/arch/microblaze/Makefile b/trunk/arch/microblaze/Makefile deleted file mode 100644 index 0dcbb9832974..000000000000 --- a/trunk/arch/microblaze/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -UTS_SYSNAME = -DUTS_SYSNAME=\"uClinux\" - -# What CPU vesion are we building for, and crack it open -# as major.minor.rev -CPU_VER=$(subst ",,$(CONFIG_XILINX_MICROBLAZE0_HW_VER) ) -CPU_MAJOR=$(shell echo $(CPU_VER) | cut -d '.' -f 1) -CPU_MINOR=$(shell echo $(CPU_VER) | cut -d '.' -f 2) -CPU_REV=$(shell echo $(CPU_VER) | cut -d '.' -f 3) - -export CPU_VER CPU_MAJOR CPU_MINOR CPU_REV - -# Use cpu-related CONFIG_ vars to set compile options. - -# Work out HW multipler support. This is icky. -# 1. Spartan2 has no HW multiplers. -# 2. MicroBlaze v3.x always uses them, except in Spartan 2 -# 3. All other FPGa/CPU ver combos, we can trust the CONFIG_ settings -ifeq (,$(findstring spartan2,$(CONFIG_XILINX_MICROBLAZE0_FAMILY))) - ifeq ($(CPU_MAJOR),3) - CPUFLAGS-1 += -mno-xl-soft-mul - else - # USE_HW_MUL can be 0, 1, or 2, defining a heirarchy of HW Mul support. - CPUFLAGS-$(subst 1,,$(CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL)) += -mxl-multiply-high - CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL) += -mno-xl-soft-mul - endif -endif -CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_DIV) += -mno-xl-soft-div -CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_BARREL) += -mxl-barrel-shift -CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP) += -mxl-pattern-compare - -CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER)) - -# The various CONFIG_XILINX cpu features options are integers 0/1/2... -# rather than bools y/n -CFLAGS += $(CPUFLAGS-1) -CFLAGS += $(CPUFLAGS-2) - -# r31 holds current when in kernel mode -CFLAGS += -ffixed-r31 - -LDFLAGS_BLOB := --format binary --oformat elf32-microblaze - -LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) - -head-y := arch/microblaze/kernel/head.o -libs-y += arch/microblaze/lib/ $(LIBGCC) -core-y += arch/microblaze/kernel/ arch/microblaze/mm/ \ - arch/microblaze/platform/ - -boot := arch/$(ARCH)/boot - -# defines filename extension depending memory management type -ifeq ($(CONFIG_MMU),) -MMUEXT := -nommu -endif -export MMUEXT - -all: linux.bin - -archclean: - $(Q)$(MAKE) $(clean)=$(boot) - -linux.bin linux.bin.gz: vmlinux - $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ - -define archhelp - echo '* linux.bin - Create raw binary' - echo ' linux.bin.gz - Create compressed raw binary' -endef diff --git a/trunk/arch/microblaze/boot/Makefile b/trunk/arch/microblaze/boot/Makefile deleted file mode 100644 index 844edf406d34..000000000000 --- a/trunk/arch/microblaze/boot/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# -# arch/microblaze/boot/Makefile -# - -targets := linux.bin linux.bin.gz - -OBJCOPYFLAGS_linux.bin := -O binary - -$(obj)/linux.bin: vmlinux FORCE - $(call if_changed,objcopy) - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' - -$(obj)/linux.bin.gz: $(obj)/linux.bin FORCE - $(call if_changed,gzip) - @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' - -clean-kernel += linux.bin linux.bin.gz diff --git a/trunk/arch/microblaze/configs/nommu_defconfig b/trunk/arch/microblaze/configs/nommu_defconfig deleted file mode 100644 index beb7ecd72793..000000000000 --- a/trunk/arch/microblaze/configs/nommu_defconfig +++ /dev/null @@ -1,804 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.29 -# Tue Mar 24 10:23:20 2009 -# -CONFIG_MICROBLAZE=y -# CONFIG_SWAP is not set -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_FIND_NEXT_BIT=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_GENERIC_TIME=y -# CONFIG_GENERIC_TIME_VSYSCALL is not set -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -# CONFIG_PCI is not set -# CONFIG_NO_DMA is not set -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_POSIX_MQUEUE=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -# CONFIG_TASKSTATS is not set -# CONFIG_AUDIT is not set - -# -# RCU Subsystem -# -CONFIG_CLASSIC_RCU=y -# CONFIG_TREE_RCU is not set -# CONFIG_PREEMPT_RCU is not set -# CONFIG_TREE_RCU_TRACE is not set -# CONFIG_PREEMPT_RCU_TRACE is not set -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=17 -# CONFIG_GROUP_SCHED is not set -# CONFIG_CGROUPS is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y -# CONFIG_RELAY is not set -# CONFIG_NAMESPACES is not set -# CONFIG_BLK_DEV_INITRD is not set -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_SYSCTL=y -CONFIG_ANON_INODES=y -CONFIG_EMBEDDED=y -CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -CONFIG_KALLSYMS_ALL=y -CONFIG_KALLSYMS_EXTRA_PASS=y -# CONFIG_HOTPLUG is not set -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -# CONFIG_BASE_FULL is not set -CONFIG_FUTEX=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_AIO=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_COMPAT_BRK=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -# CONFIG_PROFILING is not set -# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set -CONFIG_SLABINFO=y -CONFIG_RT_MUTEXES=y -CONFIG_BASE_SMALL=1 -CONFIG_MODULES=y -# CONFIG_MODULE_FORCE_LOAD is not set -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_BLOCK=y -# CONFIG_LBD is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_BLK_DEV_BSG is not set -# CONFIG_BLK_DEV_INTEGRITY is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=y -# CONFIG_DEFAULT_AS is not set -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="cfq" -# CONFIG_FREEZER is not set - -# -# Platform options -# -CONFIG_PLATFORM_GENERIC=y -# CONFIG_SELFMOD is not set -# CONFIG_OPT_LIB_FUNCTION is not set -# CONFIG_ALLOW_EDIT_AUTO is not set -CONFIG_KERNEL_BASE_ADDR=0x90000000 -CONFIG_XILINX_MICROBLAZE0_FAMILY="virtex5" -CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR=1 -CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR=1 -CONFIG_XILINX_MICROBLAZE0_USE_BARREL=1 -CONFIG_XILINX_MICROBLAZE0_USE_DIV=1 -CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL=2 -CONFIG_XILINX_MICROBLAZE0_USE_FPU=2 -CONFIG_XILINX_MICROBLAZE0_HW_VER="7.10.d" - -# -# Processor type and features -# -CONFIG_TICK_ONESHOT=y -# CONFIG_NO_HZ is not set -CONFIG_HIGH_RES_TIMERS=y -CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -CONFIG_PREEMPT_NONE=y -# CONFIG_PREEMPT_VOLUNTARY is not set -# CONFIG_PREEMPT is not set -CONFIG_HZ_100=y -# CONFIG_HZ_250 is not set -# CONFIG_HZ_300 is not set -# CONFIG_HZ_1000 is not set -CONFIG_HZ=100 -CONFIG_SCHED_HRTICK=y -# CONFIG_MMU is not set -CONFIG_NO_MMU=y - -# -# Boot options -# -CONFIG_CMDLINE_BOOL=y -CONFIG_CMDLINE="console=ttyUL0,115200" -# CONFIG_CMDLINE_FORCE is not set -CONFIG_OF=y -CONFIG_OF_DEVICE=y -CONFIG_PROC_DEVICETREE=y -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -CONFIG_PAGEFLAGS_EXTENDED=y -CONFIG_SPLIT_PTLOCK_CPUS=4 -# CONFIG_PHYS_ADDR_T_64BIT is not set -CONFIG_ZONE_DMA_FLAG=0 -CONFIG_VIRT_TO_BUS=y - -# -# Exectuable file formats -# -CONFIG_BINFMT_FLAT=y -# CONFIG_BINFMT_ZFLAT is not set -# CONFIG_BINFMT_SHARED_FLAT is not set -# CONFIG_HAVE_AOUT is not set -# CONFIG_BINFMT_MISC is not set -CONFIG_NET=y - -# -# Networking options -# -CONFIG_COMPAT_NET_DEV_OPS=y -CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set -CONFIG_UNIX=y -CONFIG_XFRM=y -# CONFIG_XFRM_USER is not set -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -# CONFIG_XFRM_STATISTICS is not set -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_XFRM_TUNNEL is not set -# CONFIG_INET_TUNNEL is not set -CONFIG_INET_XFRM_MODE_TRANSPORT=y -CONFIG_INET_XFRM_MODE_TUNNEL=y -CONFIG_INET_XFRM_MODE_BEET=y -# CONFIG_INET_LRO is not set -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_MD5SIG is not set -# CONFIG_IPV6 is not set -# CONFIG_NETWORK_SECMARK is not set -# CONFIG_NETFILTER is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_NET_DSA is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set -# CONFIG_NET_SCHED is not set -# CONFIG_DCB is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_CAN is not set -# CONFIG_IRDA is not set -# CONFIG_BT is not set -# CONFIG_AF_RXRPC is not set -# CONFIG_PHONET is not set -CONFIG_WIRELESS=y -# CONFIG_CFG80211 is not set -CONFIG_WIRELESS_OLD_REGULATORY=y -# CONFIG_WIRELESS_EXT is not set -# CONFIG_LIB80211 is not set -# CONFIG_MAC80211 is not set -# CONFIG_WIMAX is not set -# CONFIG_RFKILL is not set -# CONFIG_NET_9P is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -# CONFIG_PREVENT_FIRMWARE_BUILD is not set -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_SYS_HYPERVISOR is not set -# CONFIG_CONNECTOR is not set -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=y -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_TESTS is not set -# CONFIG_MTD_REDBOOT_PARTS is not set -CONFIG_MTD_CMDLINE_PARTS=y -# CONFIG_MTD_AR7_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLKDEVS=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set -# CONFIG_MTD_OOPS is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -# CONFIG_MTD_CFI_ADV_OPTIONS is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -CONFIG_MTD_CFI_INTELEXT=y -CONFIG_MTD_CFI_AMDSTD=y -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -CONFIG_MTD_RAM=y -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set - -# -# Mapping drivers for chip access -# -# CONFIG_MTD_COMPLEX_MAPPINGS is not set -# CONFIG_MTD_PHYSMAP is not set -CONFIG_MTD_UCLINUX=y -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set -# CONFIG_MTD_NAND is not set -# CONFIG_MTD_ONENAND is not set - -# -# LPDDR flash memory drivers -# -# CONFIG_MTD_LPDDR is not set - -# -# UBI - Unsorted block images -# -# CONFIG_MTD_UBI is not set -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_COW_COMMON is not set -# CONFIG_BLK_DEV_LOOP is not set -CONFIG_BLK_DEV_NBD=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_XIP is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -CONFIG_MISC_DEVICES=y -# CONFIG_ENCLOSURE_SERVICES is not set -# CONFIG_C2PORT is not set - -# -# EEPROM support -# -# CONFIG_EEPROM_93CX6 is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set -# CONFIG_SCSI_DMA is not set -# CONFIG_SCSI_NETLINK is not set -# CONFIG_ATA is not set -# CONFIG_MD is not set -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_MACVLAN is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set -# CONFIG_VETH is not set -# CONFIG_PHYLIB is not set -CONFIG_NET_ETHERNET=y -# CONFIG_MII is not set -# CONFIG_DNET is not set -# CONFIG_IBM_NEW_EMAC_ZMII is not set -# CONFIG_IBM_NEW_EMAC_RGMII is not set -# CONFIG_IBM_NEW_EMAC_TAH is not set -# CONFIG_IBM_NEW_EMAC_EMAC4 is not set -# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set -# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set -# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set -# CONFIG_B44 is not set -CONFIG_NETDEV_1000=y -CONFIG_NETDEV_10000=y - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -# CONFIG_WLAN_80211 is not set -# CONFIG_IWLWIFI_LEDS is not set - -# -# Enable WiMAX (Networking options) to see the WiMAX drivers -# -# CONFIG_WAN is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set -# CONFIG_ISDN is not set -# CONFIG_PHONE is not set - -# -# Input device support -# -# CONFIG_INPUT is not set - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -CONFIG_DEVKMEM=y -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_UARTLITE=y -CONFIG_SERIAL_UARTLITE_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=256 -# CONFIG_IPMI_HANDLER is not set -CONFIG_HW_RANDOM=y -# CONFIG_RTC is not set -# CONFIG_GEN_RTC is not set -# CONFIG_R3964 is not set -# CONFIG_RAW_DRIVER is not set -# CONFIG_TCG_TPM is not set -# CONFIG_I2C is not set -# CONFIG_SPI is not set -# CONFIG_W1 is not set -# CONFIG_POWER_SUPPLY is not set -# CONFIG_HWMON is not set -# CONFIG_THERMAL is not set -# CONFIG_THERMAL_HWMON is not set -# CONFIG_WATCHDOG is not set -CONFIG_SSB_POSSIBLE=y - -# -# Sonics Silicon Backplane -# -# CONFIG_SSB is not set - -# -# Multifunction device drivers -# -# CONFIG_MFD_CORE is not set -# CONFIG_MFD_SM501 is not set -# CONFIG_HTC_PASIC3 is not set -# CONFIG_MFD_TMIO is not set -# CONFIG_REGULATOR is not set - -# -# Multimedia devices -# - -# -# Multimedia core support -# -# CONFIG_VIDEO_DEV is not set -# CONFIG_DVB_CORE is not set -# CONFIG_VIDEO_MEDIA is not set - -# -# Multimedia drivers -# -CONFIG_DAB=y - -# -# Graphics support -# -# CONFIG_VGASTATE is not set -CONFIG_VIDEO_OUTPUT_CONTROL=y -# CONFIG_FB is not set -# CONFIG_BACKLIGHT_LCD_SUPPORT is not set - -# -# Display device support -# -# CONFIG_DISPLAY_SUPPORT is not set -# CONFIG_SOUND is not set -CONFIG_USB_SUPPORT=y -# CONFIG_USB_ARCH_HAS_HCD is not set -# CONFIG_USB_ARCH_HAS_OHCI is not set -# CONFIG_USB_ARCH_HAS_EHCI is not set -# CONFIG_USB_OTG_WHITELIST is not set -# CONFIG_USB_OTG_BLACKLIST_HUB is not set - -# -# Enable Host or Gadget support to see Inventra options -# - -# -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; -# -# CONFIG_USB_GADGET is not set - -# -# OTG and related infrastructure -# -# CONFIG_MMC is not set -# CONFIG_MEMSTICK is not set -# CONFIG_NEW_LEDS is not set -# CONFIG_ACCESSIBILITY is not set -# CONFIG_RTC_CLASS is not set -# CONFIG_DMADEVICES is not set -# CONFIG_UIO is not set -# CONFIG_STAGING is not set - -# -# File systems -# -CONFIG_EXT2_FS=y -# CONFIG_EXT2_FS_XATTR is not set -# CONFIG_EXT3_FS is not set -# CONFIG_EXT4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -CONFIG_FS_POSIX_ACL=y -CONFIG_FILE_LOCKING=y -# CONFIG_XFS_FS is not set -# CONFIG_OCFS2_FS is not set -# CONFIG_BTRFS_FS is not set -# CONFIG_DNOTIFY is not set -# CONFIG_INOTIFY is not set -# CONFIG_QUOTA is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -# CONFIG_MSDOS_FS is not set -# CONFIG_VFAT_FS is not set -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -# CONFIG_TMPFS is not set -# CONFIG_HUGETLB_PAGE is not set -# CONFIG_CONFIGFS_FS is not set -CONFIG_MISC_FILESYSTEMS=y -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS2_FS is not set -CONFIG_CRAMFS=y -# CONFIG_SQUASHFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_OMFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -CONFIG_ROMFS_FS=y -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -# CONFIG_NFS_V4 is not set -# CONFIG_NFSD is not set -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_NFS_ACL_SUPPORT=y -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -# CONFIG_SUNRPC_REGISTER_V4 is not set -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_NLS is not set -# CONFIG_DLM is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_WARN_DEPRECATED=y -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_FRAME_WARN=1024 -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_UNUSED_SYMBOLS=y -CONFIG_DEBUG_FS=y -# CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_SHIRQ=y -CONFIG_DETECT_SOFTLOCKUP=y -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y -CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1 -CONFIG_SCHED_DEBUG=y -CONFIG_SCHEDSTATS=y -CONFIG_TIMER_STATS=y -CONFIG_DEBUG_OBJECTS=y -CONFIG_DEBUG_OBJECTS_SELFTEST=y -CONFIG_DEBUG_OBJECTS_FREE=y -CONFIG_DEBUG_OBJECTS_TIMERS=y -CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 -# CONFIG_DEBUG_SLAB is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_RT_MUTEX_TESTER is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_INFO=y -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_NOMMU_REGIONS is not set -# CONFIG_DEBUG_WRITECOUNT is not set -# CONFIG_DEBUG_MEMORY_INIT is not set -CONFIG_DEBUG_LIST=y -CONFIG_DEBUG_SG=y -# CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_BOOT_PRINTK_DELAY is not set -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_RCU_CPU_STALL_DETECTOR is not set -# CONFIG_BACKTRACE_SELF_TEST is not set -# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set -# CONFIG_FAULT_INJECTION is not set -CONFIG_SYSCTL_SYSCALL_CHECK=y - -# -# Tracers -# -# CONFIG_SCHED_TRACER is not set -# CONFIG_CONTEXT_SWITCH_TRACER is not set -# CONFIG_BOOT_TRACER is not set -# CONFIG_TRACE_BRANCH_PROFILING is not set -# CONFIG_DYNAMIC_PRINTK_DEBUG is not set -# CONFIG_SAMPLES is not set -CONFIG_EARLY_PRINTK=y -CONFIG_HEART_BEAT=y -# CONFIG_DEBUG_BOOTMEM is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set -# CONFIG_SECURITYFS is not set -# CONFIG_SECURITY_FILE_CAPABILITIES is not set -CONFIG_CRYPTO=y - -# -# Crypto core or helper -# -# CONFIG_CRYPTO_FIPS is not set -# CONFIG_CRYPTO_MANAGER is not set -# CONFIG_CRYPTO_MANAGER2 is not set -# CONFIG_CRYPTO_GF128MUL is not set -# CONFIG_CRYPTO_NULL is not set -# CONFIG_CRYPTO_CRYPTD is not set -# CONFIG_CRYPTO_AUTHENC is not set -# CONFIG_CRYPTO_TEST is not set - -# -# Authenticated Encryption with Associated Data -# -# CONFIG_CRYPTO_CCM is not set -# CONFIG_CRYPTO_GCM is not set -# CONFIG_CRYPTO_SEQIV is not set - -# -# Block modes -# -# CONFIG_CRYPTO_CBC is not set -# CONFIG_CRYPTO_CTR is not set -# CONFIG_CRYPTO_CTS is not set -# CONFIG_CRYPTO_ECB is not set -# CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_PCBC is not set -# CONFIG_CRYPTO_XTS is not set - -# -# Hash modes -# -# CONFIG_CRYPTO_HMAC is not set -# CONFIG_CRYPTO_XCBC is not set - -# -# Digest -# -# CONFIG_CRYPTO_CRC32C is not set -# CONFIG_CRYPTO_MD4 is not set -# CONFIG_CRYPTO_MD5 is not set -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_RMD128 is not set -# CONFIG_CRYPTO_RMD160 is not set -# CONFIG_CRYPTO_RMD256 is not set -# CONFIG_CRYPTO_RMD320 is not set -# CONFIG_CRYPTO_SHA1 is not set -# CONFIG_CRYPTO_SHA256 is not set -# CONFIG_CRYPTO_SHA512 is not set -# CONFIG_CRYPTO_TGR192 is not set -# CONFIG_CRYPTO_WP512 is not set - -# -# Ciphers -# -# CONFIG_CRYPTO_AES is not set -# CONFIG_CRYPTO_ANUBIS is not set -# CONFIG_CRYPTO_ARC4 is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -# CONFIG_CRYPTO_DES is not set -# CONFIG_CRYPTO_FCRYPT is not set -# CONFIG_CRYPTO_KHAZAD is not set -# CONFIG_CRYPTO_SALSA20 is not set -# CONFIG_CRYPTO_SEED is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_TEA is not set -# CONFIG_CRYPTO_TWOFISH is not set - -# -# Compression -# -# CONFIG_CRYPTO_DEFLATE is not set -# CONFIG_CRYPTO_LZO is not set - -# -# Random Number Generation -# -# CONFIG_CRYPTO_ANSI_CPRNG is not set -CONFIG_CRYPTO_HW=y - -# -# Library routines -# -CONFIG_GENERIC_FIND_LAST_BIT=y -# CONFIG_CRC_CCITT is not set -# CONFIG_CRC16 is not set -# CONFIG_CRC_T10DIF is not set -# CONFIG_CRC_ITU_T is not set -# CONFIG_CRC32 is not set -# CONFIG_CRC7 is not set -# CONFIG_LIBCRC32C is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y -CONFIG_HAVE_LMB=y diff --git a/trunk/arch/microblaze/include/asm/Kbuild b/trunk/arch/microblaze/include/asm/Kbuild deleted file mode 100644 index 31820dfef56b..000000000000 --- a/trunk/arch/microblaze/include/asm/Kbuild +++ /dev/null @@ -1,26 +0,0 @@ -include include/asm-generic/Kbuild.asm - -header-y += auxvec.h -header-y += errno.h -header-y += fcntl.h -header-y += ioctl.h -header-y += ioctls.h -header-y += ipcbuf.h -header-y += linkage.h -header-y += msgbuf.h -header-y += poll.h -header-y += resource.h -header-y += sembuf.h -header-y += shmbuf.h -header-y += sigcontext.h -header-y += siginfo.h -header-y += socket.h -header-y += sockios.h -header-y += statfs.h -header-y += stat.h -header-y += termbits.h -header-y += ucontext.h - -unifdef-y += cputable.h -unifdef-y += elf.h -unifdef-y += termios.h diff --git a/trunk/arch/microblaze/include/asm/atomic.h b/trunk/arch/microblaze/include/asm/atomic.h deleted file mode 100644 index a448d94ab721..000000000000 --- a/trunk/arch/microblaze/include/asm/atomic.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_ATOMIC_H -#define _ASM_MICROBLAZE_ATOMIC_H - -#include -#include /* likely */ -#include /* local_irq_XXX and friends */ - -#define ATOMIC_INIT(i) { (i) } -#define atomic_read(v) ((v)->counter) -#define atomic_set(v, i) (((v)->counter) = (i)) - -#define atomic_inc(v) (atomic_add_return(1, (v))) -#define atomic_dec(v) (atomic_sub_return(1, (v))) - -#define atomic_add(i, v) (atomic_add_return(i, (v))) -#define atomic_sub(i, v) (atomic_sub_return(i, (v))) - -#define atomic_inc_return(v) (atomic_add_return(1, (v))) -#define atomic_dec_return(v) (atomic_sub_return(1, (v))) - -#define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0) -#define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) - -#define atomic_inc_not_zero(v) (atomic_add_unless((v), 1, 0)) - -#define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0) - -static inline int atomic_cmpxchg(atomic_t *v, int old, int new) -{ - int ret; - unsigned long flags; - - local_irq_save(flags); - ret = v->counter; - if (likely(ret == old)) - v->counter = new; - local_irq_restore(flags); - - return ret; -} - -static inline int atomic_add_unless(atomic_t *v, int a, int u) -{ - int c, old; - - c = atomic_read(v); - while (c != u && (old = atomic_cmpxchg((v), c, c + a)) != c) - c = old; - return c != u; -} - -static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) -{ - unsigned long flags; - - local_irq_save(flags); - *addr &= ~mask; - local_irq_restore(flags); -} - -/** - * atomic_add_return - add and return - * @i: integer value to add - * @v: pointer of type atomic_t - * - * Atomically adds @i to @v and returns @i + @v - */ -static inline int atomic_add_return(int i, atomic_t *v) -{ - unsigned long flags; - int val; - - local_irq_save(flags); - val = v->counter; - v->counter = val += i; - local_irq_restore(flags); - - return val; -} - -static inline int atomic_sub_return(int i, atomic_t *v) -{ - return atomic_add_return(-i, v); -} - -/* - * Atomically test *v and decrement if it is greater than 0. - * The function returns the old value of *v minus 1. - */ -static inline int atomic_dec_if_positive(atomic_t *v) -{ - unsigned long flags; - int res; - - local_irq_save(flags); - res = v->counter - 1; - if (res >= 0) - v->counter = res; - local_irq_restore(flags); - - return res; -} - -#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) -#define atomic_xchg(v, new) (xchg(&((v)->counter), new)) - -/* Atomic operations are already serializing */ -#define smp_mb__before_atomic_dec() barrier() -#define smp_mb__after_atomic_dec() barrier() -#define smp_mb__before_atomic_inc() barrier() -#define smp_mb__after_atomic_inc() barrier() - -#include - -#endif /* _ASM_MICROBLAZE_ATOMIC_H */ diff --git a/trunk/arch/microblaze/include/asm/auxvec.h b/trunk/arch/microblaze/include/asm/auxvec.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/trunk/arch/microblaze/include/asm/auxvec.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/trunk/arch/microblaze/include/asm/bitops.h b/trunk/arch/microblaze/include/asm/bitops.h deleted file mode 100644 index d6df1fd4e1e8..000000000000 --- a/trunk/arch/microblaze/include/asm/bitops.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_BITOPS_H -#define _ASM_MICROBLAZE_BITOPS_H - -/* - * Copyright 1992, Linus Torvalds. - */ - -#include /* swab32 */ -#include /* save_flags */ - -/* - * clear_bit() doesn't provide any barrier for the compiler. - */ -#define smp_mb__before_clear_bit() barrier() -#define smp_mb__after_clear_bit() barrier() -#include -#include - -#endif /* _ASM_MICROBLAZE_BITOPS_H */ diff --git a/trunk/arch/microblaze/include/asm/bug.h b/trunk/arch/microblaze/include/asm/bug.h deleted file mode 100644 index 8eb2cdde11d7..000000000000 --- a/trunk/arch/microblaze/include/asm/bug.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_BUG_H -#define _ASM_MICROBLAZE_BUG_H - -#include -#include - -#endif /* _ASM_MICROBLAZE_BUG_H */ diff --git a/trunk/arch/microblaze/include/asm/bugs.h b/trunk/arch/microblaze/include/asm/bugs.h deleted file mode 100644 index f2c6593653fb..000000000000 --- a/trunk/arch/microblaze/include/asm/bugs.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_BUGS_H -#define _ASM_MICROBLAZE_BUGS_H - -static inline void check_bugs(void) -{ - /* nothing to do */ -} - -#endif /* _ASM_MICROBLAZE_BUGS_H */ diff --git a/trunk/arch/microblaze/include/asm/byteorder.h b/trunk/arch/microblaze/include/asm/byteorder.h deleted file mode 100644 index ce9c58732ffc..000000000000 --- a/trunk/arch/microblaze/include/asm/byteorder.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_MICROBLAZE_BYTEORDER_H -#define _ASM_MICROBLAZE_BYTEORDER_H - -#include - -#endif /* _ASM_MICROBLAZE_BYTEORDER_H */ diff --git a/trunk/arch/microblaze/include/asm/cache.h b/trunk/arch/microblaze/include/asm/cache.h deleted file mode 100644 index c4c64b43c074..000000000000 --- a/trunk/arch/microblaze/include/asm/cache.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Cache operations - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2003 John Williams - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_CACHE_H -#define _ASM_MICROBLAZE_CACHE_H - -#include - -#define L1_CACHE_SHIFT 2 -/* word-granular cache in microblaze */ -#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) - -#define SMP_CACHE_BYTES L1_CACHE_BYTES - -void _enable_icache(void); -void _disable_icache(void); -void _invalidate_icache(unsigned int addr); - -#define __enable_icache() _enable_icache() -#define __disable_icache() _disable_icache() -#define __invalidate_icache(addr) _invalidate_icache(addr) - -void _enable_dcache(void); -void _disable_dcache(void); -void _invalidate_dcache(unsigned int addr); - -#define __enable_dcache() _enable_dcache() -#define __disable_dcache() _disable_dcache() -#define __invalidate_dcache(addr) _invalidate_dcache(addr) - -/* FIXME - I don't think this is right */ -#ifdef CONFIG_XILINX_UNCACHED_SHADOW -#define UNCACHED_SHADOW_MASK (CONFIG_XILINX_ERAM_SIZE) -#endif - -#endif /* _ASM_MICROBLAZE_CACHE_H */ diff --git a/trunk/arch/microblaze/include/asm/cacheflush.h b/trunk/arch/microblaze/include/asm/cacheflush.h deleted file mode 100644 index 3300b785049b..000000000000 --- a/trunk/arch/microblaze/include/asm/cacheflush.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2007 PetaLogix - * Copyright (C) 2007 John Williams - * based on v850 version which was - * 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. - * - */ - -#ifndef _ASM_MICROBLAZE_CACHEFLUSH_H -#define _ASM_MICROBLAZE_CACHEFLUSH_H - -/* Somebody depends on this; sigh... */ -#include - -/* - * Cache handling functions. - * Microblaze has a write-through data cache, meaning that the data cache - * never needs to be flushed. The only flushing operations that are - * implemented are to invalidate the instruction cache. These are called - * after loading a user application into memory, we must invalidate the - * instruction cache to make sure we don't fetch old, bad code. - */ - -/* FIXME for LL-temac driver */ -#define invalidate_dcache_range(start, end) \ - __invalidate_dcache_range(start, end) - -#define flush_cache_all() __invalidate_cache_all() -#define flush_cache_mm(mm) do { } while (0) -#define flush_cache_range(vma, start, end) __invalidate_cache_all() -#define flush_cache_page(vma, vmaddr, pfn) do { } while (0) - -#define flush_dcache_range(start, end) __invalidate_dcache_range(start, end) -#define flush_dcache_page(page) do { } while (0) -#define flush_dcache_mmap_lock(mapping) do { } while (0) -#define flush_dcache_mmap_unlock(mapping) do { } while (0) - -#define flush_icache_range(start, len) __invalidate_icache_range(start, len) -#define flush_icache_page(vma, pg) do { } while (0) - -#define flush_cache_vmap(start, end) do { } while (0) -#define flush_cache_vunmap(start, end) do { } while (0) - -struct page; -struct mm_struct; -struct vm_area_struct; - -/* see arch/microblaze/kernel/cache.c */ -extern void __invalidate_icache_all(void); -extern void __invalidate_icache_range(unsigned long start, unsigned long end); -extern void __invalidate_icache_page(struct vm_area_struct *vma, - struct page *page); -extern void __invalidate_icache_user_range(struct vm_area_struct *vma, - struct page *page, - unsigned long adr, int len); -extern void __invalidate_cache_sigtramp(unsigned long addr); - -extern void __invalidate_dcache_all(void); -extern void __invalidate_dcache_range(unsigned long start, unsigned long end); -extern void __invalidate_dcache_page(struct vm_area_struct *vma, - struct page *page); -extern void __invalidate_dcache_user_range(struct vm_area_struct *vma, - struct page *page, - unsigned long adr, int len); - -extern inline void __invalidate_cache_all(void) -{ - __invalidate_icache_all(); - __invalidate_dcache_all(); -} - -#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ -do { memcpy((dst), (src), (len)); \ - flush_icache_range((unsigned) (dst), (unsigned) (dst) + (len)); \ -} while (0) - -#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ - memcpy((dst), (src), (len)) - -#endif /* _ASM_MICROBLAZE_CACHEFLUSH_H */ diff --git a/trunk/arch/microblaze/include/asm/checksum.h b/trunk/arch/microblaze/include/asm/checksum.h deleted file mode 100644 index 92b30762ce59..000000000000 --- a/trunk/arch/microblaze/include/asm/checksum.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_CHECKSUM_H -#define _ASM_MICROBLAZE_CHECKSUM_H - -#include - -/* - * computes the checksum of the TCP/UDP pseudo-header - * returns a 16-bit checksum, already complemented - */ -static inline __wsum -csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, - unsigned short proto, __wsum sum) -{ - __asm__("add %0, %0, %1\n\t" - "addc %0, %0, %2\n\t" - "addc %0, %0, %3\n\t" - "addc %0, %0, r0\n\t" - : "+&d" (sum) - : "d" (saddr), "d" (daddr), "d" (len + proto)); - - return sum; -} - -/* - * computes the checksum of a memory block at buff, length len, - * and adds in "sum" (32-bit) - * - * returns a 32-bit number suitable for feeding into itself - * or csum_tcpudp_magic - * - * this function must be called with even lengths, except - * for the last fragment, which may be odd - * - * it's best to have buff aligned on a 32-bit boundary - */ -extern __wsum csum_partial(const void *buff, int len, __wsum sum); - -/* - * the same as csum_partial, but copies from src while it - * checksums - * - * here even more important to align src and dst on a 32-bit (or even - * better 64-bit) boundary - */ -extern __wsum csum_partial_copy(const char *src, char *dst, int len, int sum); - -/* - * the same as csum_partial_copy, but copies from user space. - * - * here even more important to align src and dst on a 32-bit (or even - * better 64-bit) boundary - */ -extern __wsum csum_partial_copy_from_user(const char *src, char *dst, - int len, int sum, int *csum_err); - -#define csum_partial_copy_nocheck(src, dst, len, sum) \ - csum_partial_copy((src), (dst), (len), (sum)) - -/* - * This is a version of ip_compute_csum() optimized for IP headers, - * which always checksum on 4 octet boundaries. - * - */ -extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl); - -/* - * Fold a partial checksum - */ -static inline __sum16 csum_fold(unsigned int sum) -{ - sum = (sum & 0xffff) + (sum >> 16); - sum = (sum & 0xffff) + (sum >> 16); - return ~sum; -} - -static inline __sum16 -csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, - unsigned short proto, __wsum sum) -{ - return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum)); -} - -/* - * this routine is used for miscellaneous IP-like checksums, mainly - * in icmp.c - */ -extern __sum16 ip_compute_csum(const unsigned char *buff, int len); - -#endif /* _ASM_MICROBLAZE_CHECKSUM_H */ diff --git a/trunk/arch/microblaze/include/asm/clinkage.h b/trunk/arch/microblaze/include/asm/clinkage.h deleted file mode 100644 index 9e218435a55c..000000000000 --- a/trunk/arch/microblaze/include/asm/clinkage.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/cpuinfo.h b/trunk/arch/microblaze/include/asm/cpuinfo.h deleted file mode 100644 index 52f28f6dc4eb..000000000000 --- a/trunk/arch/microblaze/include/asm/cpuinfo.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Generic support for queying CPU info - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_CPUINFO_H -#define _ASM_MICROBLAZE_CPUINFO_H - -#include - -/* CPU Version and FPGA Family code conversion table type */ -struct cpu_ver_key { - const char *s; - const unsigned k; -}; - -extern const struct cpu_ver_key cpu_ver_lookup[]; - -struct family_string_key { - const char *s; - const unsigned k; -}; - -extern const struct family_string_key family_string_lookup[]; - -struct cpuinfo { - /* Core CPU configuration */ - u32 use_instr; - u32 use_mult; - u32 use_fpu; - u32 use_exc; - u32 ver_code; - u32 mmu; - - /* CPU caches */ - u32 use_icache; - u32 icache_tagbits; - u32 icache_write; - u32 icache_line; - u32 icache_size; - unsigned long icache_base; - unsigned long icache_high; - - u32 use_dcache; - u32 dcache_tagbits; - u32 dcache_write; - u32 dcache_line; - u32 dcache_size; - unsigned long dcache_base; - unsigned long dcache_high; - - /* Bus connections */ - u32 use_dopb; - u32 use_iopb; - u32 use_dlmb; - u32 use_ilmb; - u32 num_fsl; - - /* CPU interrupt line info */ - u32 irq_edge; - u32 irq_positive; - - u32 area_optimised; - - /* HW debug support */ - u32 hw_debug; - u32 num_pc_brk; - u32 num_rd_brk; - u32 num_wr_brk; - u32 cpu_clock_freq; /* store real freq of cpu */ - u32 freq_div_hz; /* store freq/HZ */ - - /* FPGA family */ - u32 fpga_family_code; - - /* User define */ - u32 pvr_user1; - u32 pvr_user2; -}; - -extern struct cpuinfo cpuinfo; - -/* fwd declarations of the various CPUinfo populators */ -void setup_cpuinfo(void); - -void set_cpuinfo_static(struct cpuinfo *ci, struct device_node *cpu); -void set_cpuinfo_pvr_full(struct cpuinfo *ci, struct device_node *cpu); - -static inline unsigned int fcpu(struct device_node *cpu, char *n) -{ - int *val; - return (val = (int *) of_get_property(cpu, n, NULL)) ? *val : 0; -} - -#endif /* _ASM_MICROBLAZE_CPUINFO_H */ diff --git a/trunk/arch/microblaze/include/asm/cputable.h b/trunk/arch/microblaze/include/asm/cputable.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/trunk/arch/microblaze/include/asm/cputable.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/trunk/arch/microblaze/include/asm/current.h b/trunk/arch/microblaze/include/asm/current.h deleted file mode 100644 index 8375ea991e26..000000000000 --- a/trunk/arch/microblaze/include/asm/current.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_CURRENT_H -#define _ASM_MICROBLAZE_CURRENT_H - -# ifndef __ASSEMBLY__ -/* - * Dedicate r31 to keeping the current task pointer - */ -register struct task_struct *current asm("r31"); - -# define get_current() current -# endif /* __ASSEMBLY__ */ - -#endif /* _ASM_MICROBLAZE_CURRENT_H */ diff --git a/trunk/arch/microblaze/include/asm/delay.h b/trunk/arch/microblaze/include/asm/delay.h deleted file mode 100644 index 05b7d39e4391..000000000000 --- a/trunk/arch/microblaze/include/asm/delay.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * include/asm-microblaze/delay.h - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2007 John Williams - * Copyright (C) 2006 Atmark Techno, Inc. - */ - -#ifndef _ASM_MICROBLAZE_DELAY_H -#define _ASM_MICROBLAZE_DELAY_H - -extern inline void __delay(unsigned long loops) -{ - asm volatile ("# __delay \n\t" \ - "1: addi %0, %0, -1\t\n" \ - "bneid %0, 1b \t\n" \ - "nop \t\n" - : "=r" (loops) - : "0" (loops)); -} - -/* - * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so - * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32. - * - * The mul instruction gives us loops = (a * b) / 2^32. - * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226 - * because this lets us support a wide range of HZ and - * loops_per_jiffy values without either a or b overflowing 2^32. - * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and - * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280 - * (which corresponds to ~3800 bogomips at HZ = 100). - * -- paulus - */ -#define __MAX_UDELAY (226050910UL/HZ) /* maximum udelay argument */ -#define __MAX_NDELAY (4294967295UL/HZ) /* maximum ndelay argument */ - -extern unsigned long loops_per_jiffy; - -extern inline void __udelay(unsigned int x) -{ - - unsigned long long tmp = - (unsigned long long)x * (unsigned long long)loops_per_jiffy \ - * 226LL; - unsigned loops = tmp >> 32; - -/* - __asm__("mulxuu %0,%1,%2" : "=r" (loops) : - "r" (x), "r" (loops_per_jiffy * 226)); -*/ - __delay(loops); -} - -extern void __bad_udelay(void); /* deliberately undefined */ -extern void __bad_ndelay(void); /* deliberately undefined */ - -#define udelay(n) (__builtin_constant_p(n) ? \ - ((n) > __MAX_UDELAY ? __bad_udelay() : __udelay((n) * (19 * HZ))) : \ - __udelay((n) * (19 * HZ))) - -#define ndelay(n) (__builtin_constant_p(n) ? \ - ((n) > __MAX_NDELAY ? __bad_ndelay() : __udelay((n) * HZ)) : \ - __udelay((n) * HZ)) - -#define muldiv(a, b, c) (((a)*(b))/(c)) - -#endif /* _ASM_MICROBLAZE_DELAY_H */ diff --git a/trunk/arch/microblaze/include/asm/device.h b/trunk/arch/microblaze/include/asm/device.h deleted file mode 100644 index c042830793ed..000000000000 --- a/trunk/arch/microblaze/include/asm/device.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Arch specific extensions to struct device - * - * This file is subject to the terms and conditions of the GNU General Public - * License v2. See the file "COPYING" in the main directory of this archive - * for more details. - */ - -#ifndef _ASM_MICROBLAZE_DEVICE_H -#define _ASM_MICROBLAZE_DEVICE_H - -struct device_node; - -struct dev_archdata { - /* Optional pointer to an OF device node */ - struct device_node *of_node; -}; - -#endif /* _ASM_MICROBLAZE_DEVICE_H */ - - diff --git a/trunk/arch/microblaze/include/asm/div64.h b/trunk/arch/microblaze/include/asm/div64.h deleted file mode 100644 index 6cd978cefb28..000000000000 --- a/trunk/arch/microblaze/include/asm/div64.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/dma-mapping.h b/trunk/arch/microblaze/include/asm/dma-mapping.h deleted file mode 100644 index 17336252a9b8..000000000000 --- a/trunk/arch/microblaze/include/asm/dma-mapping.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_DMA_MAPPING_H -#define _ASM_MICROBLAZE_DMA_MAPPING_H - -#include -#include -#include - -struct scatterlist; - -#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) -#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) - -/* FIXME */ -static inline int -dma_supported(struct device *dev, u64 mask) -{ - return 1; -} - -static inline dma_addr_t -dma_map_page(struct device *dev, struct page *page, - unsigned long offset, size_t size, - enum dma_data_direction direction) -{ - BUG(); - return 0; -} - -static inline void -dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, - enum dma_data_direction direction) -{ - BUG(); -} - -static inline int -dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, - enum dma_data_direction direction) -{ - BUG(); - return 0; -} - -static inline void -dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, - enum dma_data_direction direction) -{ - BUG(); -} - -static inline void -dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, - enum dma_data_direction direction) -{ - BUG(); -} - -static inline void -dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, - size_t size, enum dma_data_direction direction) -{ - BUG(); -} - -static inline void -dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, - enum dma_data_direction direction) -{ - BUG(); -} - -static inline void -dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, - enum dma_data_direction direction) -{ - BUG(); -} - -static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) -{ - return 0; -} - -static inline void *dma_alloc_coherent(struct device *dev, size_t size, - dma_addr_t *dma_handle, int flag) -{ - return NULL; /* consistent_alloc(flag, size, dma_handle); */ -} - -static inline void dma_free_coherent(struct device *dev, size_t size, - void *vaddr, dma_addr_t dma_handle) -{ - BUG(); -} - -static inline dma_addr_t -dma_map_single(struct device *dev, void *ptr, size_t size, - enum dma_data_direction direction) -{ - BUG_ON(direction == DMA_NONE); - - return virt_to_bus(ptr); -} - -static inline void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, - size_t size, - enum dma_data_direction direction) -{ - switch (direction) { - case DMA_FROM_DEVICE: - flush_dcache_range((unsigned)dma_addr, - (unsigned)dma_addr + size); - /* Fall through */ - case DMA_TO_DEVICE: - break; - default: - BUG(); - } -} - -#endif /* _ASM_MICROBLAZE_DMA_MAPPING_H */ diff --git a/trunk/arch/microblaze/include/asm/dma.h b/trunk/arch/microblaze/include/asm/dma.h deleted file mode 100644 index 0967fa04fc5e..000000000000 --- a/trunk/arch/microblaze/include/asm/dma.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_DMA_H -#define _ASM_MICROBLAZE_DMA_H - -/* we don't have dma address limit. define it as zero to be - * unlimited. */ -#define MAX_DMA_ADDRESS (0) - -#endif /* _ASM_MICROBLAZE_DMA_H */ diff --git a/trunk/arch/microblaze/include/asm/elf.h b/trunk/arch/microblaze/include/asm/elf.h deleted file mode 100644 index 81337f241347..000000000000 --- a/trunk/arch/microblaze/include/asm/elf.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_ELF_H -#define _ASM_MICROBLAZE_ELF_H - -/* - * Note there is no "official" ELF designation for Microblaze. - * I've snaffled the value from the microblaze binutils source code - * /binutils/microblaze/include/elf/microblaze.h - */ -#define EM_XILINX_MICROBLAZE 0xbaab -#define ELF_ARCH EM_XILINX_MICROBLAZE - -/* - * This is used to ensure we don't load something for the wrong architecture. - */ -#define elf_check_arch(x) ((x)->e_machine == EM_XILINX_MICROBLAZE) - -/* - * These are used to set parameters in the core dumps. - */ -#define ELF_CLASS ELFCLASS32 - -#endif /* _ASM_MICROBLAZE_ELF_H */ diff --git a/trunk/arch/microblaze/include/asm/entry.h b/trunk/arch/microblaze/include/asm/entry.h deleted file mode 100644 index 7f57e42ee467..000000000000 --- a/trunk/arch/microblaze/include/asm/entry.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Definitions used by low-level trap handlers - * - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2007 - 2008 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_ENTRY_H -#define _ASM_MICROBLAZE_ENTRY_H - -#include -#include - -/* - * These are per-cpu variables required in entry.S, among other - * places - */ - -#define PER_CPU(var) per_cpu__##var - -# ifndef __ASSEMBLY__ -DECLARE_PER_CPU(unsigned int, KSP); /* Saved kernel stack pointer */ -DECLARE_PER_CPU(unsigned int, KM); /* Kernel/user mode */ -DECLARE_PER_CPU(unsigned int, ENTRY_SP); /* Saved SP on kernel entry */ -DECLARE_PER_CPU(unsigned int, R11_SAVE); /* Temp variable for entry */ -DECLARE_PER_CPU(unsigned int, CURRENT_SAVE); /* Saved current pointer */ -DECLARE_PER_CPU(unsigned int, SYSCALL_SAVE); /* Saved syscall number */ -# endif /* __ASSEMBLY__ */ - -#endif /* _ASM_MICROBLAZE_ENTRY_H */ diff --git a/trunk/arch/microblaze/include/asm/exceptions.h b/trunk/arch/microblaze/include/asm/exceptions.h deleted file mode 100644 index 4cdd2159f470..000000000000 --- a/trunk/arch/microblaze/include/asm/exceptions.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Preliminary support for HW exception handing for Microblaze - * - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2008 PetaLogix - * Copyright (C) 2005 John Williams - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_EXCEPTIONS_H -#define _ASM_MICROBLAZE_EXCEPTIONS_H - -#ifdef __KERNEL__ -#ifndef __ASSEMBLY__ - -/* Macros to enable and disable HW exceptions in the MSR */ -/* Define MSR enable bit for HW exceptions */ -#define HWEX_MSR_BIT (1 << 8) - -#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR -#define __enable_hw_exceptions() \ - __asm__ __volatile__ (" msrset r0, %0; \ - nop;" \ - : \ - : "i" (HWEX_MSR_BIT) \ - : "memory") - -#define __disable_hw_exceptions() \ - __asm__ __volatile__ (" msrclr r0, %0; \ - nop;" \ - : \ - : "i" (HWEX_MSR_BIT) \ - : "memory") -#else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ -#define __enable_hw_exceptions() \ - __asm__ __volatile__ (" \ - mfs r12, rmsr; \ - nop; \ - ori r12, r12, %0; \ - mts rmsr, r12; \ - nop;" \ - : \ - : "i" (HWEX_MSR_BIT) \ - : "memory", "r12") - -#define __disable_hw_exceptions() \ - __asm__ __volatile__ (" \ - mfs r12, rmsr; \ - nop; \ - andi r12, r12, ~%0; \ - mts rmsr, r12; \ - nop;" \ - : \ - : "i" (HWEX_MSR_BIT) \ - : "memory", "r12") -#endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ - -asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, - int fsr, int addr); - -#if defined(CONFIG_XMON) -extern void xmon(struct pt_regs *regs); -extern int xmon_bpt(struct pt_regs *regs); -extern int xmon_sstep(struct pt_regs *regs); -extern int xmon_iabr_match(struct pt_regs *regs); -extern int xmon_dabr_match(struct pt_regs *regs); -extern void (*xmon_fault_handler)(struct pt_regs *regs); - -void (*debugger)(struct pt_regs *regs) = xmon; -int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; -int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; -int (*debugger_iabr_match)(struct pt_regs *regs) = xmon_iabr_match; -int (*debugger_dabr_match)(struct pt_regs *regs) = xmon_dabr_match; -void (*debugger_fault_handler)(struct pt_regs *regs); -#elif defined(CONFIG_KGDB) -void (*debugger)(struct pt_regs *regs); -int (*debugger_bpt)(struct pt_regs *regs); -int (*debugger_sstep)(struct pt_regs *regs); -int (*debugger_iabr_match)(struct pt_regs *regs); -int (*debugger_dabr_match)(struct pt_regs *regs); -void (*debugger_fault_handler)(struct pt_regs *regs); -#else -#define debugger(regs) do { } while (0) -#define debugger_bpt(regs) 0 -#define debugger_sstep(regs) 0 -#define debugger_iabr_match(regs) 0 -#define debugger_dabr_match(regs) 0 -#define debugger_fault_handler ((void (*)(struct pt_regs *))0) -#endif - -#endif /*__ASSEMBLY__ */ -#endif /* __KERNEL__ */ -#endif /* _ASM_MICROBLAZE_EXCEPTIONS_H */ diff --git a/trunk/arch/microblaze/include/asm/flat.h b/trunk/arch/microblaze/include/asm/flat.h deleted file mode 100644 index acf0da543ef1..000000000000 --- a/trunk/arch/microblaze/include/asm/flat.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * uClinux flat-format executables - * - * Copyright (C) 2005 John Williams - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_FLAT_H -#define _ASM_MICROBLAZE_FLAT_H - -#include - -#define flat_stack_align(sp) /* nothing needed */ -#define flat_argvp_envp_on_stack() 0 -#define flat_old_ram_flag(flags) (flags) -#define flat_reloc_valid(reloc, size) ((reloc) <= (size)) -#define flat_set_persistent(relval, p) 0 - -/* - * Microblaze works a little differently from other arches, because - * of the MICROBLAZE_64 reloc type. Here, a 32 bit address is split - * over two instructions, an 'imm' instruction which provides the top - * 16 bits, then the instruction "proper" which provides the low 16 - * bits. - */ - -/* - * Crack open a symbol reference and extract the address to be - * relocated. rp is a potentially unaligned pointer to the - * reference - */ - -static inline unsigned long -flat_get_addr_from_rp(unsigned long *rp, unsigned long relval, - unsigned long flags, unsigned long *persistent) -{ - unsigned long addr; - (void)flags; - - /* Is it a split 64/32 reference? */ - if (relval & 0x80000000) { - /* Grab the two halves of the reference */ - unsigned long val_hi, val_lo; - - val_hi = get_unaligned(rp); - val_lo = get_unaligned(rp+1); - - /* Crack the address out */ - addr = ((val_hi & 0xffff) << 16) + (val_lo & 0xffff); - } else { - /* Get the address straight out */ - addr = get_unaligned(rp); - } - - return addr; -} - -/* - * Insert an address into the symbol reference at rp. rp is potentially - * unaligned. - */ - -static inline void -flat_put_addr_at_rp(unsigned long *rp, unsigned long addr, unsigned long relval) -{ - /* Is this a split 64/32 reloc? */ - if (relval & 0x80000000) { - /* Get the two "halves" */ - unsigned long val_hi = get_unaligned(rp); - unsigned long val_lo = get_unaligned(rp + 1); - - /* insert the address */ - val_hi = (val_hi & 0xffff0000) | addr >> 16; - val_lo = (val_lo & 0xffff0000) | (addr & 0xffff); - - /* store the two halves back into memory */ - put_unaligned(val_hi, rp); - put_unaligned(val_lo, rp+1); - } else { - /* Put it straight in, no messing around */ - put_unaligned(addr, rp); - } -} - -#define flat_get_relocate_addr(rel) (rel & 0x7fffffff) - -#endif /* _ASM_MICROBLAZE_FLAT_H */ diff --git a/trunk/arch/microblaze/include/asm/ftrace.h b/trunk/arch/microblaze/include/asm/ftrace.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/trunk/arch/microblaze/include/asm/ftrace.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/trunk/arch/microblaze/include/asm/gpio.h b/trunk/arch/microblaze/include/asm/gpio.h deleted file mode 100644 index ea04632399d8..000000000000 --- a/trunk/arch/microblaze/include/asm/gpio.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Generic GPIO API implementation for PowerPC. - * - * Copyright (c) 2007-2008 MontaVista Software, Inc. - * - * Author: Anton Vorontsov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - */ - -#ifndef __ASM_POWERPC_GPIO_H -#define __ASM_POWERPC_GPIO_H - -#include -#include - -#ifdef CONFIG_GPIOLIB - -/* - * We don't (yet) implement inlined/rapid versions for on-chip gpios. - * Just call gpiolib. - */ -static inline int gpio_get_value(unsigned int gpio) -{ - return __gpio_get_value(gpio); -} - -static inline void gpio_set_value(unsigned int gpio, int value) -{ - __gpio_set_value(gpio, value); -} - -static inline int gpio_cansleep(unsigned int gpio) -{ - return __gpio_cansleep(gpio); -} - -/* - * Not implemented, yet. - */ -static inline int gpio_to_irq(unsigned int gpio) -{ - return -ENOSYS; -} - -static inline int irq_to_gpio(unsigned int irq) -{ - return -EINVAL; -} - -#endif /* CONFIG_GPIOLIB */ - -#endif /* __ASM_POWERPC_GPIO_H */ diff --git a/trunk/arch/microblaze/include/asm/hardirq.h b/trunk/arch/microblaze/include/asm/hardirq.h deleted file mode 100644 index 0f2d6b013e11..000000000000 --- a/trunk/arch/microblaze/include/asm/hardirq.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_HARDIRQ_H -#define _ASM_MICROBLAZE_HARDIRQ_H - -#include -#include -#include -#include -#include - -/* should be defined in each interrupt controller driver */ -extern unsigned int get_irq(struct pt_regs *regs); - -typedef struct { - unsigned int __softirq_pending; -} ____cacheline_aligned irq_cpustat_t; - -void ack_bad_irq(unsigned int irq); - -#include /* Standard mappings for irq_cpustat_t above */ - -#endif /* _ASM_MICROBLAZE_HARDIRQ_H */ diff --git a/trunk/arch/microblaze/include/asm/hw_irq.h b/trunk/arch/microblaze/include/asm/hw_irq.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/trunk/arch/microblaze/include/asm/hw_irq.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/trunk/arch/microblaze/include/asm/io.h b/trunk/arch/microblaze/include/asm/io.h deleted file mode 100644 index 8b5853ee6b5c..000000000000 --- a/trunk/arch/microblaze/include/asm/io.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_IO_H -#define _ASM_MICROBLAZE_IO_H - -#include -#include -#include - -#define IO_SPACE_LIMIT (0xFFFFFFFF) - -static inline unsigned char __raw_readb(const volatile void __iomem *addr) -{ - return *(volatile unsigned char __force *)addr; -} -static inline unsigned short __raw_readw(const volatile void __iomem *addr) -{ - return *(volatile unsigned short __force *)addr; -} -static inline unsigned int __raw_readl(const volatile void __iomem *addr) -{ - return *(volatile unsigned int __force *)addr; -} -static inline unsigned long __raw_readq(const volatile void __iomem *addr) -{ - return *(volatile unsigned long __force *)addr; -} -static inline void __raw_writeb(unsigned char v, volatile void __iomem *addr) -{ - *(volatile unsigned char __force *)addr = v; -} -static inline void __raw_writew(unsigned short v, volatile void __iomem *addr) -{ - *(volatile unsigned short __force *)addr = v; -} -static inline void __raw_writel(unsigned int v, volatile void __iomem *addr) -{ - *(volatile unsigned int __force *)addr = v; -} -static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr) -{ - *(volatile unsigned long __force *)addr = v; -} - -/* - * read (readb, readw, readl, readq) and write (writeb, writew, - * writel, writeq) accessors are for PCI and thus littel endian. - * Linux 2.4 for Microblaze had this wrong. - */ -static inline unsigned char readb(const volatile void __iomem *addr) -{ - return *(volatile unsigned char __force *)addr; -} -static inline unsigned short readw(const volatile void __iomem *addr) -{ - return le16_to_cpu(*(volatile unsigned short __force *)addr); -} -static inline unsigned int readl(const volatile void __iomem *addr) -{ - return le32_to_cpu(*(volatile unsigned int __force *)addr); -} -static inline void writeb(unsigned char v, volatile void __iomem *addr) -{ - *(volatile unsigned char __force *)addr = v; -} -static inline void writew(unsigned short v, volatile void __iomem *addr) -{ - *(volatile unsigned short __force *)addr = cpu_to_le16(v); -} -static inline void writel(unsigned int v, volatile void __iomem *addr) -{ - *(volatile unsigned int __force *)addr = cpu_to_le32(v); -} - -/* ioread and iowrite variants. thease are for now same as __raw_ - * variants of accessors. we might check for endianess in the feature - */ -#define ioread8(addr) __raw_readb((u8 *)(addr)) -#define ioread16(addr) __raw_readw((u16 *)(addr)) -#define ioread32(addr) __raw_readl((u32 *)(addr)) -#define iowrite8(v, addr) __raw_writeb((u8)(v), (u8 *)(addr)) -#define iowrite16(v, addr) __raw_writew((u16)(v), (u16 *)(addr)) -#define iowrite32(v, addr) __raw_writel((u32)(v), (u32 *)(addr)) - -/* These are the definitions for the x86 IO instructions - * inb/inw/inl/outb/outw/outl, the "string" versions - * insb/insw/insl/outsb/outsw/outsl, and the "pausing" versions - * inb_p/inw_p/... - * The macros don't do byte-swapping. - */ -#define inb(port) readb((u8 *)((port))) -#define outb(val, port) writeb((val), (u8 *)((unsigned long)(port))) -#define inw(port) readw((u16 *)((port))) -#define outw(val, port) writew((val), (u16 *)((unsigned long)(port))) -#define inl(port) readl((u32 *)((port))) -#define outl(val, port) writel((val), (u32 *)((unsigned long)(port))) - -#define inb_p(port) inb((port)) -#define outb_p(val, port) outb((val), (port)) -#define inw_p(port) inw((port)) -#define outw_p(val, port) outw((val), (port)) -#define inl_p(port) inl((port)) -#define outl_p(val, port) outl((val), (port)) - -#define memset_io(a, b, c) memset((void *)(a), (b), (c)) -#define memcpy_fromio(a, b, c) memcpy((a), (void *)(b), (c)) -#define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) - -/** - * virt_to_phys - map virtual addresses to physical - * @address: address to remap - * - * The returned physical address is the physical (CPU) mapping for - * the memory address given. It is only valid to use this function on - * addresses directly mapped or allocated via kmalloc. - * - * This function does not give bus mappings for DMA transfers. In - * almost all conceivable cases a device driver should not be using - * this function - */ -static inline unsigned long __iomem virt_to_phys(volatile void *address) -{ - return __pa((unsigned long)address); -} - -#define virt_to_bus virt_to_phys - -/** - * phys_to_virt - map physical address to virtual - * @address: address to remap - * - * The returned virtual address is a current CPU mapping for - * the memory address given. It is only valid to use this function on - * addresses that have a kernel mapping - * - * This function does not handle bus mappings for DMA transfers. In - * almost all conceivable cases a device driver should not be using - * this function - */ -static inline void *phys_to_virt(unsigned long address) -{ - return (void *)__va(address); -} - -#define bus_to_virt(a) phys_to_virt(a) - -static inline void __iomem *__ioremap(phys_addr_t address, unsigned long size, - unsigned long flags) -{ - return (void *)address; -} - -#define ioremap(physaddr, size) ((void __iomem *)(unsigned long)(physaddr)) -#define iounmap(addr) ((void)0) -#define ioremap_nocache(physaddr, size) ioremap(physaddr, size) - -/* - * Convert a physical pointer to a virtual kernel pointer for /dev/mem - * access - */ -#define xlate_dev_mem_ptr(p) __va(p) - -/* - * Convert a virtual cached pointer to an uncached pointer - */ -#define xlate_dev_kmem_ptr(p) p - -/* - * Big Endian - */ -#define out_be32(a, v) __raw_writel((v), (void __iomem __force *)(a)) -#define out_be16(a, v) __raw_writew((v), (a)) - -#define in_be32(a) __raw_readl((const void __iomem __force *)(a)) -#define in_be16(a) __raw_readw(a) - -/* - * Little endian - */ - -#define out_le32(a, v) __raw_writel(__cpu_to_le32(v), (a)); -#define out_le16(a, v) __raw_writew(__cpu_to_le16(v), (a)) - -#define in_le32(a) __le32_to_cpu(__raw_readl(a)) -#define in_le16(a) __le16_to_cpu(__raw_readw(a)) - -/* Byte ops */ -#define out_8(a, v) __raw_writeb((v), (a)) -#define in_8(a) __raw_readb(a) - -/* FIXME */ -static inline void __iomem *ioport_map(unsigned long port, unsigned int len) -{ - return (void __iomem *) (port); -} - -static inline void ioport_unmap(void __iomem *addr) -{ - /* Nothing to do */ -} - -#endif /* _ASM_MICROBLAZE_IO_H */ diff --git a/trunk/arch/microblaze/include/asm/ioctls.h b/trunk/arch/microblaze/include/asm/ioctls.h deleted file mode 100644 index 03582b249204..000000000000 --- a/trunk/arch/microblaze/include/asm/ioctls.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_IOCTLS_H -#define _ASM_MICROBLAZE_IOCTLS_H - -#include - -/* 0x54 is just a magic number to make these relatively unique ('T') */ - -#define TCGETS 0x5401 -#define TCSETS 0x5402 -#define TCSETSW 0x5403 -#define TCSETSF 0x5404 -#define TCGETA 0x5405 -#define TCSETA 0x5406 -#define TCSETAW 0x5407 -#define TCSETAF 0x5408 -#define TCSBRK 0x5409 -#define TCXONC 0x540A -#define TCFLSH 0x540B -#define TIOCEXCL 0x540C -#define TIOCNXCL 0x540D -#define TIOCSCTTY 0x540E -#define TIOCGPGRP 0x540F -#define TIOCSPGRP 0x5410 -#define TIOCOUTQ 0x5411 -#define TIOCSTI 0x5412 -#define TIOCGWINSZ 0x5413 -#define TIOCSWINSZ 0x5414 -#define TIOCMGET 0x5415 -#define TIOCMBIS 0x5416 -#define TIOCMBIC 0x5417 -#define TIOCMSET 0x5418 -#define TIOCGSOFTCAR 0x5419 -#define TIOCSSOFTCAR 0x541A -#define FIONREAD 0x541B -#define TIOCINQ FIONREAD -#define TIOCLINUX 0x541C -#define TIOCCONS 0x541D -#define TIOCGSERIAL 0x541E -#define TIOCSSERIAL 0x541F -#define TIOCPKT 0x5420 -#define FIONBIO 0x5421 -#define TIOCNOTTY 0x5422 -#define TIOCSETD 0x5423 -#define TIOCGETD 0x5424 -#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ -#define TIOCTTYGSTRUCT 0x5426 /* For debugging only */ -#define TIOCSBRK 0x5427 /* BSD compatibility */ -#define TIOCCBRK 0x5428 /* BSD compatibility */ -#define TIOCGSID 0x5429 /* Return the session ID of FD */ -/* Get Pty Number (of pty-mux device) */ -#define TIOCGPTN _IOR('T', 0x30, unsigned int) -#define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ - -#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ -#define FIOCLEX 0x5451 -#define FIOASYNC 0x5452 -#define TIOCSERCONFIG 0x5453 -#define TIOCSERGWILD 0x5454 -#define TIOCSERSWILD 0x5455 -#define TIOCGLCKTRMIOS 0x5456 -#define TIOCSLCKTRMIOS 0x5457 -#define TIOCSERGSTRUCT 0x5458 /* For debugging only */ -#define TIOCSERGETLSR 0x5459 /* Get line status register */ -#define TIOCSERGETMULTI 0x545A /* Get multiport config */ -#define TIOCSERSETMULTI 0x545B /* Set multiport config */ - -#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ -#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ - -#define FIOQSIZE 0x545E - -/* Used for packet mode */ -#define TIOCPKT_DATA 0 -#define TIOCPKT_FLUSHREAD 1 -#define TIOCPKT_FLUSHWRITE 2 -#define TIOCPKT_STOP 4 -#define TIOCPKT_START 8 -#define TIOCPKT_NOSTOP 16 -#define TIOCPKT_DOSTOP 32 - -#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ - -#endif /* _ASM_MICROBLAZE_IOCTLS_H */ diff --git a/trunk/arch/microblaze/include/asm/ipcbuf.h b/trunk/arch/microblaze/include/asm/ipcbuf.h deleted file mode 100644 index b056fa420654..000000000000 --- a/trunk/arch/microblaze/include/asm/ipcbuf.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_IPCBUF_H -#define _ASM_MICROBLAZE_IPCBUF_H - -/* - * The user_ipc_perm structure for microblaze architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 32-bit mode_t and seq - * - 2 miscellaneous 32-bit values - */ - -struct ipc64_perm { - __kernel_key_t key; - __kernel_uid32_t uid; - __kernel_gid32_t gid; - __kernel_uid32_t cuid; - __kernel_gid32_t cgid; - __kernel_mode_t mode; - unsigned short __pad1; - unsigned short seq; - unsigned short __pad2; - unsigned long __unused1; - unsigned long __unused2; -}; - -#endif /* _ASM_MICROBLAZE_IPCBUF_H */ diff --git a/trunk/arch/microblaze/include/asm/irq.h b/trunk/arch/microblaze/include/asm/irq.h deleted file mode 100644 index db515deaa720..000000000000 --- a/trunk/arch/microblaze/include/asm/irq.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_IRQ_H -#define _ASM_MICROBLAZE_IRQ_H - -#define NR_IRQS 32 - -#include - -extern unsigned int nr_irq; - -#define NO_IRQ (-1) - -static inline int irq_canonicalize(int irq) -{ - return irq; -} - -struct pt_regs; -extern void do_IRQ(struct pt_regs *regs); - -/* irq_of_parse_and_map - Parse and Map an interrupt into linux virq space - * @device: Device node of the device whose interrupt is to be mapped - * @index: Index of the interrupt to map - * - * This function is a wrapper that chains of_irq_map_one() and - * irq_create_of_mapping() to make things easier to callers - */ -struct device_node; -extern unsigned int irq_of_parse_and_map(struct device_node *dev, int index); - -/** FIXME - not implement - * irq_dispose_mapping - Unmap an interrupt - * @virq: linux virq number of the interrupt to unmap - */ -static inline void irq_dispose_mapping(unsigned int virq) -{ - return; -} - -#endif /* _ASM_MICROBLAZE_IRQ_H */ diff --git a/trunk/arch/microblaze/include/asm/irq_regs.h b/trunk/arch/microblaze/include/asm/irq_regs.h deleted file mode 100644 index 3dd9c0b70270..000000000000 --- a/trunk/arch/microblaze/include/asm/irq_regs.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/irqflags.h b/trunk/arch/microblaze/include/asm/irqflags.h deleted file mode 100644 index dea65645a4f8..000000000000 --- a/trunk/arch/microblaze/include/asm/irqflags.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_IRQFLAGS_H -#define _ASM_MICROBLAZE_IRQFLAGS_H - -#include - -# if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR - -# define local_irq_save(flags) \ - do { \ - asm volatile ("# local_irq_save \n\t" \ - "msrclr %0, %1 \n\t" \ - "nop \n\t" \ - : "=r"(flags) \ - : "i"(MSR_IE) \ - : "memory"); \ - } while (0) - -# define local_irq_disable() \ - do { \ - asm volatile ("# local_irq_disable \n\t" \ - "msrclr r0, %0 \n\t" \ - "nop \n\t" \ - : \ - : "i"(MSR_IE) \ - : "memory"); \ - } while (0) - -# define local_irq_enable() \ - do { \ - asm volatile ("# local_irq_enable \n\t" \ - "msrset r0, %0 \n\t" \ - "nop \n\t" \ - : \ - : "i"(MSR_IE) \ - : "memory"); \ - } while (0) - -# else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */ - -# define local_irq_save(flags) \ - do { \ - register unsigned tmp; \ - asm volatile ("# local_irq_save \n\t" \ - "mfs %0, rmsr \n\t" \ - "nop \n\t" \ - "andi %1, %0, %2 \n\t" \ - "mts rmsr, %1 \n\t" \ - "nop \n\t" \ - : "=r"(flags), "=r" (tmp) \ - : "i"(~MSR_IE) \ - : "memory"); \ - } while (0) - -# define local_irq_disable() \ - do { \ - register unsigned tmp; \ - asm volatile ("# local_irq_disable \n\t" \ - "mfs %0, rmsr \n\t" \ - "nop \n\t" \ - "andi %0, %0, %1 \n\t" \ - "mts rmsr, %0 \n\t" \ - "nop \n\t" \ - : "=r"(tmp) \ - : "i"(~MSR_IE) \ - : "memory"); \ - } while (0) - -# define local_irq_enable() \ - do { \ - register unsigned tmp; \ - asm volatile ("# local_irq_enable \n\t" \ - "mfs %0, rmsr \n\t" \ - "nop \n\t" \ - "ori %0, %0, %1 \n\t" \ - "mts rmsr, %0 \n\t" \ - "nop \n\t" \ - : "=r"(tmp) \ - : "i"(MSR_IE) \ - : "memory"); \ - } while (0) - -# endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ - -#define local_save_flags(flags) \ - do { \ - asm volatile ("# local_save_flags \n\t" \ - "mfs %0, rmsr \n\t" \ - "nop \n\t" \ - : "=r"(flags) \ - : \ - : "memory"); \ - } while (0) - -#define local_irq_restore(flags) \ - do { \ - asm volatile ("# local_irq_restore \n\t"\ - "mts rmsr, %0 \n\t" \ - "nop \n\t" \ - : \ - : "r"(flags) \ - : "memory"); \ - } while (0) - -static inline int irqs_disabled(void) -{ - unsigned long flags; - - local_save_flags(flags); - return ((flags & MSR_IE) == 0); -} - -#define raw_irqs_disabled irqs_disabled -#define raw_irqs_disabled_flags(flags) ((flags) == 0) - -#endif /* _ASM_MICROBLAZE_IRQFLAGS_H */ diff --git a/trunk/arch/microblaze/include/asm/kdebug.h b/trunk/arch/microblaze/include/asm/kdebug.h deleted file mode 100644 index 6ece1b037665..000000000000 --- a/trunk/arch/microblaze/include/asm/kdebug.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/kmap_types.h b/trunk/arch/microblaze/include/asm/kmap_types.h deleted file mode 100644 index 4d7e222f5dd7..000000000000 --- a/trunk/arch/microblaze/include/asm/kmap_types.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_KMAP_TYPES_H -#define _ASM_MICROBLAZE_KMAP_TYPES_H - -enum km_type { - KM_BOUNCE_READ, - KM_SKB_SUNRPC_DATA, - KM_SKB_DATA_SOFTIRQ, - KM_USER0, - KM_USER1, - KM_BIO_SRC_IRQ, - KM_BIO_DST_IRQ, - KM_PTE0, - KM_PTE1, - KM_IRQ0, - KM_IRQ1, - KM_SOFTIRQ0, - KM_SOFTIRQ1, - KM_TYPE_NR, -}; - -#endif /* _ASM_MICROBLAZE_KMAP_TYPES_H */ diff --git a/trunk/arch/microblaze/include/asm/linkage.h b/trunk/arch/microblaze/include/asm/linkage.h deleted file mode 100644 index 3a8e36d057eb..000000000000 --- a/trunk/arch/microblaze/include/asm/linkage.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_LINKAGE_H -#define _ASM_MICROBLAZE_LINKAGE_H - -#define __ALIGN .align 4 -#define __ALIGN_STR ".align 4" - -#endif /* _ASM_MICROBLAZE_LINKAGE_H */ diff --git a/trunk/arch/microblaze/include/asm/lmb.h b/trunk/arch/microblaze/include/asm/lmb.h deleted file mode 100644 index a0a0a929c293..000000000000 --- a/trunk/arch/microblaze/include/asm/lmb.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_LMB_H -#define _ASM_MICROBLAZE_LMB_H - -/* LMB limit is OFF */ -#define LMB_REAL_LIMIT 0xFFFFFFFF - -#endif /* _ASM_MICROBLAZE_LMB_H */ - - diff --git a/trunk/arch/microblaze/include/asm/mman.h b/trunk/arch/microblaze/include/asm/mman.h deleted file mode 100644 index 4914b1329445..000000000000 --- a/trunk/arch/microblaze/include/asm/mman.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_MMAN_H -#define _ASM_MICROBLAZE_MMAN_H - -#include - -#define MAP_GROWSDOWN 0x0100 /* stack-like segment */ -#define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */ -#define MAP_LOCKED 0x2000 /* pages are locked */ -#define MAP_NORESERVE 0x4000 /* don't check for reservations */ -#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */ -#define MAP_NONBLOCK 0x10000 /* do not block on IO */ - -#define MCL_CURRENT 1 /* lock all current mappings */ -#define MCL_FUTURE 2 /* lock all future mappings */ - -#endif /* _ASM_MICROBLAZE_MMAN_H */ diff --git a/trunk/arch/microblaze/include/asm/mmu.h b/trunk/arch/microblaze/include/asm/mmu.h deleted file mode 100644 index 0e0431d61635..000000000000 --- a/trunk/arch/microblaze/include/asm/mmu.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_MMU_H -#define _ASM_MICROBLAZE_MMU_H - -#ifndef __ASSEMBLY__ -typedef struct { - struct vm_list_struct *vmlist; - unsigned long end_brk; -} mm_context_t; -#endif /* __ASSEMBLY__ */ - -#endif /* _ASM_MICROBLAZE_MMU_H */ diff --git a/trunk/arch/microblaze/include/asm/mmu_context.h b/trunk/arch/microblaze/include/asm/mmu_context.h deleted file mode 100644 index 150ca01b74ba..000000000000 --- a/trunk/arch/microblaze/include/asm/mmu_context.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_MMU_CONTEXT_H -#define _ASM_MICROBLAZE_MMU_CONTEXT_H - -# define init_new_context(tsk, mm) ({ 0; }) - -# define enter_lazy_tlb(mm, tsk) do {} while (0) -# define change_mm_context(old, ctx, _pml4) do {} while (0) -# define destroy_context(mm) do {} while (0) -# define deactivate_mm(tsk, mm) do {} while (0) -# define switch_mm(prev, next, tsk) do {} while (0) -# define activate_mm(prev, next) do {} while (0) - -#endif /* _ASM_MICROBLAZE_MMU_CONTEXT_H */ diff --git a/trunk/arch/microblaze/include/asm/module.h b/trunk/arch/microblaze/include/asm/module.h deleted file mode 100644 index 914565a90315..000000000000 --- a/trunk/arch/microblaze/include/asm/module.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_MODULE_H -#define _ASM_MICROBLAZE_MODULE_H - -/* Microblaze Relocations */ -#define R_MICROBLAZE_NONE 0 -#define R_MICROBLAZE_32 1 -#define R_MICROBLAZE_32_PCREL 2 -#define R_MICROBLAZE_64_PCREL 3 -#define R_MICROBLAZE_32_PCREL_LO 4 -#define R_MICROBLAZE_64 5 -#define R_MICROBLAZE_32_LO 6 -#define R_MICROBLAZE_SRO32 7 -#define R_MICROBLAZE_SRW32 8 -#define R_MICROBLAZE_64_NONE 9 -#define R_MICROBLAZE_32_SYM_OP_SYM 10 -/* Keep this the last entry. */ -#define R_MICROBLAZE_NUM 11 - -struct mod_arch_specific { - int foo; -}; - -#define Elf_Shdr Elf32_Shdr -#define Elf_Sym Elf32_Sym -#define Elf_Ehdr Elf32_Ehdr - -typedef struct { volatile int counter; } module_t; - -#endif /* _ASM_MICROBLAZE_MODULE_H */ diff --git a/trunk/arch/microblaze/include/asm/msgbuf.h b/trunk/arch/microblaze/include/asm/msgbuf.h deleted file mode 100644 index 09dd97097211..000000000000 --- a/trunk/arch/microblaze/include/asm/msgbuf.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef _ASM_MICROBLAZE_MSGBUF_H -#define _ASM_MICROBLAZE_MSGBUF_H - -/* - * The msqid64_ds structure for microblaze architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 64-bit time_t to solve y2038 problem - * - 2 miscellaneous 32-bit values - */ - -struct msqid64_ds { - struct ipc64_perm msg_perm; - __kernel_time_t msg_stime; /* last msgsnd time */ - unsigned long __unused1; - __kernel_time_t msg_rtime; /* last msgrcv time */ - unsigned long __unused2; - __kernel_time_t msg_ctime; /* last change time */ - unsigned long __unused3; - unsigned long msg_cbytes; /* current number of bytes on queue */ - unsigned long msg_qnum; /* number of messages in queue */ - unsigned long msg_qbytes; /* max number of bytes on queue */ - __kernel_pid_t msg_lspid; /* pid of last msgsnd */ - __kernel_pid_t msg_lrpid; /* last receive pid */ - unsigned long __unused4; - unsigned long __unused5; -}; - -#endif /* _ASM_MICROBLAZE_MSGBUF_H */ diff --git a/trunk/arch/microblaze/include/asm/mutex.h b/trunk/arch/microblaze/include/asm/mutex.h deleted file mode 100644 index ff6101aa2c71..000000000000 --- a/trunk/arch/microblaze/include/asm/mutex.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/namei.h b/trunk/arch/microblaze/include/asm/namei.h deleted file mode 100644 index 61d60b8a07d5..000000000000 --- a/trunk/arch/microblaze/include/asm/namei.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_NAMEI_H -#define _ASM_MICROBLAZE_NAMEI_H - -#ifdef __KERNEL__ - -/* This dummy routine maybe changed to something useful - * for /usr/gnemul/ emulation stuff. - * Look at asm-sparc/namei.h for details. - */ -#define __emul_prefix() NULL - -#endif /* __KERNEL__ */ - -#endif /* _ASM_MICROBLAZE_NAMEI_H */ diff --git a/trunk/arch/microblaze/include/asm/of_device.h b/trunk/arch/microblaze/include/asm/of_device.h deleted file mode 100644 index ba917cfaefe6..000000000000 --- a/trunk/arch/microblaze/include/asm/of_device.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2007-2008 Michal Simek - * - * based on PowerPC of_device.h - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_OF_DEVICE_H -#define _ASM_MICROBLAZE_OF_DEVICE_H -#ifdef __KERNEL__ - -#include -#include - -/* - * The of_device is a kind of "base class" that is a superset of - * struct device for use by devices attached to an OF node and - * probed using OF properties. - */ -struct of_device { - struct device_node *node; /* to be obsoleted */ - u64 dma_mask; /* DMA mask */ - struct device dev; /* Generic device interface */ -}; - -extern ssize_t of_device_get_modalias(struct of_device *ofdev, - char *str, ssize_t len); - -extern struct of_device *of_device_alloc(struct device_node *np, - const char *bus_id, - struct device *parent); - -extern int of_device_uevent(struct device *dev, - struct kobj_uevent_env *env); - -extern void of_device_make_bus_id(struct of_device *dev); - -/* This is just here during the transition */ -#include - -#endif /* __KERNEL__ */ -#endif /* _ASM_MICROBLAZE_OF_DEVICE_H */ diff --git a/trunk/arch/microblaze/include/asm/of_platform.h b/trunk/arch/microblaze/include/asm/of_platform.h deleted file mode 100644 index 187c0eedaece..000000000000 --- a/trunk/arch/microblaze/include/asm/of_platform.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. - * - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#ifndef _ASM_MICROBLAZE_OF_PLATFORM_H -#define _ASM_MICROBLAZE_OF_PLATFORM_H - -/* This is just here during the transition */ -#include - -/* - * The list of OF IDs below is used for matching bus types in the - * system whose devices are to be exposed as of_platform_devices. - * - * This is the default list valid for most platforms. This file provides - * functions who can take an explicit list if necessary though - * - * The search is always performed recursively looking for children of - * the provided device_node and recursively if such a children matches - * a bus type in the list - */ - -static const struct of_device_id of_default_bus_ids[] = { - { .type = "soc", }, - { .compatible = "soc", }, - { .type = "plb5", }, - { .type = "plb4", }, - { .type = "opb", }, - { .type = "simple", }, - {}, -}; - -/* Platform drivers register/unregister */ -static inline int of_register_platform_driver(struct of_platform_driver *drv) -{ - return of_register_driver(drv, &of_platform_bus_type); -} -static inline void of_unregister_platform_driver(struct of_platform_driver *drv) -{ - of_unregister_driver(drv); -} - -/* Platform devices and busses creation */ -extern struct of_device *of_platform_device_create(struct device_node *np, - const char *bus_id, - struct device *parent); -/* pseudo "matches" value to not do deep probe */ -#define OF_NO_DEEP_PROBE ((struct of_device_id *)-1) - -extern int of_platform_bus_probe(struct device_node *root, - const struct of_device_id *matches, - struct device *parent); - -extern struct of_device *of_find_device_by_phandle(phandle ph); - -extern void of_instantiate_rtc(void); - -#endif /* _ASM_MICROBLAZE_OF_PLATFORM_H */ diff --git a/trunk/arch/microblaze/include/asm/page.h b/trunk/arch/microblaze/include/asm/page.h deleted file mode 100644 index 7238dcfcc517..000000000000 --- a/trunk/arch/microblaze/include/asm/page.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2008 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * Changes for MMU support: - * Copyright (C) 2007 Xilinx, Inc. All rights reserved. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PAGE_H -#define _ASM_MICROBLAZE_PAGE_H - -#include -#include - -/* PAGE_SHIFT determines the page size */ -#define PAGE_SHIFT (12) -#define PAGE_SIZE (1UL << PAGE_SHIFT) -#define PAGE_MASK (~(PAGE_SIZE-1)) - -#ifdef __KERNEL__ - -#ifndef __ASSEMBLY__ - -#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) -#define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1))) - -/* align addr on a size boundary - adjust address up/down if needed */ -#define _ALIGN_UP(addr, size) (((addr)+((size)-1))&(~((size)-1))) -#define _ALIGN_DOWN(addr, size) ((addr)&(~((size)-1))) - -/* align addr on a size boundary - adjust address up if needed */ -#define _ALIGN(addr, size) _ALIGN_UP(addr, size) - -/* - * PAGE_OFFSET -- the first address of the first page of memory. When not - * using MMU this corresponds to the first free page in physical memory (aligned - * on a page boundary). - */ -extern unsigned int __page_offset; -#define PAGE_OFFSET __page_offset - -#define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) -#define get_user_page(vaddr) __get_free_page(GFP_KERNEL) -#define free_user_page(page, addr) free_page(addr) - -#define clear_page(pgaddr) memset((pgaddr), 0, PAGE_SIZE) - - -#define clear_user_page(pgaddr, vaddr, page) memset((pgaddr), 0, PAGE_SIZE) -#define copy_user_page(vto, vfrom, vaddr, topg) \ - memcpy((vto), (vfrom), PAGE_SIZE) - -/* - * These are used to make use of C type-checking.. - */ -typedef struct page *pgtable_t; -typedef struct { unsigned long pte; } pte_t; -typedef struct { unsigned long pgprot; } pgprot_t; -typedef struct { unsigned long ste[64]; } pmd_t; -typedef struct { pmd_t pue[1]; } pud_t; -typedef struct { pud_t pge[1]; } pgd_t; - - -#define pte_val(x) ((x).pte) -#define pgprot_val(x) ((x).pgprot) -#define pmd_val(x) ((x).ste[0]) -#define pud_val(x) ((x).pue[0]) -#define pgd_val(x) ((x).pge[0]) - -#define __pte(x) ((pte_t) { (x) }) -#define __pmd(x) ((pmd_t) { (x) }) -#define __pgd(x) ((pgd_t) { (x) }) -#define __pgprot(x) ((pgprot_t) { (x) }) - -/** - * Conversions for virtual address, physical address, pfn, and struct - * page are defined in the following files. - * - * virt -+ - * | asm-microblaze/page.h - * phys -+ - * | linux/pfn.h - * pfn -+ - * | asm-generic/memory_model.h - * page -+ - * - */ - -extern unsigned long max_low_pfn; -extern unsigned long min_low_pfn; -extern unsigned long max_pfn; - -#define __pa(vaddr) ((unsigned long) (vaddr)) -#define __va(paddr) ((void *) (paddr)) - -#define phys_to_pfn(phys) (PFN_DOWN(phys)) -#define pfn_to_phys(pfn) (PFN_PHYS(pfn)) - -#define virt_to_pfn(vaddr) (phys_to_pfn((__pa(vaddr)))) -#define pfn_to_virt(pfn) __va(pfn_to_phys((pfn))) - -#define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) -#define page_to_virt(page) (pfn_to_virt(page_to_pfn(page))) - -#define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) -#define page_to_bus(page) (page_to_phys(page)) -#define phys_to_page(paddr) (pfn_to_page(phys_to_pfn(paddr))) - -extern unsigned int memory_start; -extern unsigned int memory_end; -extern unsigned int memory_size; - -#define pfn_valid(pfn) ((pfn) >= min_low_pfn && (pfn) < max_mapnr) - -#define ARCH_PFN_OFFSET (PAGE_OFFSET >> PAGE_SHIFT) - -#else -#define tophys(rd, rs) (addik rd, rs, 0) -#define tovirt(rd, rs) (addik rd, rs, 0) -#endif /* __ASSEMBLY__ */ - -#define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr))) - -/* Convert between virtual and physical address for MMU. */ -/* Handle MicroBlaze processor with virtual memory. */ -#define __virt_to_phys(addr) addr -#define __phys_to_virt(addr) addr - -#define TOPHYS(addr) __virt_to_phys(addr) - -#endif /* __KERNEL__ */ - -#include -#include - -#endif /* _ASM_MICROBLAZE_PAGE_H */ diff --git a/trunk/arch/microblaze/include/asm/param.h b/trunk/arch/microblaze/include/asm/param.h deleted file mode 100644 index 8c538a49616d..000000000000 --- a/trunk/arch/microblaze/include/asm/param.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PARAM_H -#define _ASM_MICROBLAZE_PARAM_H - -#ifdef __KERNEL__ -#define HZ CONFIG_HZ /* internal kernel timer frequency */ -#define USER_HZ 100 /* for user interfaces in "ticks" */ -#define CLOCKS_PER_SEC (USER_HZ) /* frequency at which times() counts */ -#endif /* __KERNEL__ */ - -#ifndef HZ -#define HZ 100 -#endif - -#define EXEC_PAGESIZE 4096 - -#ifndef NOGROUP -#define NOGROUP (-1) -#endif - -#define MAXHOSTNAMELEN 64 /* max length of hostname */ - -#endif /* _ASM_MICROBLAZE_PARAM_H */ diff --git a/trunk/arch/microblaze/include/asm/pci-bridge.h b/trunk/arch/microblaze/include/asm/pci-bridge.h deleted file mode 100644 index 7ad28f6f5f1a..000000000000 --- a/trunk/arch/microblaze/include/asm/pci-bridge.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/pci.h b/trunk/arch/microblaze/include/asm/pci.h deleted file mode 100644 index ca03794cf3f0..000000000000 --- a/trunk/arch/microblaze/include/asm/pci.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/microblaze/include/asm/pgalloc.h b/trunk/arch/microblaze/include/asm/pgalloc.h deleted file mode 100644 index 2a4b35484010..000000000000 --- a/trunk/arch/microblaze/include/asm/pgalloc.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PGALLOC_H -#define _ASM_MICROBLAZE_PGALLOC_H - -#define check_pgt_cache() do {} while (0) - -#endif /* _ASM_MICROBLAZE_PGALLOC_H */ diff --git a/trunk/arch/microblaze/include/asm/pgtable.h b/trunk/arch/microblaze/include/asm/pgtable.h deleted file mode 100644 index 4df31e46568e..000000000000 --- a/trunk/arch/microblaze/include/asm/pgtable.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PGTABLE_H -#define _ASM_MICROBLAZE_PGTABLE_H - -#include - -#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ - remap_pfn_range(vma, vaddr, pfn, size, prot) - -#define pgd_present(pgd) (1) /* pages are always present on non MMU */ -#define pgd_none(pgd) (0) -#define pgd_bad(pgd) (0) -#define pgd_clear(pgdp) -#define kern_addr_valid(addr) (1) -#define pmd_offset(a, b) ((void *) 0) - -#define PAGE_NONE __pgprot(0) /* these mean nothing to non MMU */ -#define PAGE_SHARED __pgprot(0) /* these mean nothing to non MMU */ -#define PAGE_COPY __pgprot(0) /* these mean nothing to non MMU */ -#define PAGE_READONLY __pgprot(0) /* these mean nothing to non MMU */ -#define PAGE_KERNEL __pgprot(0) /* these mean nothing to non MMU */ - -#define __swp_type(x) (0) -#define __swp_offset(x) (0) -#define __swp_entry(typ, off) ((swp_entry_t) { ((typ) | ((off) << 7)) }) -#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) -#define __swp_entry_to_pte(x) ((pte_t) { (x).val }) - -#ifndef __ASSEMBLY__ -static inline int pte_file(pte_t pte) { return 0; } -#endif /* __ASSEMBLY__ */ - -#define ZERO_PAGE(vaddr) ({ BUG(); NULL; }) - -#define swapper_pg_dir ((pgd_t *) NULL) - -#define pgtable_cache_init() do {} while (0) - -#define arch_enter_lazy_cpu_mode() do {} while (0) - -#ifndef __ASSEMBLY__ -#include - -void setup_memory(void); -#endif /* __ASSEMBLY__ */ - -#endif /* _ASM_MICROBLAZE_PGTABLE_H */ diff --git a/trunk/arch/microblaze/include/asm/posix_types.h b/trunk/arch/microblaze/include/asm/posix_types.h deleted file mode 100644 index b4df41c5dde2..000000000000 --- a/trunk/arch/microblaze/include/asm/posix_types.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_POSIX_TYPES_H -#define _ASM_MICROBLAZE_POSIX_TYPES_H - -/* - * This file is generally used by user-level software, so you need to - * be a little careful about namespace pollution etc. Also, we cannot - * assume GCC is being used. - */ - -typedef unsigned long __kernel_ino_t; -typedef unsigned int __kernel_mode_t; -typedef unsigned int __kernel_nlink_t; -typedef long __kernel_off_t; -typedef int __kernel_pid_t; -typedef unsigned int __kernel_ipc_pid_t; -typedef unsigned int __kernel_uid_t; -typedef unsigned int __kernel_gid_t; -typedef unsigned long __kernel_size_t; -typedef long __kernel_ssize_t; -typedef int __kernel_ptrdiff_t; -typedef long __kernel_time_t; -typedef long __kernel_suseconds_t; -typedef long __kernel_clock_t; -typedef int __kernel_timer_t; -typedef int __kernel_clockid_t; -typedef int __kernel_daddr_t; -typedef char *__kernel_caddr_t; -typedef unsigned short __kernel_uid16_t; -typedef unsigned short __kernel_gid16_t; -typedef unsigned int __kernel_uid32_t; -typedef unsigned int __kernel_gid32_t; - -typedef unsigned int __kernel_old_uid_t; -typedef unsigned int __kernel_old_gid_t; -typedef unsigned int __kernel_old_dev_t; - -#ifdef __GNUC__ -typedef long long __kernel_loff_t; -#endif - -typedef struct { -#if defined(__KERNEL__) || defined(__USE_ALL) - int val[2]; -#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ - int __val[2]; -#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ -} __kernel_fsid_t; - -#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) - -#undef __FD_SET -#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) - -#undef __FD_CLR -#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) - -#undef __FD_ISSET -#define __FD_ISSET(d, set) (!!((set)->fds_bits[__FDELT(d)] & __FDMASK(d))) - -#undef __FD_ZERO -#define __FD_ZERO(fdsetp) (memset(fdsetp, 0, sizeof(*(fd_set *)fdsetp))) - -#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */ - -#endif /* _ASM_MICROBLAZE_POSIX_TYPES_H */ diff --git a/trunk/arch/microblaze/include/asm/processor.h b/trunk/arch/microblaze/include/asm/processor.h deleted file mode 100644 index d8e15434ba21..000000000000 --- a/trunk/arch/microblaze/include/asm/processor.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2008 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PROCESSOR_H -#define _ASM_MICROBLAZE_PROCESSOR_H - -#include -#include -#include -#include - -# ifndef __ASSEMBLY__ -/* from kernel/cpu/mb.c */ -extern const struct seq_operations cpuinfo_op; - -# define cpu_relax() barrier() -# define cpu_sleep() do {} while (0) -# define prepare_to_copy(tsk) do {} while (0) - -# endif /* __ASSEMBLY__ */ - -/* - * User space process size: memory size - * - * TASK_SIZE on MMU cpu is usually 1GB. However, on no-MMU arch, both - * user processes and the kernel is on the same memory region. They - * both share the memory space and that is limited by the amount of - * physical memory. thus, we set TASK_SIZE == amount of total memory. - */ -# define TASK_SIZE (0x81000000 - 0x80000000) - -/* - * Default implementation of macro that returns current - * instruction pointer ("program counter"). - */ -# define current_text_addr() ({ __label__ _l; _l: &&_l; }) - -/* - * This decides where the kernel will search for a free chunk of vm - * space during mmap's. We won't be using it - */ -# define TASK_UNMAPPED_BASE 0 - -/* definition in include/linux/sched.h */ -struct task_struct; - -/* thread_struct is gone. use thread_info instead. */ -struct thread_struct { }; -# define INIT_THREAD { } - -/* Do necessary setup to start up a newly executed thread. */ -static inline void start_thread(struct pt_regs *regs, - unsigned long pc, - unsigned long usp) -{ - regs->pc = pc; - regs->r1 = usp; - regs->kernel_mode = 0; -} - -/* Free all resources held by a thread. */ -static inline void release_thread(struct task_struct *dead_task) -{ -} - -/* Free all resources held by a thread. */ -static inline void exit_thread(void) -{ -} - -extern unsigned long thread_saved_pc(struct task_struct *t); - -extern unsigned long get_wchan(struct task_struct *p); - -/* - * create a kernel thread without removing it from tasklists - */ -extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); - -# define task_pt_regs(tsk) \ - (((struct pt_regs *)(THREAD_SIZE + task_stack_page(tsk))) - 1) - -# define KSTK_EIP(tsk) (0) -# define KSTK_ESP(tsk) (0) - -#endif /* _ASM_MICROBLAZE_PROCESSOR_H */ diff --git a/trunk/arch/microblaze/include/asm/prom.h b/trunk/arch/microblaze/include/asm/prom.h deleted file mode 100644 index 20f7b3a926e8..000000000000 --- a/trunk/arch/microblaze/include/asm/prom.h +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Definitions for talking to the Open Firmware PROM on - * Power Macintosh computers. - * - * Copyright (C) 1996-2005 Paul Mackerras. - * - * Updates for PPC64 by Peter Bergner & David Engebretsen, IBM Corp. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#ifndef _ASM_MICROBLAZE_PROM_H -#define _ASM_MICROBLAZE_PROM_H -#ifdef __KERNEL__ - -#include -#include -#include -#include -#include - -#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1 -#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1 - -#define of_compat_cmp(s1, s2, l) strncasecmp((s1), (s2), (l)) -#define of_prop_cmp(s1, s2) strcmp((s1), (s2)) -#define of_node_cmp(s1, s2) strcasecmp((s1), (s2)) - -/* Definitions used by the flattened device tree */ -#define OF_DT_HEADER 0xd00dfeed /* marker */ -#define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */ -#define OF_DT_END_NODE 0x2 /* End node */ -#define OF_DT_PROP 0x3 /* Property: name off, size, content */ -#define OF_DT_NOP 0x4 /* nop */ -#define OF_DT_END 0x9 - -#define OF_DT_VERSION 0x10 - -/* - * This is what gets passed to the kernel by prom_init or kexec - * - * The dt struct contains the device tree structure, full pathes and - * property contents. The dt strings contain a separate block with just - * the strings for the property names, and is fully page aligned and - * self contained in a page, so that it can be kept around by the kernel, - * each property name appears only once in this page (cheap compression) - * - * the mem_rsvmap contains a map of reserved ranges of physical memory, - * passing it here instead of in the device-tree itself greatly simplifies - * the job of everybody. It's just a list of u64 pairs (base/size) that - * ends when size is 0 - */ -struct boot_param_header { - u32 magic; /* magic word OF_DT_HEADER */ - u32 totalsize; /* total size of DT block */ - u32 off_dt_struct; /* offset to structure */ - u32 off_dt_strings; /* offset to strings */ - u32 off_mem_rsvmap; /* offset to memory reserve map */ - u32 version; /* format version */ - u32 last_comp_version; /* last compatible version */ - /* version 2 fields below */ - u32 boot_cpuid_phys; /* Physical CPU id we're booting on */ - /* version 3 fields below */ - u32 dt_strings_size; /* size of the DT strings block */ - /* version 17 fields below */ - u32 dt_struct_size; /* size of the DT structure block */ -}; - -typedef u32 phandle; -typedef u32 ihandle; - -struct property { - char *name; - int length; - void *value; - struct property *next; -}; - -struct device_node { - const char *name; - const char *type; - phandle node; - phandle linux_phandle; - char *full_name; - - struct property *properties; - struct property *deadprops; /* removed properties */ - struct device_node *parent; - struct device_node *child; - struct device_node *sibling; - struct device_node *next; /* next device of same type */ - struct device_node *allnext; /* next in list of all nodes */ - struct proc_dir_entry *pde; /* this node's proc directory */ - struct kref kref; - unsigned long _flags; - void *data; -}; - -extern struct device_node *of_chosen; - -static inline int of_node_check_flag(struct device_node *n, unsigned long flag) -{ - return test_bit(flag, &n->_flags); -} - -static inline void of_node_set_flag(struct device_node *n, unsigned long flag) -{ - set_bit(flag, &n->_flags); -} - -#define HAVE_ARCH_DEVTREE_FIXUPS - -static inline void set_node_proc_entry(struct device_node *dn, - struct proc_dir_entry *de) -{ - dn->pde = de; -} - -extern struct device_node *allnodes; /* temporary while merging */ -extern rwlock_t devtree_lock; /* temporary while merging */ - -extern struct device_node *of_find_all_nodes(struct device_node *prev); -extern struct device_node *of_node_get(struct device_node *node); -extern void of_node_put(struct device_node *node); - -/* For scanning the flat device-tree at boot time */ -extern int __init of_scan_flat_dt(int (*it)(unsigned long node, - const char *uname, int depth, - void *data), - void *data); -extern void *__init of_get_flat_dt_prop(unsigned long node, const char *name, - unsigned long *size); -extern int __init - of_flat_dt_is_compatible(unsigned long node, const char *name); -extern unsigned long __init of_get_flat_dt_root(void); - -/* For updating the device tree at runtime */ -extern void of_attach_node(struct device_node *); -extern void of_detach_node(struct device_node *); - -/* Other Prototypes */ -extern void finish_device_tree(void); -extern void unflatten_device_tree(void); -extern int early_uartlite_console(void); -extern void early_init_devtree(void *); -extern int machine_is_compatible(const char *compat); -extern void print_properties(struct device_node *node); -extern int prom_n_intr_cells(struct device_node *np); -extern void prom_get_irq_senses(unsigned char *senses, int off, int max); -extern int prom_add_property(struct device_node *np, struct property *prop); -extern int prom_remove_property(struct device_node *np, struct property *prop); -extern int prom_update_property(struct device_node *np, - struct property *newprop, - struct property *oldprop); - -extern struct resource *request_OF_resource(struct device_node *node, - int index, const char *name_postfix); -extern int release_OF_resource(struct device_node *node, int index); - -/* - * OF address retreival & translation - */ - -/* Helper to read a big number; size is in cells (not bytes) */ -static inline u64 of_read_number(const u32 *cell, int size) -{ - u64 r = 0; - while (size--) - r = (r << 32) | *(cell++); - return r; -} - -/* Like of_read_number, but we want an unsigned long result */ -#define of_read_ulong(cell, size) of_read_number(cell, size) - -/* Translate an OF address block into a CPU physical address - */ -extern u64 of_translate_address(struct device_node *np, const u32 *addr); - -/* Extract an address from a device, returns the region size and - * the address space flags too. The PCI version uses a BAR number - * instead of an absolute index - */ -extern const u32 *of_get_address(struct device_node *dev, int index, - u64 *size, unsigned int *flags); -extern const u32 *of_get_pci_address(struct device_node *dev, int bar_no, - u64 *size, unsigned int *flags); - -/* Get an address as a resource. Note that if your address is - * a PIO address, the conversion will fail if the physical address - * can't be internally converted to an IO token with - * pci_address_to_pio(), that is because it's either called to early - * or it can't be matched to any host bridge IO space - */ -extern int of_address_to_resource(struct device_node *dev, int index, - struct resource *r); -extern int of_pci_address_to_resource(struct device_node *dev, int bar, - struct resource *r); - -/* Parse the ibm,dma-window property of an OF node into the busno, phys and - * size parameters. - */ -void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, - unsigned long *busno, unsigned long *phys, unsigned long *size); - -extern void kdump_move_device_tree(void); - -/* CPU OF node matching */ -struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); - -/* Get the MAC address */ -extern const void *of_get_mac_address(struct device_node *np); - -/* - * OF interrupt mapping - */ - -/* This structure is returned when an interrupt is mapped. The controller - * field needs to be put() after use - */ - -#define OF_MAX_IRQ_SPEC 4 /* We handle specifiers of at most 4 cells */ - -struct of_irq { - struct device_node *controller; /* Interrupt controller node */ - u32 size; /* Specifier size */ - u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */ -}; - -/** - * of_irq_map_init - Initialize the irq remapper - * @flags: flags defining workarounds to enable - * - * Some machines have bugs in the device-tree which require certain workarounds - * to be applied. Call this before any interrupt mapping attempts to enable - * those workarounds. - */ -#define OF_IMAP_OLDWORLD_MAC 0x00000001 -#define OF_IMAP_NO_PHANDLE 0x00000002 - -extern void of_irq_map_init(unsigned int flags); - -/** - * of_irq_map_raw - Low level interrupt tree parsing - * @parent: the device interrupt parent - * @intspec: interrupt specifier ("interrupts" property of the device) - * @ointsize: size of the passed in interrupt specifier - * @addr: address specifier (start of "reg" property of the device) - * @out_irq: structure of_irq filled by this function - * - * Returns 0 on success and a negative number on error - * - * This function is a low-level interrupt tree walking function. It - * can be used to do a partial walk with synthetized reg and interrupts - * properties, for example when resolving PCI interrupts when no device - * node exist for the parent. - * - */ - -extern int of_irq_map_raw(struct device_node *parent, const u32 *intspec, - u32 ointsize, const u32 *addr, - struct of_irq *out_irq); - -/** - * of_irq_map_one - Resolve an interrupt for a device - * @device: the device whose interrupt is to be resolved - * @index: index of the interrupt to resolve - * @out_irq: structure of_irq filled by this function - * - * This function resolves an interrupt, walking the tree, for a given - * device-tree node. It's the high level pendant to of_irq_map_raw(). - * It also implements the workarounds for OldWolrd Macs. - */ -extern int of_irq_map_one(struct device_node *device, int index, - struct of_irq *out_irq); - -/** - * of_irq_map_pci - Resolve the interrupt for a PCI device - * @pdev: the device whose interrupt is to be resolved - * @out_irq: structure of_irq filled by this function - * - * This function resolves the PCI interrupt for a given PCI device. If a - * device-node exists for a given pci_dev, it will use normal OF tree - * walking. If not, it will implement standard swizzling and walk up the - * PCI tree until an device-node is found, at which point it will finish - * resolving using the OF tree walking. - */ -struct pci_dev; -extern int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq); - -extern int of_irq_to_resource(struct device_node *dev, int index, - struct resource *r); - -/** - * of_iomap - Maps the memory mapped IO for a given device_node - * @device: the device whose io range will be mapped - * @index: index of the io range - * - * Returns a pointer to the mapped memory - */ -extern void __iomem *of_iomap(struct device_node *device, int index); - -/* - * NB: This is here while we transition from using asm/prom.h - * to linux/of.h - */ -#include - -#endif /* __KERNEL__ */ -#endif /* _ASM_MICROBLAZE_PROM_H */ diff --git a/trunk/arch/microblaze/include/asm/ptrace.h b/trunk/arch/microblaze/include/asm/ptrace.h deleted file mode 100644 index f1f03486428a..000000000000 --- a/trunk/arch/microblaze/include/asm/ptrace.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PTRACE_H -#define _ASM_MICROBLAZE_PTRACE_H - -#ifndef __ASSEMBLY__ -#include - -typedef unsigned long microblaze_reg_t; - -struct pt_regs { - microblaze_reg_t r0; - microblaze_reg_t r1; - microblaze_reg_t r2; - microblaze_reg_t r3; - microblaze_reg_t r4; - microblaze_reg_t r5; - microblaze_reg_t r6; - microblaze_reg_t r7; - microblaze_reg_t r8; - microblaze_reg_t r9; - microblaze_reg_t r10; - microblaze_reg_t r11; - microblaze_reg_t r12; - microblaze_reg_t r13; - microblaze_reg_t r14; - microblaze_reg_t r15; - microblaze_reg_t r16; - microblaze_reg_t r17; - microblaze_reg_t r18; - microblaze_reg_t r19; - microblaze_reg_t r20; - microblaze_reg_t r21; - microblaze_reg_t r22; - microblaze_reg_t r23; - microblaze_reg_t r24; - microblaze_reg_t r25; - microblaze_reg_t r26; - microblaze_reg_t r27; - microblaze_reg_t r28; - microblaze_reg_t r29; - microblaze_reg_t r30; - microblaze_reg_t r31; - microblaze_reg_t pc; - microblaze_reg_t msr; - microblaze_reg_t ear; - microblaze_reg_t esr; - microblaze_reg_t fsr; - int kernel_mode; -}; - -#define kernel_mode(regs) ((regs)->kernel_mode) -#define user_mode(regs) (!kernel_mode(regs)) - -#define instruction_pointer(regs) ((regs)->pc) -#define profile_pc(regs) instruction_pointer(regs) - -void show_regs(struct pt_regs *); - -#endif /* __ASSEMBLY__ */ - -#endif /* _ASM_MICROBLAZE_PTRACE_H */ diff --git a/trunk/arch/microblaze/include/asm/pvr.h b/trunk/arch/microblaze/include/asm/pvr.h deleted file mode 100644 index 66f1b30dd097..000000000000 --- a/trunk/arch/microblaze/include/asm/pvr.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Support for the MicroBlaze PVR (Processor Version Register) - * - * Copyright (C) 2009 Michal Simek - * Copyright (C) 2007 John Williams - * Copyright (C) 2007 - 2009 PetaLogix - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_PVR_H -#define _ASM_MICROBLAZE_PVR_H - -#define PVR_MSR_BIT 0x400 - -struct pvr_s { - unsigned pvr[16]; -}; - -/* The following taken from Xilinx's standalone BSP pvr.h */ - -/* Basic PVR mask */ -#define PVR0_PVR_FULL_MASK 0x80000000 -#define PVR0_USE_BARREL_MASK 0x40000000 -#define PVR0_USE_DIV_MASK 0x20000000 -#define PVR0_USE_HW_MUL_MASK 0x10000000 -#define PVR0_USE_FPU_MASK 0x08000000 -#define PVR0_USE_EXC_MASK 0x04000000 -#define PVR0_USE_ICACHE_MASK 0x02000000 -#define PVR0_USE_DCACHE_MASK 0x01000000 -#define PVR0_USE_MMU 0x00800000 /* new */ -#define PVR0_VERSION_MASK 0x0000FF00 -#define PVR0_USER1_MASK 0x000000FF - -/* User 2 PVR mask */ -#define PVR1_USER2_MASK 0xFFFFFFFF - -/* Configuration PVR masks */ -#define PVR2_D_OPB_MASK 0x80000000 -#define PVR2_D_LMB_MASK 0x40000000 -#define PVR2_I_OPB_MASK 0x20000000 -#define PVR2_I_LMB_MASK 0x10000000 -#define PVR2_INTERRUPT_IS_EDGE_MASK 0x08000000 -#define PVR2_EDGE_IS_POSITIVE_MASK 0x04000000 -#define PVR2_D_PLB_MASK 0x02000000 /* new */ -#define PVR2_I_PLB_MASK 0x01000000 /* new */ -#define PVR2_INTERCONNECT 0x00800000 /* new */ -#define PVR2_USE_EXTEND_FSL 0x00080000 /* new */ -#define PVR2_USE_FSL_EXC 0x00040000 /* new */ -#define PVR2_USE_MSR_INSTR 0x00020000 -#define PVR2_USE_PCMP_INSTR 0x00010000 -#define PVR2_AREA_OPTIMISED 0x00008000 -#define PVR2_USE_BARREL_MASK 0x00004000 -#define PVR2_USE_DIV_MASK 0x00002000 -#define PVR2_USE_HW_MUL_MASK 0x00001000 -#define PVR2_USE_FPU_MASK 0x00000800 -#define PVR2_USE_MUL64_MASK 0x00000400 -#define PVR2_USE_FPU2_MASK 0x00000200 /* new */ -#define PVR2_USE_IPLBEXC 0x00000100 -#define PVR2_USE_DPLBEXC 0x00000080 -#define PVR2_OPCODE_0x0_ILL_MASK 0x00000040 -#define PVR2_UNALIGNED_EXC_MASK 0x00000020 -#define PVR2_ILL_OPCODE_EXC_MASK 0x00000010 -#define PVR2_IOPB_BUS_EXC_MASK 0x00000008 -#define PVR2_DOPB_BUS_EXC_MASK 0x00000004 -#define PVR2_DIV_ZERO_EXC_MASK 0x00000002 -#define PVR2_FPU_EXC_MASK 0x00000001 - -/* Debug and exception PVR masks */ -#define PVR3_DEBUG_ENABLED_MASK 0x80000000 -#define PVR3_NUMBER_OF_PC_BRK_MASK 0x1E000000 -#define PVR3_NUMBER_OF_RD_ADDR_BRK_MASK 0x00380000 -#define PVR3_NUMBER_OF_WR_ADDR_BRK_MASK 0x0000E000 -#define PVR3_FSL_LINKS_MASK 0x00000380 - -/* ICache config PVR masks */ -#define PVR4_USE_ICACHE_MASK 0x80000000 -#define PVR4_ICACHE_ADDR_TAG_BITS_MASK 0x7C000000 -#define PVR4_ICACHE_USE_FSL_MASK 0x02000000 -#define PVR4_ICACHE_ALLOW_WR_MASK 0x01000000 -#define PVR4_ICACHE_LINE_LEN_MASK 0x00E00000 -#define PVR4_ICACHE_BYTE_SIZE_MASK 0x001F0000 - -/* DCache config PVR masks */ -#define PVR5_USE_DCACHE_MASK 0x80000000 -#define PVR5_DCACHE_ADDR_TAG_BITS_MASK 0x7C000000 -#define PVR5_DCACHE_USE_FSL_MASK 0x02000000 -#define PVR5_DCACHE_ALLOW_WR_MASK 0x01000000 -#define PVR5_DCACHE_LINE_LEN_MASK 0x00E00000 -#define PVR5_DCACHE_BYTE_SIZE_MASK 0x001F0000 - -/* ICache base address PVR mask */ -#define PVR6_ICACHE_BASEADDR_MASK 0xFFFFFFFF - -/* ICache high address PVR mask */ -#define PVR7_ICACHE_HIGHADDR_MASK 0xFFFFFFFF - -/* DCache base address PVR mask */ -#define PVR8_DCACHE_BASEADDR_MASK 0xFFFFFFFF - -/* DCache high address PVR mask */ -#define PVR9_DCACHE_HIGHADDR_MASK 0xFFFFFFFF - -/* Target family PVR mask */ -#define PVR10_TARGET_FAMILY_MASK 0xFF000000 - -/* MMU descrtiption */ -#define PVR11_USE_MMU 0xC0000000 -#define PVR11_MMU_ITLB_SIZE 0x38000000 -#define PVR11_MMU_DTLB_SIZE 0x07000000 -#define PVR11_MMU_TLB_ACCESS 0x00C00000 -#define PVR11_MMU_ZONES 0x003C0000 -/* MSR Reset value PVR mask */ -#define PVR11_MSR_RESET_VALUE_MASK 0x000007FF - - -/* PVR access macros */ -#define PVR_IS_FULL(pvr) (pvr.pvr[0] & PVR0_PVR_FULL_MASK) -#define PVR_USE_BARREL(pvr) (pvr.pvr[0] & PVR0_USE_BARREL_MASK) -#define PVR_USE_DIV(pvr) (pvr.pvr[0] & PVR0_USE_DIV_MASK) -#define PVR_USE_HW_MUL(pvr) (pvr.pvr[0] & PVR0_USE_HW_MUL_MASK) -#define PVR_USE_FPU(pvr) (pvr.pvr[0] & PVR0_USE_FPU_MASK) -#define PVR_USE_FPU2(pvr) (pvr.pvr[2] & PVR2_USE_FPU2_MASK) -#define PVR_USE_ICACHE(pvr) (pvr.pvr[0] & PVR0_USE_ICACHE_MASK) -#define PVR_USE_DCACHE(pvr) (pvr.pvr[0] & PVR0_USE_DCACHE_MASK) -#define PVR_VERSION(pvr) ((pvr.pvr[0] & PVR0_VERSION_MASK) >> 8) -#define PVR_USER1(pvr) (pvr.pvr[0] & PVR0_USER1_MASK) -#define PVR_USER2(pvr) (pvr.pvr[1] & PVR1_USER2_MASK) - -#define PVR_D_OPB(pvr) (pvr.pvr[2] & PVR2_D_OPB_MASK) -#define PVR_D_LMB(pvr) (pvr.pvr[2] & PVR2_D_LMB_MASK) -#define PVR_I_OPB(pvr) (pvr.pvr[2] & PVR2_I_OPB_MASK) -#define PVR_I_LMB(pvr) (pvr.pvr[2] & PVR2_I_LMB_MASK) -#define PVR_INTERRUPT_IS_EDGE(pvr) \ - (pvr.pvr[2] & PVR2_INTERRUPT_IS_EDGE_MASK) -#define PVR_EDGE_IS_POSITIVE(pvr) \ - (pvr.pvr[2] & PVR2_EDGE_IS_POSITIVE_MASK) -#define PVR_USE_MSR_INSTR(pvr) (pvr.pvr[2] & PVR2_USE_MSR_INSTR) -#define PVR_USE_PCMP_INSTR(pvr) (pvr.pvr[2] & PVR2_USE_PCMP_INSTR) -#define PVR_AREA_OPTIMISED(pvr) (pvr.pvr[2] & PVR2_AREA_OPTIMISED) -#define PVR_USE_MUL64(pvr) (pvr.pvr[2] & PVR2_USE_MUL64_MASK) -#define PVR_OPCODE_0x0_ILLEGAL(pvr) \ - (pvr.pvr[2] & PVR2_OPCODE_0x0_ILL_MASK) -#define PVR_UNALIGNED_EXCEPTION(pvr) \ - (pvr.pvr[2] & PVR2_UNALIGNED_EXC_MASK) -#define PVR_ILL_OPCODE_EXCEPTION(pvr) \ - (pvr.pvr[2] & PVR2_ILL_OPCODE_EXC_MASK) -#define PVR_IOPB_BUS_EXCEPTION(pvr) \ - (pvr.pvr[2] & PVR2_IOPB_BUS_EXC_MASK) -#define PVR_DOPB_BUS_EXCEPTION(pvr) \ - (pvr.pvr[2] & PVR2_DOPB_BUS_EXC_MASK) -#define PVR_DIV_ZERO_EXCEPTION(pvr) \ - (pvr.pvr[2] & PVR2_DIV_ZERO_EXC_MASK) -#define PVR_FPU_EXCEPTION(pvr) (pvr.pvr[2] & PVR2_FPU_EXC_MASK) -#define PVR_FSL_EXCEPTION(pvr) (pvr.pvr[2] & PVR2_USE_EXTEND_FSL) - -#define PVR_DEBUG_ENABLED(pvr) (pvr.pvr[3] & PVR3_DEBUG_ENABLED_MASK) -#define PVR_NUMBER_OF_PC_BRK(pvr) \ - ((pvr.pvr[3] & PVR3_NUMBER_OF_PC_BRK_MASK) >> 25) -#define PVR_NUMBER_OF_RD_ADDR_BRK(pvr) \ - ((pvr.pvr[3] & PVR3_NUMBER_OF_RD_ADDR_BRK_MASK) >> 19) -#define PVR_NUMBER_OF_WR_ADDR_BRK(pvr) \ - ((pvr.pvr[3] & PVR3_NUMBER_OF_WR_ADDR_BRK_MASK) >> 13) -#define PVR_FSL_LINKS(pvr) ((pvr.pvr[3] & PVR3_FSL_LINKS_MASK) >> 7) - -#define PVR_ICACHE_ADDR_TAG_BITS(pvr) \ - ((pvr.pvr[4] & PVR4_ICACHE_ADDR_TAG_BITS_MASK) >> 26) -#define PVR_ICACHE_USE_FSL(pvr) (pvr.pvr[4] & PVR4_ICACHE_USE_FSL_MASK) -#define PVR_ICACHE_ALLOW_WR(pvr) (pvr.pvr[4] & PVR4_ICACHE_ALLOW_WR_MASK) -#define PVR_ICACHE_LINE_LEN(pvr) \ - (1 << ((pvr.pvr[4] & PVR4_ICACHE_LINE_LEN_MASK) >> 21)) -#define PVR_ICACHE_BYTE_SIZE(pvr) \ - (1 << ((pvr.pvr[4] & PVR4_ICACHE_BYTE_SIZE_MASK) >> 16)) - -#define PVR_DCACHE_ADDR_TAG_BITS(pvr) \ - ((pvr.pvr[5] & PVR5_DCACHE_ADDR_TAG_BITS_MASK) >> 26) -#define PVR_DCACHE_USE_FSL(pvr) (pvr.pvr[5] & PVR5_DCACHE_USE_FSL_MASK) -#define PVR_DCACHE_ALLOW_WR(pvr) (pvr.pvr[5] & PVR5_DCACHE_ALLOW_WR_MASK) -#define PVR_DCACHE_LINE_LEN(pvr) \ - (1 << ((pvr.pvr[5] & PVR5_DCACHE_LINE_LEN_MASK) >> 21)) -#define PVR_DCACHE_BYTE_SIZE(pvr) \ - (1 << ((pvr.pvr[5] & PVR5_DCACHE_BYTE_SIZE_MASK) >> 16)) - - -#define PVR_ICACHE_BASEADDR(pvr) (pvr.pvr[6] & PVR6_ICACHE_BASEADDR_MASK) -#define PVR_ICACHE_HIGHADDR(pvr) (pvr.pvr[7] & PVR7_ICACHE_HIGHADDR_MASK) - -#define PVR_DCACHE_BASEADDR(pvr) (pvr.pvr[8] & PVR8_DCACHE_BASEADDR_MASK) -#define PVR_DCACHE_HIGHADDR(pvr) (pvr.pvr[9] & PVR9_DCACHE_HIGHADDR_MASK) - -#define PVR_TARGET_FAMILY(pvr) ((pvr.pvr[10] & PVR10_TARGET_FAMILY_MASK) >> 24) - -#define PVR_MSR_RESET_VALUE(pvr) \ - (pvr.pvr[11] & PVR11_MSR_RESET_VALUE_MASK) - -/* mmu */ -#define PVR_USE_MMU(pvr) ((pvr.pvr[11] & PVR11_USE_MMU) >> 30) -#define PVR_MMU_ITLB_SIZE(pvr) (pvr.pvr[11] & PVR11_MMU_ITLB_SIZE) -#define PVR_MMU_DTLB_SIZE(pvr) (pvr.pvr[11] & PVR11_MMU_DTLB_SIZE) -#define PVR_MMU_TLB_ACCESS(pvr) (pvr.pvr[11] & PVR11_MMU_TLB_ACCESS) -#define PVR_MMU_ZONES(pvr) (pvr.pvr[11] & PVR11_MMU_ZONES) - - -int cpu_has_pvr(void); -void get_pvr(struct pvr_s *pvr); - -#endif /* _ASM_MICROBLAZE_PVR_H */ diff --git a/trunk/arch/microblaze/include/asm/registers.h b/trunk/arch/microblaze/include/asm/registers.h deleted file mode 100644 index 834142d9356f..000000000000 --- a/trunk/arch/microblaze/include/asm/registers.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2008 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_REGISTERS_H -#define _ASM_MICROBLAZE_REGISTERS_H - -#define MSR_BE (1<<0) /* 0x001 */ -#define MSR_IE (1<<1) /* 0x002 */ -#define MSR_C (1<<2) /* 0x004 */ -#define MSR_BIP (1<<3) /* 0x008 */ -#define MSR_FSL (1<<4) /* 0x010 */ -#define MSR_ICE (1<<5) /* 0x020 */ -#define MSR_DZ (1<<6) /* 0x040 */ -#define MSR_DCE (1<<7) /* 0x080 */ -#define MSR_EE (1<<8) /* 0x100 */ -#define MSR_EIP (1<<9) /* 0x200 */ -#define MSR_CC (1<<31) - -/* Floating Point Status Register (FSR) Bits */ -#define FSR_IO (1<<4) /* Invalid operation */ -#define FSR_DZ (1<<3) /* Divide-by-zero */ -#define FSR_OF (1<<2) /* Overflow */ -#define FSR_UF (1<<1) /* Underflow */ -#define FSR_DO (1<<0) /* Denormalized operand error */ - -#endif /* _ASM_MICROBLAZE_REGISTERS_H */ diff --git a/trunk/arch/microblaze/include/asm/scatterlist.h b/trunk/arch/microblaze/include/asm/scatterlist.h deleted file mode 100644 index 08ff1d049b42..000000000000 --- a/trunk/arch/microblaze/include/asm/scatterlist.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SCATTERLIST_H -#define _ASM_MICROBLAZE_SCATTERLIST_H - -struct scatterlist { -#ifdef CONFIG_DEBUG_SG - unsigned long sg_magic; -#endif - unsigned long page_link; - dma_addr_t dma_address; - unsigned int offset; - unsigned int length; -}; - -#define sg_dma_address(sg) ((sg)->dma_address) -#define sg_dma_len(sg) ((sg)->length) - -#define ISA_DMA_THRESHOLD (~0UL) - -#endif /* _ASM_MICROBLAZE_SCATTERLIST_H */ diff --git a/trunk/arch/microblaze/include/asm/sections.h b/trunk/arch/microblaze/include/asm/sections.h deleted file mode 100644 index 8434a43e5421..000000000000 --- a/trunk/arch/microblaze/include/asm/sections.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SECTIONS_H -#define _ASM_MICROBLAZE_SECTIONS_H - -#include - -# ifndef __ASSEMBLY__ -extern char _ssbss[], _esbss[]; -extern unsigned long __ivt_start[], __ivt_end[]; - -# ifdef CONFIG_MTD_UCLINUX -extern char *_ebss; -# endif - -extern u32 _fdt_start[], _fdt_end[]; - -# endif /* !__ASSEMBLY__ */ -#endif /* _ASM_MICROBLAZE_SECTIONS_H */ diff --git a/trunk/arch/microblaze/include/asm/segment.h b/trunk/arch/microblaze/include/asm/segment.h deleted file mode 100644 index 7f5dcc56eea1..000000000000 --- a/trunk/arch/microblaze/include/asm/segment.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2008 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SEGMENT_H -#define _ASM_MICROBLAZE_SEGMENT_H - -#ifndef __ASSEMBLY__ - -typedef struct { - unsigned long seg; -} mm_segment_t; - -/* - * On Microblaze the fs value is actually the top of the corresponding - * address space. - * - * The fs value determines whether argument validity checking should be - * performed or not. If get_fs() == USER_DS, checking is performed, with - * get_fs() == KERNEL_DS, checking is bypassed. - * - * For historical reasons, these macros are grossly misnamed. - * - * For non-MMU arch like Microblaze, KERNEL_DS and USER_DS is equal. - */ -# define KERNEL_DS ((mm_segment_t){0}) -# define USER_DS KERNEL_DS - -# define get_ds() (KERNEL_DS) -# define get_fs() (current_thread_info()->addr_limit) -# define set_fs(x) \ - do { current_thread_info()->addr_limit = (x); } while (0) - -# define segment_eq(a, b) ((a).seg == (b).seg) - -# endif /* __ASSEMBLY__ */ -#endif /* _ASM_MICROBLAZE_SEGMENT_H */ diff --git a/trunk/arch/microblaze/include/asm/selfmod.h b/trunk/arch/microblaze/include/asm/selfmod.h deleted file mode 100644 index c42aff2e6cd0..000000000000 --- a/trunk/arch/microblaze/include/asm/selfmod.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2007-2008 Michal Simek - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SELFMOD_H -#define _ASM_MICROBLAZE_SELFMOD_H - -/* - * BARRIER_BASE_ADDR is constant address for selfmod function. - * do not change this value - selfmod function is in - * arch/microblaze/kernel/selfmod.c: selfmod_function() - * - * last 16 bits is used for storing register offset - */ - -#define BARRIER_BASE_ADDR 0x1234ff00 - -void selfmod_function(const int *arr_fce, const unsigned int base); - -#endif /* _ASM_MICROBLAZE_SELFMOD_H */ diff --git a/trunk/arch/microblaze/include/asm/sembuf.h b/trunk/arch/microblaze/include/asm/sembuf.h deleted file mode 100644 index b804ed71a57e..000000000000 --- a/trunk/arch/microblaze/include/asm/sembuf.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SEMBUF_H -#define _ASM_MICROBLAZE_SEMBUF_H - -/* - * The semid64_ds structure for microblaze architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 64-bit time_t to solve y2038 problem - * - 2 miscellaneous 32-bit values - */ - -struct semid64_ds { - struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ - __kernel_time_t sem_otime; /* last semop time */ - unsigned long __unused1; - __kernel_time_t sem_ctime; /* last change time */ - unsigned long __unused2; - unsigned long sem_nsems; /* no. of semaphores in array */ - unsigned long __unused3; - unsigned long __unused4; -}; - - -#endif /* _ASM_MICROBLAZE_SEMBUF_H */ diff --git a/trunk/arch/microblaze/include/asm/serial.h b/trunk/arch/microblaze/include/asm/serial.h deleted file mode 100644 index 39bfc8ce6af5..000000000000 --- a/trunk/arch/microblaze/include/asm/serial.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (C) 2009 Michal Simek - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SERIAL_H -#define _ASM_MICROBLAZE_SERIAL_H - -# define BASE_BAUD (1843200 / 16) - -#endif /* _ASM_MICROBLAZE_SERIAL_H */ diff --git a/trunk/arch/microblaze/include/asm/setup.h b/trunk/arch/microblaze/include/asm/setup.h deleted file mode 100644 index 9b98e8e6abae..000000000000 --- a/trunk/arch/microblaze/include/asm/setup.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2007-2008 Michal Simek - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SETUP_H -#define _ASM_MICROBLAZE_SETUP_H - -#define COMMAND_LINE_SIZE 256 - -# ifndef __ASSEMBLY__ - -# ifdef __KERNEL__ -extern unsigned int boot_cpuid; /* move to smp.h */ - -extern char cmd_line[COMMAND_LINE_SIZE]; -# endif/* __KERNEL__ */ - -void early_printk(const char *fmt, ...); - -int setup_early_printk(char *opt); -void disable_early_printk(void); - -void heartbeat(void); -void setup_heartbeat(void); - -unsigned long long sched_clock(void); - -void time_init(void); -void init_IRQ(void); -void machine_early_init(const char *cmdline, unsigned int ram, - unsigned int fdt); - -void machine_restart(char *cmd); -void machine_shutdown(void); -void machine_halt(void); -void machine_power_off(void); - -# endif /* __ASSEMBLY__ */ -#endif /* _ASM_MICROBLAZE_SETUP_H */ diff --git a/trunk/arch/microblaze/include/asm/shmbuf.h b/trunk/arch/microblaze/include/asm/shmbuf.h deleted file mode 100644 index f829c5843618..000000000000 --- a/trunk/arch/microblaze/include/asm/shmbuf.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _ASM_MICROBLAZE_SHMBUF_H -#define _ASM_MICROBLAZE_SHMBUF_H - -/* - * The shmid64_ds structure for microblaze architecture. - * Note extra padding because this structure is passed back and forth - * between kernel and user space. - * - * Pad space is left for: - * - 64-bit time_t to solve y2038 problem - * - 2 miscellaneous 32-bit values - */ - -struct shmid64_ds { - struct ipc64_perm shm_perm; /* operation perms */ - size_t shm_segsz; /* size of segment (bytes) */ - __kernel_time_t shm_atime; /* last attach time */ - unsigned long __unused1; - __kernel_time_t shm_dtime; /* last detach time */ - unsigned long __unused2; - __kernel_time_t shm_ctime; /* last change time */ - unsigned long __unused3; - __kernel_pid_t shm_cpid; /* pid of creator */ - __kernel_pid_t shm_lpid; /* pid of last operator */ - unsigned long shm_nattch; /* no. of current attaches */ - unsigned long __unused4; - unsigned long __unused5; -}; - -struct shminfo64 { - unsigned long shmmax; - unsigned long shmmin; - unsigned long shmmni; - unsigned long shmseg; - unsigned long shmall; - unsigned long __unused1; - unsigned long __unused2; - unsigned long __unused3; - unsigned long __unused4; -}; - -#endif /* _ASM_MICROBLAZE_SHMBUF_H */ diff --git a/trunk/arch/microblaze/include/asm/shmparam.h b/trunk/arch/microblaze/include/asm/shmparam.h deleted file mode 100644 index 9f5fc2b3b6a3..000000000000 --- a/trunk/arch/microblaze/include/asm/shmparam.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_MICROBLAZE_SHMPARAM_H -#define _ASM_MICROBLAZE_SHMPARAM_H - -#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ - -#endif /* _ASM_MICROBLAZE_SHMPARAM_H */ diff --git a/trunk/arch/microblaze/include/asm/sigcontext.h b/trunk/arch/microblaze/include/asm/sigcontext.h deleted file mode 100644 index 55873c80c917..000000000000 --- a/trunk/arch/microblaze/include/asm/sigcontext.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SIGCONTEXT_H -#define _ASM_MICROBLAZE_SIGCONTEXT_H - -/* FIXME should be linux/ptrace.h */ -#include - -struct sigcontext { - struct pt_regs regs; - unsigned long oldmask; -}; - -#endif /* _ASM_MICROBLAZE_SIGCONTEXT_H */ diff --git a/trunk/arch/microblaze/include/asm/siginfo.h b/trunk/arch/microblaze/include/asm/siginfo.h deleted file mode 100644 index f162911a8f50..000000000000 --- a/trunk/arch/microblaze/include/asm/siginfo.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SIGINFO_H -#define _ASM_MICROBLAZE_SIGINFO_H - -#include -#include - -#endif /* _ASM_MICROBLAZE_SIGINFO_H */ diff --git a/trunk/arch/microblaze/include/asm/signal.h b/trunk/arch/microblaze/include/asm/signal.h deleted file mode 100644 index 9676fad3486c..000000000000 --- a/trunk/arch/microblaze/include/asm/signal.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * Yasushi SHOJI - * Tetsuya OHKAWA - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SIGNAL_H -#define _ASM_MICROBLAZE_SIGNAL_H - -#define SIGHUP 1 -#define SIGINT 2 -#define SIGQUIT 3 -#define SIGILL 4 -#define SIGTRAP 5 -#define SIGABRT 6 -#define SIGIOT 6 -#define SIGBUS 7 -#define SIGFPE 8 -#define SIGKILL 9 -#define SIGUSR1 10 -#define SIGSEGV 11 -#define SIGUSR2 12 -#define SIGPIPE 13 -#define SIGALRM 14 -#define SIGTERM 15 -#define SIGSTKFLT 16 -#define SIGCHLD 17 -#define SIGCONT 18 -#define SIGSTOP 19 -#define SIGTSTP 20 -#define SIGTTIN 21 -#define SIGTTOU 22 -#define SIGURG 23 -#define SIGXCPU 24 -#define SIGXFSZ 25 -#define SIGVTALRM 26 -#define SIGPROF 27 -#define SIGWINCH 28 -#define SIGIO 29 -#define SIGPOLL SIGIO -/* -#define SIGLOST 29 -*/ -#define SIGPWR 30 -#define SIGSYS 31 -#define SIGUNUSED 31 - -/* These should not be considered constants from userland. */ -#define SIGRTMIN 32 -#define SIGRTMAX _NSIG - -/* - * SA_FLAGS values: - * - * SA_ONSTACK indicates that a registered stack_t will be used. - * SA_RESTART flag to get restarting signals (which were the default long ago) - * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. - * SA_RESETHAND clears the handler when the signal is delivered. - * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. - * SA_NODEFER prevents the current signal from being masked in the handler. - * - * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single - * Unix names RESETHAND and NODEFER respectively. - */ -#define SA_NOCLDSTOP 0x00000001 -#define SA_NOCLDWAIT 0x00000002 -#define SA_SIGINFO 0x00000004 -#define SA_ONSTACK 0x08000000 -#define SA_RESTART 0x10000000 -#define SA_NODEFER 0x40000000 -#define SA_RESETHAND 0x80000000 - -#define SA_NOMASK SA_NODEFER -#define SA_ONESHOT SA_RESETHAND - -#define SA_RESTORER 0x04000000 - -/* - * sigaltstack controls - */ -#define SS_ONSTACK 1 -#define SS_DISABLE 2 - -#define MINSIGSTKSZ 2048 -#define SIGSTKSZ 8192 - -# ifndef __ASSEMBLY__ -# include -# include - -/* Avoid too many header ordering problems. */ -struct siginfo; - -# ifdef __KERNEL__ -/* - * Most things should be clean enough to redefine this at will, if care - * is taken to make libc match. - */ -# define _NSIG 64 -# define _NSIG_BPW 32 -# define _NSIG_WORDS (_NSIG / _NSIG_BPW) - -typedef unsigned long old_sigset_t; /* at least 32 bits */ - -typedef struct { - unsigned long sig[_NSIG_WORDS]; -} sigset_t; - -struct old_sigaction { - __sighandler_t sa_handler; - old_sigset_t sa_mask; - unsigned long sa_flags; - void (*sa_restorer)(void); -}; - -struct sigaction { - __sighandler_t sa_handler; - unsigned long sa_flags; - void (*sa_restorer)(void); - sigset_t sa_mask; /* mask last for extensibility */ -}; - -struct k_sigaction { - struct sigaction sa; -}; - -# include -# undef __HAVE_ARCH_SIG_BITOPS - -# define ptrace_signal_deliver(regs, cookie) do { } while (0) - -# else /* !__KERNEL__ */ - -/* Here we must cater to libcs that poke about in kernel headers. */ - -# define NSIG 32 -typedef unsigned long sigset_t; - -struct sigaction { - union { - __sighandler_t _sa_handler; - void (*_sa_sigaction)(int, struct siginfo *, void *); - } _u; - sigset_t sa_mask; - unsigned long sa_flags; - void (*sa_restorer)(void); -}; - -# define sa_handler _u._sa_handler -# define sa_sigaction _u._sa_sigaction - -# endif /* __KERNEL__ */ - -typedef struct sigaltstack { - void *ss_sp; - int ss_flags; - size_t ss_size; -} stack_t; - -# endif /* __ASSEMBLY__ */ -#endif /* _ASM_MICROBLAZE_SIGNAL_H */ diff --git a/trunk/arch/microblaze/include/asm/socket.h b/trunk/arch/microblaze/include/asm/socket.h deleted file mode 100644 index 825936860314..000000000000 --- a/trunk/arch/microblaze/include/asm/socket.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SOCKET_H -#define _ASM_MICROBLAZE_SOCKET_H - -#include - -/* For setsockoptions(2) */ -#define SOL_SOCKET 1 - -#define SO_DEBUG 1 -#define SO_REUSEADDR 2 -#define SO_TYPE 3 -#define SO_ERROR 4 -#define SO_DONTROUTE 5 -#define SO_BROADCAST 6 -#define SO_SNDBUF 7 -#define SO_RCVBUF 8 -#define SO_SNDBUFFORCE 32 -#define SO_RCVBUFFORCE 33 -#define SO_KEEPALIVE 9 -#define SO_OOBINLINE 10 -#define SO_NO_CHECK 11 -#define SO_PRIORITY 12 -#define SO_LINGER 13 -#define SO_BSDCOMPAT 14 -/* To add :#define SO_REUSEPORT 15 */ -#define SO_PASSCRED 16 -#define SO_PEERCRED 17 -#define SO_RCVLOWAT 18 -#define SO_SNDLOWAT 19 -#define SO_RCVTIMEO 20 -#define SO_SNDTIMEO 21 - -/* Security levels - as per NRL IPv6 - don't actually do anything */ -#define SO_SECURITY_AUTHENTICATION 22 -#define SO_SECURITY_ENCRYPTION_TRANSPORT 23 -#define SO_SECURITY_ENCRYPTION_NETWORK 24 - -#define SO_BINDTODEVICE 25 - -/* Socket filtering */ -#define SO_ATTACH_FILTER 26 -#define SO_DETACH_FILTER 27 - -#define SO_PEERNAME 28 -#define SO_TIMESTAMP 29 -#define SCM_TIMESTAMP SO_TIMESTAMP - -#define SO_ACCEPTCONN 30 - -#define SO_PEERSEC 31 -#define SO_PASSSEC 34 - -#define SO_TIMESTAMPNS 35 -#define SCM_TIMESTAMPNS SO_TIMESTAMPNS - -#define SO_MARK 36 - -#define SO_TIMESTAMPING 37 -#define SCM_TIMESTAMPING SO_TIMESTAMPING - -#endif /* _ASM_MICROBLAZE_SOCKET_H */ diff --git a/trunk/arch/microblaze/include/asm/sockios.h b/trunk/arch/microblaze/include/asm/sockios.h deleted file mode 100644 index 9fff57a701e1..000000000000 --- a/trunk/arch/microblaze/include/asm/sockios.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SOCKIOS_H -#define _ASM_MICROBLAZE_SOCKIOS_H - -#include - -/* Socket-level I/O control calls. */ -#define FIOSETOWN 0x8901 -#define SIOCSPGRP 0x8902 -#define FIOGETOWN 0x8903 -#define SIOCGPGRP 0x8904 -#define SIOCATMARK 0x8905 -#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ - -#endif /* _ASM_MICROBLAZE_SOCKIOS_H */ diff --git a/trunk/arch/microblaze/include/asm/stat.h b/trunk/arch/microblaze/include/asm/stat.h deleted file mode 100644 index 5f18b8aed220..000000000000 --- a/trunk/arch/microblaze/include/asm/stat.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Microblaze stat structure - * - * 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 - */ - -#ifndef _ASM_MICROBLAZE_STAT_H -#define _ASM_MICROBLAZE_STAT_H - -#include - -struct stat { - unsigned int st_dev; - unsigned long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - unsigned long st_size; - unsigned long st_blksize; - unsigned long st_blocks; - unsigned long st_atime; - unsigned long __unused1; /* unsigned long st_atime_nsec */ - unsigned long st_mtime; - unsigned long __unused2; /* unsigned long st_mtime_nsec */ - unsigned long st_ctime; - unsigned long __unused3; /* unsigned long st_ctime_nsec */ - unsigned long __unused4; - unsigned long __unused5; -}; - -struct stat64 { - unsigned long long st_dev; - unsigned long __unused1; - - unsigned long long st_ino; - - unsigned int st_mode; - unsigned int st_nlink; - - unsigned int st_uid; - unsigned int st_gid; - - unsigned long long st_rdev; - unsigned long __unused3; - - long long st_size; - unsigned long st_blksize; - - unsigned long st_blocks; /* No. of 512-byte blocks allocated */ - unsigned long __unused4; /* future possible st_blocks high bits */ - - unsigned long st_atime; - unsigned long st_atime_nsec; - - unsigned long st_mtime; - unsigned long st_mtime_nsec; - - unsigned long st_ctime; - unsigned long st_ctime_nsec; - - unsigned long __unused8; -}; - -#endif /* _ASM_MICROBLAZE_STAT_H */ diff --git a/trunk/arch/microblaze/include/asm/string.h b/trunk/arch/microblaze/include/asm/string.h deleted file mode 100644 index f7728c90fc18..000000000000 --- a/trunk/arch/microblaze/include/asm/string.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_STRING_H -#define _ASM_MICROBLAZE_STRING_H - -#ifndef __KERNEL__ - -#define __HAVE_ARCH_MEMSET -#define __HAVE_ARCH_MEMCPY -#define __HAVE_ARCH_MEMMOVE - -extern void *memset(void *, int, __kernel_size_t); -extern void *memcpy(void *, const void *, __kernel_size_t); -extern void *memmove(void *, const void *, __kernel_size_t); - -#endif /* __KERNEL__ */ - -#endif /* _ASM_MICROBLAZE_STRING_H */ diff --git a/trunk/arch/microblaze/include/asm/swab.h b/trunk/arch/microblaze/include/asm/swab.h deleted file mode 100644 index b375d7b65ad7..000000000000 --- a/trunk/arch/microblaze/include/asm/swab.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _ASM_MICROBLAZE_SWAB_H -#define _ASM_MICROBLAZE_SWAB_H - -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__) -#define __SWAB_64_THRU_32__ -#endif - -#endif /* _ASM_MICROBLAZE_SWAB_H */ diff --git a/trunk/arch/microblaze/include/asm/syscalls.h b/trunk/arch/microblaze/include/asm/syscalls.h deleted file mode 100644 index 9cb4ff0edeb2..000000000000 --- a/trunk/arch/microblaze/include/asm/syscalls.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __ASM_MICROBLAZE_SYSCALLS_H -#define __ASM_MICROBLAZE_SYSCALLS_H -#ifdef __KERNEL__ - -#include -#include -#include -#include - -/* FIXME will be removed */ -asmlinkage int sys_ipc(uint call, int first, int second, - int third, void *ptr, long fifth); - -struct pt_regs; -asmlinkage int sys_vfork(struct pt_regs *regs); -asmlinkage int sys_clone(int flags, unsigned long stack, struct pt_regs *regs); -asmlinkage int sys_execve(char __user *filenamei, char __user *__user *argv, - char __user *__user *envp, struct pt_regs *regs); - -asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff); - -asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len, - unsigned long prot, unsigned long flags, - unsigned long fd, off_t offset); - -/* from signal.c */ -asmlinkage int sys_sigsuspend(old_sigset_t mask, struct pt_regs *regs); - -asmlinkage int sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, - struct pt_regs *regs); - -asmlinkage int sys_sigaction(int sig, const struct old_sigaction *act, - struct old_sigaction *oact); - -asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, - struct pt_regs *regs); - -asmlinkage int sys_sigreturn(struct pt_regs *regs); - -asmlinkage int sys_rt_sigreturn(struct pt_regs *regs); - -#endif /* __KERNEL__ */ -#endif /* __ASM_MICROBLAZE_SYSCALLS_H */ diff --git a/trunk/arch/microblaze/include/asm/system.h b/trunk/arch/microblaze/include/asm/system.h deleted file mode 100644 index c4e308850b5d..000000000000 --- a/trunk/arch/microblaze/include/asm/system.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_SYSTEM_H -#define _ASM_MICROBLAZE_SYSTEM_H - -#include -#include -#include - -struct task_struct; -struct thread_info; - -extern struct task_struct *_switch_to(struct thread_info *prev, - struct thread_info *next); - -#define switch_to(prev, next, last) \ - do { \ - (last) = _switch_to(task_thread_info(prev), \ - task_thread_info(next)); \ - } while (0) - -#define smp_read_barrier_depends() do {} while (0) -#define read_barrier_depends() do {} while (0) - -#define nop() asm volatile ("nop") -#define mb() barrier() -#define rmb() mb() -#define wmb() mb() -#define set_mb(var, value) do { var = value; mb(); } while (0) -#define set_wmb(var, value) do { var = value; wmb(); } while (0) - -#define smp_mb() mb() -#define smp_rmb() rmb() -#define smp_wmb() wmb() - -void show_trace(struct task_struct *task, unsigned long *stack); -void __bad_xchg(volatile void *ptr, int size); - -static inline unsigned long __xchg(unsigned long x, volatile void *ptr, - int size) -{ - unsigned long ret; - unsigned long flags; - - switch (size) { - case 1: - local_irq_save(flags); - ret = *(volatile unsigned char *)ptr; - *(volatile unsigned char *)ptr = x; - local_irq_restore(flags); - break; - - case 4: - local_irq_save(flags); - ret = *(volatile unsigned long *)ptr; - *(volatile unsigned long *)ptr = x; - local_irq_restore(flags); - break; - default: - __bad_xchg(ptr, size), ret = 0; - break; - } - - return ret; -} - -void disable_hlt(void); -void enable_hlt(void); -void default_idle(void); - -#define xchg(ptr, x) \ - ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) - -void free_init_pages(char *what, unsigned long begin, unsigned long end); -void free_initmem(void); -extern char *klimit; -extern void ret_from_fork(void); - -#ifdef CONFIG_DEBUG_FS -extern struct dentry *of_debugfs_root; -#endif - -#define arch_align_stack(x) (x) - -#endif /* _ASM_MICROBLAZE_SYSTEM_H */ diff --git a/trunk/arch/microblaze/include/asm/termbits.h b/trunk/arch/microblaze/include/asm/termbits.h deleted file mode 100644 index a1b64bc4724a..000000000000 --- a/trunk/arch/microblaze/include/asm/termbits.h +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_TERMBITS_H -#define _ASM_MICROBLAZE_TERMBITS_H - -#include - -typedef unsigned char cc_t; -typedef unsigned int speed_t; -typedef unsigned int tcflag_t; - -#define NCCS 19 -struct termios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ -}; - -struct ktermios { - tcflag_t c_iflag; /* input mode flags */ - tcflag_t c_oflag; /* output mode flags */ - tcflag_t c_cflag; /* control mode flags */ - tcflag_t c_lflag; /* local mode flags */ - cc_t c_line; /* line discipline */ - cc_t c_cc[NCCS]; /* control characters */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -}; - -/* c_cc characters */ - -#define VINTR 0 -#define VQUIT 1 -#define VERASE 2 -#define VKILL 3 -#define VEOF 4 -#define VTIME 5 -#define VMIN 6 -#define VSWTC 7 -#define VSTART 8 -#define VSTOP 9 -#define VSUSP 10 -#define VEOL 11 -#define VREPRINT 12 -#define VDISCARD 13 -#define VWERASE 14 -#define VLNEXT 15 -#define VEOL2 16 - -/* c_iflag bits */ - -#define IGNBRK 0000001 -#define BRKINT 0000002 -#define IGNPAR 0000004 -#define PARMRK 0000010 -#define INPCK 0000020 -#define ISTRIP 0000040 -#define INLCR 0000100 -#define IGNCR 0000200 -#define ICRNL 0000400 -#define IUCLC 0001000 -#define IXON 0002000 -#define IXANY 0004000 -#define IXOFF 0010000 -#define IMAXBEL 0020000 -#define IUTF8 0040000 - -/* c_oflag bits */ - -#define OPOST 0000001 -#define OLCUC 0000002 -#define ONLCR 0000004 -#define OCRNL 0000010 -#define ONOCR 0000020 -#define ONLRET 0000040 -#define OFILL 0000100 -#define OFDEL 0000200 -#define NLDLY 0000400 -#define NL0 0000000 -#define NL1 0000400 -#define CRDLY 0003000 -#define CR0 0000000 -#define CR1 0001000 -#define CR2 0002000 -#define CR3 0003000 -#define TABDLY 0014000 -#define TAB0 0000000 -#define TAB1 0004000 -#define TAB2 0010000 -#define TAB3 0014000 -#define XTABS 0014000 -#define BSDLY 0020000 -#define BS0 0000000 -#define BS1 0020000 -#define VTDLY 0040000 -#define VT0 0000000 -#define VT1 0040000 -#define FFDLY 0100000 -#define FF0 0000000 -#define FF1 0100000 - -/* c_cflag bit meaning */ - -#define CBAUD 0010017 -#define B0 0000000 /* hang up */ -#define B50 0000001 -#define B75 0000002 -#define B110 0000003 -#define B134 0000004 -#define B150 0000005 -#define B200 0000006 -#define B300 0000007 -#define B600 0000010 -#define B1200 0000011 -#define B1800 0000012 -#define B2400 0000013 -#define B4800 0000014 -#define B9600 0000015 -#define B19200 0000016 -#define B38400 0000017 -#define EXTA B19200 -#define EXTB B38400 -#define CSIZE 0000060 -#define CS5 0000000 -#define CS6 0000020 -#define CS7 0000040 -#define CS8 0000060 -#define CSTOPB 0000100 -#define CREAD 0000200 -#define PARENB 0000400 -#define PARODD 0001000 -#define HUPCL 0002000 -#define CLOCAL 0004000 -#define CBAUDEX 0010000 -#define B57600 0010001 -#define B115200 0010002 -#define B230400 0010003 -#define B460800 0010004 -#define B500000 0010005 -#define B576000 0010006 -#define B921600 0010007 -#define BOTHER 0010000 -#define B1000000 0010010 -#define B1152000 0010011 -#define B1500000 0010012 -#define B2000000 0010013 -#define B2500000 0010014 -#define B3000000 0010015 -#define B3500000 0010016 -#define B4000000 0010017 -#define CIBAUD 002003600000 /* input baud rate (not used) */ -#define CMSPAR 010000000000 /* mark or space (stick) parity */ -#define CRTSCTS 020000000000 /* flow control */ - -#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ - -/* c_lflag bits */ - -#define ISIG 0000001 -#define ICANON 0000002 -#define XCASE 0000004 -#define ECHO 0000010 -#define ECHOE 0000020 -#define ECHOK 0000040 -#define ECHONL 0000100 -#define NOFLSH 0000200 -#define TOSTOP 0000400 -#define ECHOCTL 0001000 -#define ECHOPRT 0002000 -#define ECHOKE 0004000 -#define FLUSHO 0010000 -#define PENDIN 0040000 -#define IEXTEN 0100000 - -/* tcflow() and TCXONC use these */ - -#define TCOOFF 0 -#define TCOON 1 -#define TCIOFF 2 -#define TCION 3 - -/* tcflush() and TCFLSH use these */ - -#define TCIFLUSH 0 -#define TCOFLUSH 1 -#define TCIOFLUSH 2 - -/* tcsetattr uses these */ - -#define TCSANOW 0 -#define TCSADRAIN 1 -#define TCSAFLUSH 2 - -#endif /* _ASM_MICROBLAZE_TERMBITS_H */ diff --git a/trunk/arch/microblaze/include/asm/termios.h b/trunk/arch/microblaze/include/asm/termios.h deleted file mode 100644 index 102d77258668..000000000000 --- a/trunk/arch/microblaze/include/asm/termios.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_TERMIOS_H -#define _ASM_MICROBLAZE_TERMIOS_H - -#include -#include -#include - -struct winsize { - unsigned short ws_row; - unsigned short ws_col; - unsigned short ws_xpixel; - unsigned short ws_ypixel; -}; - -#define NCC 8 -struct termio { - unsigned short c_iflag; /* input mode flags */ - unsigned short c_oflag; /* output mode flags */ - unsigned short c_cflag; /* control mode flags */ - unsigned short c_lflag; /* local mode flags */ - unsigned char c_line; /* line discipline */ - unsigned char c_cc[NCC]; /* control characters */ -}; - -#ifdef __KERNEL__ -/* intr=^C quit=^| erase=del kill=^U - eof=^D vtime=\0 vmin=\1 sxtc=\0 - start=^Q stop=^S susp=^Z eol=\0 - reprint=^R discard=^U werase=^W lnext=^V - eol2=\0 -*/ -#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" -#endif - -/* Modem lines */ - -#define TIOCM_LE 0x001 -#define TIOCM_DTR 0x002 -#define TIOCM_RTS 0x004 -#define TIOCM_ST 0x008 -#define TIOCM_SR 0x010 -#define TIOCM_CTS 0x020 -#define TIOCM_CAR 0x040 -#define TIOCM_RNG 0x080 -#define TIOCM_DSR 0x100 -#define TIOCM_CD TIOCM_CAR -#define TIOCM_RI TIOCM_RNG -#define TIOCM_OUT1 0x2000 -#define TIOCM_OUT2 0x4000 -#define TIOCM_LOOP 0x8000 - -/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ - -/* Line disciplines */ - -#define N_TTY 0 -#define N_SLIP 1 -#define N_MOUSE 2 -#define N_PPP 3 -#define N_STRIP 4 -#define N_AX25 5 -#define N_X25 6 /* X.25 async */ -#define N_6PACK 7 -#define N_MASC 8 /* Reserved for Mobitex module */ -#define N_R3964 9 /* Reserved for Simatic R3964 module */ -#define N_PROFIBUS_FDL 10 /* Reserved for Profibus */ -#define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */ -#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards - about SMS messages */ -#define N_HDLC 13 /* synchronous HDLC */ -#define N_SYNC_PPP 14 -#define N_HCI 15 /* Bluetooth HCI UART */ - -#ifdef __KERNEL__ - -#include - -#endif /* __KERNEL__ */ - -#endif /* _ASM_MICROBLAZE_TERMIOS_H */ diff --git a/trunk/arch/microblaze/include/asm/thread_info.h b/trunk/arch/microblaze/include/asm/thread_info.h deleted file mode 100644 index 4c3943e3f403..000000000000 --- a/trunk/arch/microblaze/include/asm/thread_info.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_THREAD_INFO_H -#define _ASM_MICROBLAZE_THREAD_INFO_H - -#ifdef __KERNEL__ - -/* we have 8k stack */ -#define THREAD_SHIFT 13 -#define THREAD_SIZE (1 << THREAD_SHIFT) -#define THREAD_SIZE_ORDER 1 - -#ifndef __ASSEMBLY__ -# include -# include -# include - -/* - * low level task data that entry.S needs immediate access to - * - this struct should fit entirely inside of one cache line - * - this struct shares the supervisor stack pages - * - if the contents of this structure are changed, the assembly constants - * must also be changed - */ - -struct cpu_context { - __u32 r1; /* stack pointer */ - __u32 r2; - /* dedicated registers */ - __u32 r13; - __u32 r14; - __u32 r15; - __u32 r16; - __u32 r17; - __u32 r18; - /* non-volatile registers */ - __u32 r19; - __u32 r20; - __u32 r21; - __u32 r22; - __u32 r23; - __u32 r24; - __u32 r25; - __u32 r26; - __u32 r27; - __u32 r28; - __u32 r29; - __u32 r30; - /* r31 is used as current task pointer */ - /* special purpose registers */ - __u32 msr; - __u32 ear; - __u32 esr; - __u32 fsr; -}; - -struct thread_info { - struct task_struct *task; /* main task structure */ - struct exec_domain *exec_domain; /* execution domain */ - unsigned long flags; /* low level flags */ - unsigned long status; /* thread-synchronous flags */ - __u32 cpu; /* current CPU */ - __s32 preempt_count; /* 0 => preemptable,< 0 => BUG*/ - mm_segment_t addr_limit; /* thread address space */ - struct restart_block restart_block; - - struct cpu_context cpu_context; -}; - -/* - * macros/functions for gaining access to the thread information structure - * - * preempt_count needs to be 1 initially, until the scheduler is functional. - */ -#define INIT_THREAD_INFO(tsk) \ -{ \ - .task = &tsk, \ - .exec_domain = &default_exec_domain, \ - .flags = 0, \ - .cpu = 0, \ - .preempt_count = 1, \ - .addr_limit = KERNEL_DS, \ - .restart_block = { \ - .fn = do_no_restart_syscall, \ - }, \ -} - -#define init_thread_info (init_thread_union.thread_info) -#define init_stack (init_thread_union.stack) - -/* how to get the thread information struct from C */ -static inline struct thread_info *current_thread_info(void) -{ - register unsigned long sp asm("r1"); - - return (struct thread_info *)(sp & ~(THREAD_SIZE-1)); -} - -/* thread information allocation */ -#endif /* __ASSEMBLY__ */ - -#define PREEMPT_ACTIVE 0x10000000 - -/* - * thread information flags - * - these are process state flags that various assembly files may - * need to access - * - pending work-to-be-done flags are in LSW - * - other flags in MSW - */ -#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ -#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ -#define TIF_SIGPENDING 2 /* signal pending */ -#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ -/* restore singlestep on return to user mode */ -#define TIF_SINGLESTEP 4 -#define TIF_IRET 5 /* return with iret */ -#define TIF_MEMDIE 6 -#define TIF_FREEZE 14 /* Freezing for suspend */ - -/* FIXME change in entry.S */ -#define TIF_KERNEL_TRACE 8 /* kernel trace active */ - -/* true if poll_idle() is polling TIF_NEED_RESCHED */ -#define TIF_POLLING_NRFLAG 16 - -#define _TIF_SYSCALL_TRACE (1< - -#endif /* _ASM_MICROBLAZE_TLB_H */ diff --git a/trunk/arch/microblaze/include/asm/tlbflush.h b/trunk/arch/microblaze/include/asm/tlbflush.h deleted file mode 100644 index d7fe7629001b..000000000000 --- a/trunk/arch/microblaze/include/asm/tlbflush.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_TLBFLUSH_H -#define _ASM_MICROBLAZE_TLBFLUSH_H - -#define flush_tlb() BUG() -#define flush_tlb_all() BUG() -#define flush_tlb_mm(mm) BUG() -#define flush_tlb_page(vma, addr) BUG() -#define flush_tlb_range(mm, start, end) BUG() -#define flush_tlb_pgtables(mm, start, end) BUG() -#define flush_tlb_kernel_range(start, end) BUG() - -#endif /* _ASM_MICROBLAZE_TLBFLUSH_H */ diff --git a/trunk/arch/microblaze/include/asm/topology.h b/trunk/arch/microblaze/include/asm/topology.h deleted file mode 100644 index 96bcea5a9920..000000000000 --- a/trunk/arch/microblaze/include/asm/topology.h +++ /dev/null @@ -1,11 +0,0 @@ -#include - -#ifndef _ASM_MICROBLAZE_TOPOLOGY_H -#define _ASM_MICROBLAZE_TOPOLOGY_H - -struct device_node; -static inline int of_node_to_nid(struct device_node *device) -{ - return 0; -} -#endif /* _ASM_MICROBLAZE_TOPOLOGY_H */ diff --git a/trunk/arch/microblaze/include/asm/types.h b/trunk/arch/microblaze/include/asm/types.h deleted file mode 100644 index bebc018318f5..000000000000 --- a/trunk/arch/microblaze/include/asm/types.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_TYPES_H -#define _ASM_MICROBLAZE_TYPES_H - -/* - * This file is never included by application software unless - * explicitly requested (e.g., via linux/types.h) in which case the - * application is Linux specific so (user-) name space pollution is - * not a major issue. However, for interoperability, libraries still - * need to be careful to avoid a name clashes. - */ - -#include - -# ifndef __ASSEMBLY__ - -typedef unsigned short umode_t; - -/* - * These aren't exported outside the kernel to avoid name space clashes - */ -# ifdef __KERNEL__ -# define BITS_PER_LONG 32 - -/* Dma addresses are 32-bits wide. */ - -typedef u32 dma_addr_t; - -# endif/* __KERNEL__ */ -# endif /* __ASSEMBLY__ */ -#endif /* _ASM_MICROBLAZE_TYPES_H */ diff --git a/trunk/arch/microblaze/include/asm/uaccess.h b/trunk/arch/microblaze/include/asm/uaccess.h deleted file mode 100644 index 5a3ffc308e12..000000000000 --- a/trunk/arch/microblaze/include/asm/uaccess.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_UACCESS_H -#define _ASM_MICROBLAZE_UACCESS_H - -#ifdef __KERNEL__ -#ifndef __ASSEMBLY__ - -#include -#include -#include /* RLIMIT_FSIZE */ -#include - -#include -#include -#include -#include -#include - -#define VERIFY_READ 0 -#define VERIFY_WRITE 1 - -extern int ___range_ok(unsigned long addr, unsigned long size); - -#define __range_ok(addr, size) \ - ___range_ok((unsigned long)(addr), (unsigned long)(size)) - -#define access_ok(type, addr, size) (__range_ok((addr), (size)) == 0) -#define __access_ok(add, size) (__range_ok((addr), (size)) == 0) - -extern inline int bad_user_access_length(void) -{ - return 0; -} -/* FIXME this is function for optimalization -> memcpy */ -#define __get_user(var, ptr) \ - ({ \ - int __gu_err = 0; \ - switch (sizeof(*(ptr))) { \ - case 1: \ - case 2: \ - case 4: \ - (var) = *(ptr); \ - break; \ - case 8: \ - memcpy((void *) &(var), (ptr), 8); \ - break; \ - default: \ - (var) = 0; \ - __gu_err = __get_user_bad(); \ - break; \ - } \ - __gu_err; \ - }) - -#define __get_user_bad() (bad_user_access_length(), (-EFAULT)) - -#define __put_user(var, ptr) \ - ({ \ - int __pu_err = 0; \ - switch (sizeof(*(ptr))) { \ - case 1: \ - case 2: \ - case 4: \ - *(ptr) = (var); \ - break; \ - case 8: { \ - typeof(*(ptr)) __pu_val = var; \ - memcpy(ptr, &__pu_val, sizeof(__pu_val));\ - } \ - break; \ - default: \ - __pu_err = __put_user_bad(); \ - break; \ - } \ - __pu_err; \ - }) - -#define __put_user_bad() (bad_user_access_length(), (-EFAULT)) - -#define put_user(x, ptr) __put_user(x, ptr) -#define get_user(x, ptr) __get_user(x, ptr) - -#define copy_to_user(to, from, n) (memcpy(to, from, n), 0) -#define copy_from_user(to, from, n) (memcpy(to, from, n), 0) - -#define __copy_to_user(to, from, n) (copy_to_user(to, from, n)) -#define __copy_from_user(to, from, n) (copy_from_user(to, from, n)) -#define __copy_to_user_inatomic(to, from, n) (__copy_to_user(to, from, n)) -#define __copy_from_user_inatomic(to, from, n) (__copy_from_user(to, from, n)) - -#define __clear_user(addr, n) (memset((void *)addr, 0, n), 0) - -static inline unsigned long clear_user(void *addr, unsigned long size) -{ - if (access_ok(VERIFY_WRITE, addr, size)) - size = __clear_user(addr, size); - return size; -} - -/* Returns 0 if exception not found and fixup otherwise. */ -extern unsigned long search_exception_table(unsigned long); - - -extern long strncpy_from_user(char *dst, const char __user *src, long count); -extern long strnlen_user(const char __user *src, long count); -extern long __strncpy_from_user(char *dst, const char __user *src, long count); - -/* - * The exception table consists of pairs of addresses: the first is the - * address of an instruction that is allowed to fault, and the second is - * the address at which the program should continue. No registers are - * modified, so it is entirely up to the continuation code to figure out - * what to do. - * - * All the routines below use bits of fixup code that are out of line - * with the main instruction path. This means when everything is well, - * we don't even have to jump over them. Further, they do not intrude - * on our cache or tlb entries. - */ -struct exception_table_entry { - unsigned long insn, fixup; -}; - -#endif /* __ASSEMBLY__ */ -#endif /* __KERNEL__ */ - -#endif /* _ASM_MICROBLAZE_UACCESS_H */ diff --git a/trunk/arch/microblaze/include/asm/ucontext.h b/trunk/arch/microblaze/include/asm/ucontext.h deleted file mode 100644 index 11f6bb3ae3a4..000000000000 --- a/trunk/arch/microblaze/include/asm/ucontext.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_UCONTEXT_H -#define _ASM_MICROBLAZE_UCONTEXT_H - -#include - -struct ucontext { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - struct sigcontext uc_mcontext; - sigset_t uc_sigmask; /* mask last for extensibility */ -}; - -#endif /* _ASM_MICROBLAZE_UCONTEXT_H */ diff --git a/trunk/arch/microblaze/include/asm/unaligned.h b/trunk/arch/microblaze/include/asm/unaligned.h deleted file mode 100644 index 9d66b640c910..000000000000 --- a/trunk/arch/microblaze/include/asm/unaligned.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2008 Michal Simek - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_UNALIGNED_H -#define _ASM_MICROBLAZE_UNALIGNED_H - -# ifdef __KERNEL__ - -# include -# include - -# define get_unaligned __get_unaligned_be -# define put_unaligned __put_unaligned_be - -# endif /* __KERNEL__ */ -#endif /* _ASM_MICROBLAZE_UNALIGNED_H */ diff --git a/trunk/arch/microblaze/include/asm/unistd.h b/trunk/arch/microblaze/include/asm/unistd.h deleted file mode 100644 index d9d3903fde3f..000000000000 --- a/trunk/arch/microblaze/include/asm/unistd.h +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright (C) 2007-2008 Michal Simek - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#ifndef _ASM_MICROBLAZE_UNISTD_H -#define _ASM_MICROBLAZE_UNISTD_H - -#define __NR_restart_syscall 0 /* ok */ -#define __NR_exit 1 /* ok */ -#define __NR_fork 2 /* not for no MMU - weird */ -#define __NR_read 3 /* ok */ -#define __NR_write 4 /* ok */ -#define __NR_open 5 /* openat */ -#define __NR_close 6 /* ok */ -#define __NR_waitpid 7 /* waitid */ -#define __NR_creat 8 /* openat */ -#define __NR_link 9 /* linkat */ -#define __NR_unlink 10 /* unlinkat */ -#define __NR_execve 11 /* ok */ -#define __NR_chdir 12 /* ok */ -#define __NR_time 13 /* obsolete -> sys_gettimeofday */ -#define __NR_mknod 14 /* mknodat */ -#define __NR_chmod 15 /* fchmodat */ -#define __NR_lchown 16 /* ok */ -#define __NR_break 17 /* don't know */ -#define __NR_oldstat 18 /* remove */ -#define __NR_lseek 19 /* ok */ -#define __NR_getpid 20 /* ok */ -#define __NR_mount 21 /* ok */ -#define __NR_umount 22 /* ok */ /* use only umount2 */ -#define __NR_setuid 23 /* ok */ -#define __NR_getuid 24 /* ok */ -#define __NR_stime 25 /* obsolete -> sys_settimeofday */ -#define __NR_ptrace 26 /* ok */ -#define __NR_alarm 27 /* obsolete -> sys_setitimer */ -#define __NR_oldfstat 28 /* remove */ -#define __NR_pause 29 /* obsolete -> sys_rt_sigtimedwait */ -#define __NR_utime 30 /* obsolete -> sys_utimesat */ -#define __NR_stty 31 /* remove */ -#define __NR_gtty 32 /* remove */ -#define __NR_access 33 /* faccessat */ -/* can be implemented by sys_setpriority */ -#define __NR_nice 34 -#define __NR_ftime 35 /* remove */ -#define __NR_sync 36 /* ok */ -#define __NR_kill 37 /* ok */ -#define __NR_rename 38 /* renameat */ -#define __NR_mkdir 39 /* mkdirat */ -#define __NR_rmdir 40 /* unlinkat */ -#define __NR_dup 41 /* ok */ -#define __NR_pipe 42 /* ok */ -#define __NR_times 43 /* ok */ -#define __NR_prof 44 /* remove */ -#define __NR_brk 45 /* ok -mmu, nommu specific */ -#define __NR_setgid 46 /* ok */ -#define __NR_getgid 47 /* ok */ -#define __NR_signal 48 /* obsolete -> sys_rt_sigaction */ -#define __NR_geteuid 49 /* ok */ -#define __NR_getegid 50 /* ok */ -#define __NR_acct 51 /* add it and then I can disable it */ -#define __NR_umount2 52 /* remove */ -#define __NR_lock 53 /* remove */ -#define __NR_ioctl 54 /* ok */ -#define __NR_fcntl 55 /* ok -> 64bit version*/ -#define __NR_mpx 56 /* remove */ -#define __NR_setpgid 57 /* ok */ -#define __NR_ulimit 58 /* remove */ -#define __NR_oldolduname 59 /* remove */ -#define __NR_umask 60 /* ok */ -#define __NR_chroot 61 /* ok */ -#define __NR_ustat 62 /* obsolete -> statfs64 */ -#define __NR_dup2 63 /* ok */ -#define __NR_getppid 64 /* ok */ -#define __NR_getpgrp 65 /* obsolete -> sys_getpgid */ -#define __NR_setsid 66 /* ok */ -#define __NR_sigaction 67 /* obsolete -> rt_sigaction */ -#define __NR_sgetmask 68 /* obsolete -> sys_rt_sigprocmask */ -#define __NR_ssetmask 69 /* obsolete ->sys_rt_sigprocmask */ -#define __NR_setreuid 70 /* ok */ -#define __NR_setregid 71 /* ok */ -#define __NR_sigsuspend 72 /* obsolete -> rt_sigsuspend */ -#define __NR_sigpending 73 /* obsolete -> sys_rt_sigpending */ -#define __NR_sethostname 74 /* ok */ -#define __NR_setrlimit 75 /* ok */ -#define __NR_getrlimit 76 /* ok Back compatible 2G limited rlimit */ -#define __NR_getrusage 77 /* ok */ -#define __NR_gettimeofday 78 /* ok */ -#define __NR_settimeofday 79 /* ok */ -#define __NR_getgroups 80 /* ok */ -#define __NR_setgroups 81 /* ok */ -#define __NR_select 82 /* obsolete -> sys_pselect7 */ -#define __NR_symlink 83 /* symlinkat */ -#define __NR_oldlstat 84 /* remove */ -#define __NR_readlink 85 /* obsolete -> sys_readlinkat */ -#define __NR_uselib 86 /* remove */ -#define __NR_swapon 87 /* ok */ -#define __NR_reboot 88 /* ok */ -#define __NR_readdir 89 /* remove ? */ -#define __NR_mmap 90 /* obsolete -> sys_mmap2 */ -#define __NR_munmap 91 /* ok - mmu and nommu */ -#define __NR_truncate 92 /* ok or truncate64 */ -#define __NR_ftruncate 93 /* ok or ftruncate64 */ -#define __NR_fchmod 94 /* ok */ -#define __NR_fchown 95 /* ok */ -#define __NR_getpriority 96 /* ok */ -#define __NR_setpriority 97 /* ok */ -#define __NR_profil 98 /* remove */ -#define __NR_statfs 99 /* ok or statfs64 */ -#define __NR_fstatfs 100 /* ok or fstatfs64 */ -#define __NR_ioperm 101 /* remove */ -#define __NR_socketcall 102 /* remove */ -#define __NR_syslog 103 /* ok */ -#define __NR_setitimer 104 /* ok */ -#define __NR_getitimer 105 /* ok */ -#define __NR_stat 106 /* remove */ -#define __NR_lstat 107 /* remove */ -#define __NR_fstat 108 /* remove */ -#define __NR_olduname 109 /* remove */ -#define __NR_iopl 110 /* remove */ -#define __NR_vhangup 111 /* ok */ -#define __NR_idle 112 /* remove */ -#define __NR_vm86old 113 /* remove */ -#define __NR_wait4 114 /* obsolete -> waitid */ -#define __NR_swapoff 115 /* ok */ -#define __NR_sysinfo 116 /* ok */ -#define __NR_ipc 117 /* remove - direct call */ -#define __NR_fsync 118 /* ok */ -#define __NR_sigreturn 119 /* obsolete -> sys_rt_sigreturn */ -#define __NR_clone 120 /* ok */ -#define __NR_setdomainname 121 /* ok */ -#define __NR_uname 122 /* remove */ -#define __NR_modify_ldt 123 /* remove */ -#define __NR_adjtimex 124 /* ok */ -#define __NR_mprotect 125 /* remove */ -#define __NR_sigprocmask 126 /* obsolete -> sys_rt_sigprocmask */ -#define __NR_create_module 127 /* remove */ -#define __NR_init_module 128 /* ok */ -#define __NR_delete_module 129 /* ok */ -#define __NR_get_kernel_syms 130 /* remove */ -#define __NR_quotactl 131 /* ok */ -#define __NR_getpgid 132 /* ok */ -#define __NR_fchdir 133 /* ok */ -#define __NR_bdflush 134 /* remove */ -#define __NR_sysfs 135 /* needed for busybox */ -#define __NR_personality 136 /* ok */ -#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ -#define __NR_setfsuid 138 /* ok */ -#define __NR_setfsgid 139 /* ok */ -#define __NR__llseek 140 /* remove only lseek */ -#define __NR_getdents 141 /* ok or getdents64 */ -#define __NR__newselect 142 /* remove */ -#define __NR_flock 143 /* ok */ -#define __NR_msync 144 /* remove */ -#define __NR_readv 145 /* ok */ -#define __NR_writev 146 /* ok */ -#define __NR_getsid 147 /* ok */ -#define __NR_fdatasync 148 /* ok */ -#define __NR__sysctl 149 /* remove */ -#define __NR_mlock 150 /* ok - nommu or mmu */ -#define __NR_munlock 151 /* ok - nommu or mmu */ -#define __NR_mlockall 152 /* ok - nommu or mmu */ -#define __NR_munlockall 153 /* ok - nommu or mmu */ -#define __NR_sched_setparam 154 /* ok */ -#define __NR_sched_getparam 155 /* ok */ -#define __NR_sched_setscheduler 156 /* ok */ -#define __NR_sched_getscheduler 157 /* ok */ -#define __NR_sched_yield 158 /* ok */ -#define __NR_sched_get_priority_max 159 /* ok */ -#define __NR_sched_get_priority_min 160 /* ok */ -#define __NR_sched_rr_get_interval 161 /* ok */ -#define __NR_nanosleep 162 /* ok */ -#define __NR_mremap 163 /* ok - nommu or mmu */ -#define __NR_setresuid 164 /* ok */ -#define __NR_getresuid 165 /* ok */ -#define __NR_vm86 166 /* remove */ -#define __NR_query_module 167 /* ok */ -#define __NR_poll 168 /* obsolete -> sys_ppoll */ -#define __NR_nfsservctl 169 /* ok */ -#define __NR_setresgid 170 /* ok */ -#define __NR_getresgid 171 /* ok */ -#define __NR_prctl 172 /* ok */ -#define __NR_rt_sigreturn 173 /* ok */ -#define __NR_rt_sigaction 174 /* ok */ -#define __NR_rt_sigprocmask 175 /* ok */ -#define __NR_rt_sigpending 176 /* ok */ -#define __NR_rt_sigtimedwait 177 /* ok */ -#define __NR_rt_sigqueueinfo 178 /* ok */ -#define __NR_rt_sigsuspend 179 /* ok */ -#define __NR_pread64 180 /* ok */ -#define __NR_pwrite64 181 /* ok */ -#define __NR_chown 182 /* obsolete -> fchownat */ -#define __NR_getcwd 183 /* ok */ -#define __NR_capget 184 /* ok */ -#define __NR_capset 185 /* ok */ -#define __NR_sigaltstack 186 /* remove */ -#define __NR_sendfile 187 /* ok -> exist 64bit version*/ -#define __NR_getpmsg 188 /* remove */ -/* remove - some people actually want streams */ -#define __NR_putpmsg 189 -/* for noMMU - group with clone -> maybe remove */ -#define __NR_vfork 190 -#define __NR_ugetrlimit 191 /* remove - SuS compliant getrlimit */ -#define __NR_mmap2 192 /* ok */ -#define __NR_truncate64 193 /* ok */ -#define __NR_ftruncate64 194 /* ok */ -#define __NR_stat64 195 /* remove _ARCH_WANT_STAT64 */ -#define __NR_lstat64 196 /* remove _ARCH_WANT_STAT64 */ -#define __NR_fstat64 197 /* remove _ARCH_WANT_STAT64 */ -#define __NR_lchown32 198 /* ok - without 32 */ -#define __NR_getuid32 199 /* ok - without 32 */ -#define __NR_getgid32 200 /* ok - without 32 */ -#define __NR_geteuid32 201 /* ok - without 32 */ -#define __NR_getegid32 202 /* ok - without 32 */ -#define __NR_setreuid32 203 /* ok - without 32 */ -#define __NR_setregid32 204 /* ok - without 32 */ -#define __NR_getgroups32 205 /* ok - without 32 */ -#define __NR_setgroups32 206 /* ok - without 32 */ -#define __NR_fchown32 207 /* ok - without 32 */ -#define __NR_setresuid32 208 /* ok - without 32 */ -#define __NR_getresuid32 209 /* ok - without 32 */ -#define __NR_setresgid32 210 /* ok - without 32 */ -#define __NR_getresgid32 211 /* ok - without 32 */ -#define __NR_chown32 212 /* ok - without 32 -obsolete -> fchownat */ -#define __NR_setuid32 213 /* ok - without 32 */ -#define __NR_setgid32 214 /* ok - without 32 */ -#define __NR_setfsuid32 215 /* ok - without 32 */ -#define __NR_setfsgid32 216 /* ok - without 32 */ -#define __NR_pivot_root 217 /* ok */ -#define __NR_mincore 218 /* ok */ -#define __NR_madvise 219 /* ok */ -#define __NR_getdents64 220 /* ok */ -#define __NR_fcntl64 221 /* ok */ -/* 223 is unused */ -#define __NR_gettid 224 /* ok */ -#define __NR_readahead 225 /* ok */ -#define __NR_setxattr 226 /* ok */ -#define __NR_lsetxattr 227 /* ok */ -#define __NR_fsetxattr 228 /* ok */ -#define __NR_getxattr 229 /* ok */ -#define __NR_lgetxattr 230 /* ok */ -#define __NR_fgetxattr 231 /* ok */ -#define __NR_listxattr 232 /* ok */ -#define __NR_llistxattr 233 /* ok */ -#define __NR_flistxattr 234 /* ok */ -#define __NR_removexattr 235 /* ok */ -#define __NR_lremovexattr 236 /* ok */ -#define __NR_fremovexattr 237 /* ok */ -#define __NR_tkill 238 /* ok */ -#define __NR_sendfile64 239 /* ok */ -#define __NR_futex 240 /* ok */ -#define __NR_sched_setaffinity 241 /* ok */ -#define __NR_sched_getaffinity 242 /* ok */ -#define __NR_set_thread_area 243 /* remove */ -#define __NR_get_thread_area 244 /* remove */ -#define __NR_io_setup 245 /* ok */ -#define __NR_io_destroy 246 /* ok */ -#define __NR_io_getevents 247 /* ok */ -#define __NR_io_submit 248 /* ok */ -#define __NR_io_cancel 249 /* ok */ -#define __NR_fadvise64 250 /* remove -> sys_fadvise64_64 */ -/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */ -#define __NR_exit_group 252 /* ok */ -#define __NR_lookup_dcookie 253 /* ok */ -#define __NR_epoll_create 254 /* ok */ -#define __NR_epoll_ctl 255 /* ok */ -#define __NR_epoll_wait 256 /* obsolete -> sys_epoll_pwait */ -#define __NR_remap_file_pages 257 /* only for mmu */ -#define __NR_set_tid_address 258 /* ok */ -#define __NR_timer_create 259 /* ok */ -#define __NR_timer_settime (__NR_timer_create+1) /* 260 */ /* ok */ -#define __NR_timer_gettime (__NR_timer_create+2) /* 261 */ /* ok */ -#define __NR_timer_getoverrun (__NR_timer_create+3) /* 262 */ /* ok */ -#define __NR_timer_delete (__NR_timer_create+4) /* 263 */ /* ok */ -#define __NR_clock_settime (__NR_timer_create+5) /* 264 */ /* ok */ -#define __NR_clock_gettime (__NR_timer_create+6) /* 265 */ /* ok */ -#define __NR_clock_getres (__NR_timer_create+7) /* 266 */ /* ok */ -#define __NR_clock_nanosleep (__NR_timer_create+8) /* 267 */ /* ok */ -#define __NR_statfs64 268 /* ok */ -#define __NR_fstatfs64 269 /* ok */ -#define __NR_tgkill 270 /* ok */ -#define __NR_utimes 271 /* obsolete -> sys_futimesat */ -#define __NR_fadvise64_64 272 /* ok */ -#define __NR_vserver 273 /* ok */ -#define __NR_mbind 274 /* only for mmu */ -#define __NR_get_mempolicy 275 /* only for mmu */ -#define __NR_set_mempolicy 276 /* only for mmu */ -#define __NR_mq_open 277 /* ok */ -#define __NR_mq_unlink (__NR_mq_open+1) /* 278 */ /* ok */ -#define __NR_mq_timedsend (__NR_mq_open+2) /* 279 */ /* ok */ -#define __NR_mq_timedreceive (__NR_mq_open+3) /* 280 */ /* ok */ -#define __NR_mq_notify (__NR_mq_open+4) /* 281 */ /* ok */ -#define __NR_mq_getsetattr (__NR_mq_open+5) /* 282 */ /* ok */ -#define __NR_kexec_load 283 /* ok */ -#define __NR_waitid 284 /* ok */ -/* #define __NR_sys_setaltroot 285 */ -#define __NR_add_key 286 /* ok */ -#define __NR_request_key 287 /* ok */ -#define __NR_keyctl 288 /* ok */ -#define __NR_ioprio_set 289 /* ok */ -#define __NR_ioprio_get 290 /* ok */ -#define __NR_inotify_init 291 /* ok */ -#define __NR_inotify_add_watch 292 /* ok */ -#define __NR_inotify_rm_watch 293 /* ok */ -#define __NR_migrate_pages 294 /* mmu */ -#define __NR_openat 295 /* ok */ -#define __NR_mkdirat 296 /* ok */ -#define __NR_mknodat 297 /* ok */ -#define __NR_fchownat 298 /* ok */ -#define __NR_futimesat 299 /* obsolete -> sys_utimesat */ -#define __NR_fstatat64 300 /* stat64 */ -#define __NR_unlinkat 301 /* ok */ -#define __NR_renameat 302 /* ok */ -#define __NR_linkat 303 /* ok */ -#define __NR_symlinkat 304 /* ok */ -#define __NR_readlinkat 305 /* ok */ -#define __NR_fchmodat 306 /* ok */ -#define __NR_faccessat 307 /* ok */ -#define __NR_pselect6 308 /* obsolete -> sys_pselect7 */ -#define __NR_ppoll 309 /* ok */ -#define __NR_unshare 310 /* ok */ -#define __NR_set_robust_list 311 /* ok */ -#define __NR_get_robust_list 312 /* ok */ -#define __NR_splice 313 /* ok */ -#define __NR_sync_file_range 314 /* ok */ -#define __NR_tee 315 /* ok */ -#define __NR_vmsplice 316 /* ok */ -#define __NR_move_pages 317 /* mmu */ -#define __NR_getcpu 318 /* ok */ -#define __NR_epoll_pwait 319 /* ok */ -#define __NR_utimensat 320 /* ok */ -#define __NR_signalfd 321 /* ok */ -#define __NR_timerfd_create 322 /* ok */ -#define __NR_eventfd 323 /* ok */ -#define __NR_fallocate 324 /* ok */ -#define __NR_semtimedop 325 /* ok - semaphore group */ -#define __NR_timerfd_settime 326 /* ok */ -#define __NR_timerfd_gettime 327 /* ok */ -/* sysv ipc syscalls */ -#define __NR_semctl 328 /* ok */ -#define __NR_semget 329 /* ok */ -#define __NR_semop 330 /* ok */ -#define __NR_msgctl 331 /* ok */ -#define __NR_msgget 332 /* ok */ -#define __NR_msgrcv 333 /* ok */ -#define __NR_msgsnd 334 /* ok */ -#define __NR_shmat 335 /* ok */ -#define __NR_shmctl 336 /* ok */ -#define __NR_shmdt 337 /* ok */ -#define __NR_shmget 338 /* ok */ - - -#define __NR_signalfd4 339 /* new */ -#define __NR_eventfd2 340 /* new */ -#define __NR_epoll_create1 341 /* new */ -#define __NR_dup3 342 /* new */ -#define __NR_pipe2 343 /* new */ -#define __NR_inotify_init1 344 /* new */ -#define __NR_socket 345 /* new */ -#define __NR_socketpair 346 /* new */ -#define __NR_bind 347 /* new */ -#define __NR_listen 348 /* new */ -#define __NR_accept 349 /* new */ -#define __NR_connect 350 /* new */ -#define __NR_getsockname 351 /* new */ -#define __NR_getpeername 352 /* new */ -#define __NR_sendto 353 /* new */ -#define __NR_send 354 /* new */ -#define __NR_recvfrom 355 /* new */ -#define __NR_recv 356 /* new */ -#define __NR_setsockopt 357 /* new */ -#define __NR_getsockopt 358 /* new */ -#define __NR_shutdown 359 /* new */ -#define __NR_sendmsg 360 /* new */ -#define __NR_recvmsg 361 /* new */ -#define __NR_accept04 362 /* new */ - -#define __NR_syscalls 363 - -#ifdef __KERNEL__ -#ifndef __ASSEMBLY__ - -#define __ARCH_WANT_IPC_PARSE_VERSION -/* #define __ARCH_WANT_OLD_READDIR */ -/* #define __ARCH_WANT_OLD_STAT */ -#define __ARCH_WANT_STAT64 -#define __ARCH_WANT_SYS_ALARM -#define __ARCH_WANT_SYS_GETHOSTNAME -#define __ARCH_WANT_SYS_PAUSE -#define __ARCH_WANT_SYS_SGETMASK -#define __ARCH_WANT_SYS_SIGNAL -#define __ARCH_WANT_SYS_TIME -#define __ARCH_WANT_SYS_UTIME -#define __ARCH_WANT_SYS_WAITPID -#define __ARCH_WANT_SYS_SOCKETCALL -#define __ARCH_WANT_SYS_FADVISE64 -#define __ARCH_WANT_SYS_GETPGRP -#define __ARCH_WANT_SYS_LLSEEK -#define __ARCH_WANT_SYS_NICE -/* #define __ARCH_WANT_SYS_OLD_GETRLIMIT */ -#define __ARCH_WANT_SYS_OLDUMOUNT -#define __ARCH_WANT_SYS_SIGPENDING -#define __ARCH_WANT_SYS_SIGPROCMASK -#define __ARCH_WANT_SYS_RT_SIGACTION -/* #define __ARCH_WANT_SYS_RT_SIGSUSPEND */ - -/* - * "Conditional" syscalls - * - * What we want is __attribute__((weak,alias("sys_ni_syscall"))), - * but it doesn't work on all toolchains, so we just do it by hand - */ -#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall"); - -#endif /* __ASSEMBLY__ */ -#endif /* __KERNEL__ */ -#endif /* _ASM_MICROBLAZE_UNISTD_H */ diff --git a/trunk/arch/microblaze/include/asm/user.h b/trunk/arch/microblaze/include/asm/user.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/trunk/arch/microblaze/include/asm/user.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/trunk/arch/microblaze/include/asm/vga.h b/trunk/arch/microblaze/include/asm/vga.h deleted file mode 100644 index 8b137891791f..000000000000 --- a/trunk/arch/microblaze/include/asm/vga.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/trunk/arch/microblaze/kernel/Makefile b/trunk/arch/microblaze/kernel/Makefile deleted file mode 100644 index da94bec4ecba..000000000000 --- a/trunk/arch/microblaze/kernel/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# -# Makefile -# - -extra-y := head.o vmlinux.lds - -obj-y += exceptions.o \ - hw_exception_handler.o init_task.o intc.o irq.o of_device.o \ - of_platform.o process.o prom.o prom_parse.o ptrace.o \ - setup.o signal.o sys_microblaze.o timer.o traps.o - -obj-y += cpu/ - -obj-$(CONFIG_EARLY_PRINTK) += early_printk.o -obj-$(CONFIG_SELFMOD) += selfmod.o -obj-$(CONFIG_HEART_BEAT) += heartbeat.o -obj-$(CONFIG_MODULES) += microblaze_ksyms.o module.o - -obj-y += entry$(MMUEXT).o diff --git a/trunk/arch/microblaze/kernel/asm-offsets.c b/trunk/arch/microblaze/kernel/asm-offsets.c deleted file mode 100644 index 38e1a2e8ad0c..000000000000 --- a/trunk/arch/microblaze/kernel/asm-offsets.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - /* struct pt_regs */ - DEFINE(PT_SIZE, sizeof(struct pt_regs)); - DEFINE(PT_MSR, offsetof(struct pt_regs, msr)); - DEFINE(PT_EAR, offsetof(struct pt_regs, ear)); - DEFINE(PT_ESR, offsetof(struct pt_regs, esr)); - DEFINE(PT_FSR, offsetof(struct pt_regs, fsr)); - DEFINE(PT_PC, offsetof(struct pt_regs, pc)); - DEFINE(PT_R0, offsetof(struct pt_regs, r0)); - DEFINE(PT_R1, offsetof(struct pt_regs, r1)); - DEFINE(PT_R2, offsetof(struct pt_regs, r2)); - DEFINE(PT_R3, offsetof(struct pt_regs, r3)); - DEFINE(PT_R4, offsetof(struct pt_regs, r4)); - DEFINE(PT_R5, offsetof(struct pt_regs, r5)); - DEFINE(PT_R6, offsetof(struct pt_regs, r6)); - DEFINE(PT_R7, offsetof(struct pt_regs, r7)); - DEFINE(PT_R8, offsetof(struct pt_regs, r8)); - DEFINE(PT_R9, offsetof(struct pt_regs, r9)); - DEFINE(PT_R10, offsetof(struct pt_regs, r10)); - DEFINE(PT_R11, offsetof(struct pt_regs, r11)); - DEFINE(PT_R12, offsetof(struct pt_regs, r12)); - DEFINE(PT_R13, offsetof(struct pt_regs, r13)); - DEFINE(PT_R14, offsetof(struct pt_regs, r14)); - DEFINE(PT_R15, offsetof(struct pt_regs, r15)); - DEFINE(PT_R16, offsetof(struct pt_regs, r16)); - DEFINE(PT_R17, offsetof(struct pt_regs, r17)); - DEFINE(PT_R18, offsetof(struct pt_regs, r18)); - DEFINE(PT_R19, offsetof(struct pt_regs, r19)); - DEFINE(PT_R20, offsetof(struct pt_regs, r20)); - DEFINE(PT_R21, offsetof(struct pt_regs, r21)); - DEFINE(PT_R22, offsetof(struct pt_regs, r22)); - DEFINE(PT_R23, offsetof(struct pt_regs, r23)); - DEFINE(PT_R24, offsetof(struct pt_regs, r24)); - DEFINE(PT_R25, offsetof(struct pt_regs, r25)); - DEFINE(PT_R26, offsetof(struct pt_regs, r26)); - DEFINE(PT_R27, offsetof(struct pt_regs, r27)); - DEFINE(PT_R28, offsetof(struct pt_regs, r28)); - DEFINE(PT_R29, offsetof(struct pt_regs, r29)); - DEFINE(PT_R30, offsetof(struct pt_regs, r30)); - DEFINE(PT_R31, offsetof(struct pt_regs, r31)); - DEFINE(PT_MODE, offsetof(struct pt_regs, kernel_mode)); - BLANK(); - - /* Magic offsets for PTRACE PEEK/POKE etc */ - DEFINE(PT_TEXT_ADDR, sizeof(struct pt_regs) + 1); - DEFINE(PT_TEXT_LEN, sizeof(struct pt_regs) + 2); - DEFINE(PT_DATA_ADDR, sizeof(struct pt_regs) + 3); - BLANK(); - - /* struct task_struct */ - DEFINE(TS_THREAD_INFO, offsetof(struct task_struct, stack)); - - /* struct thread_info */ - DEFINE(TI_TASK, offsetof(struct thread_info, task)); - DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); - DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); - DEFINE(TI_STATUS, offsetof(struct thread_info, status)); - DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); - DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count)); - DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); - DEFINE(TI_RESTART_BLOCK, offsetof(struct thread_info, restart_block)); - DEFINE(TI_CPU_CONTEXT, offsetof(struct thread_info, cpu_context)); - BLANK(); - - /* struct cpu_context */ - DEFINE(CC_R1, offsetof(struct cpu_context, r1)); /* r1 */ - DEFINE(CC_R2, offsetof(struct cpu_context, r2)); - /* dedicated registers */ - DEFINE(CC_R13, offsetof(struct cpu_context, r13)); - DEFINE(CC_R14, offsetof(struct cpu_context, r14)); - DEFINE(CC_R15, offsetof(struct cpu_context, r15)); - DEFINE(CC_R16, offsetof(struct cpu_context, r16)); - DEFINE(CC_R17, offsetof(struct cpu_context, r17)); - DEFINE(CC_R18, offsetof(struct cpu_context, r18)); - /* non-volatile registers */ - DEFINE(CC_R19, offsetof(struct cpu_context, r19)); - DEFINE(CC_R20, offsetof(struct cpu_context, r20)); - DEFINE(CC_R21, offsetof(struct cpu_context, r21)); - DEFINE(CC_R22, offsetof(struct cpu_context, r22)); - DEFINE(CC_R23, offsetof(struct cpu_context, r23)); - DEFINE(CC_R24, offsetof(struct cpu_context, r24)); - DEFINE(CC_R25, offsetof(struct cpu_context, r25)); - DEFINE(CC_R26, offsetof(struct cpu_context, r26)); - DEFINE(CC_R27, offsetof(struct cpu_context, r27)); - DEFINE(CC_R28, offsetof(struct cpu_context, r28)); - DEFINE(CC_R29, offsetof(struct cpu_context, r29)); - DEFINE(CC_R30, offsetof(struct cpu_context, r30)); - /* special purpose registers */ - DEFINE(CC_MSR, offsetof(struct cpu_context, msr)); - DEFINE(CC_EAR, offsetof(struct cpu_context, ear)); - DEFINE(CC_ESR, offsetof(struct cpu_context, esr)); - DEFINE(CC_FSR, offsetof(struct cpu_context, fsr)); - BLANK(); - - return 0; -} diff --git a/trunk/arch/microblaze/kernel/cpu/Makefile b/trunk/arch/microblaze/kernel/cpu/Makefile deleted file mode 100644 index 20646e549271..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# Build the appropriate CPU version support -# - -EXTRA_CFLAGS += -DCPU_MAJOR=$(CPU_MAJOR) -DCPU_MINOR=$(CPU_MINOR) \ - -DCPU_REV=$(CPU_REV) - -obj-y += cache.o cpuinfo.o cpuinfo-pvr-full.o cpuinfo-static.o mb.o pvr.o diff --git a/trunk/arch/microblaze/kernel/cpu/cache.c b/trunk/arch/microblaze/kernel/cpu/cache.c deleted file mode 100644 index be9fecca4f91..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/cache.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Cache control for MicroBlaze cache memories - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#include -#include -#include - -/* Exported functions */ - -void _enable_icache(void) -{ - if (cpuinfo.use_icache) { -#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR - __asm__ __volatile__ (" \ - msrset r0, %0; \ - nop; " \ - : \ - : "i" (MSR_ICE) \ - : "memory"); -#else - __asm__ __volatile__ (" \ - mfs r12, rmsr; \ - nop; \ - ori r12, r12, %0; \ - mts rmsr, r12; \ - nop; " \ - : \ - : "i" (MSR_ICE) \ - : "memory", "r12"); -#endif - } -} - -void _disable_icache(void) -{ - if (cpuinfo.use_icache) { -#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR - __asm__ __volatile__ (" \ - msrclr r0, %0; \ - nop; " \ - : \ - : "i" (MSR_ICE) \ - : "memory"); -#else - __asm__ __volatile__ (" \ - mfs r12, rmsr; \ - nop; \ - andi r12, r12, ~%0; \ - mts rmsr, r12; \ - nop; " \ - : \ - : "i" (MSR_ICE) \ - : "memory", "r12"); -#endif - } -} - -void _invalidate_icache(unsigned int addr) -{ - if (cpuinfo.use_icache) { - __asm__ __volatile__ (" \ - wic %0, r0" \ - : \ - : "r" (addr)); - } -} - -void _enable_dcache(void) -{ - if (cpuinfo.use_dcache) { -#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR - __asm__ __volatile__ (" \ - msrset r0, %0; \ - nop; " \ - : \ - : "i" (MSR_DCE) \ - : "memory"); -#else - __asm__ __volatile__ (" \ - mfs r12, rmsr; \ - nop; \ - ori r12, r12, %0; \ - mts rmsr, r12; \ - nop; " \ - : \ - : "i" (MSR_DCE) \ - : "memory", "r12"); -#endif - } -} - -void _disable_dcache(void) -{ - if (cpuinfo.use_dcache) { -#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR - __asm__ __volatile__ (" \ - msrclr r0, %0; \ - nop; " \ - : \ - : "i" (MSR_DCE) \ - : "memory"); -#else - __asm__ __volatile__ (" \ - mfs r12, rmsr; \ - nop; \ - andi r12, r12, ~%0; \ - mts rmsr, r12; \ - nop; " \ - : \ - : "i" (MSR_DCE) \ - : "memory", "r12"); -#endif - } -} - -void _invalidate_dcache(unsigned int addr) -{ - if (cpuinfo.use_dcache) - __asm__ __volatile__ (" \ - wdc %0, r0" \ - : \ - : "r" (addr)); -} - -void __invalidate_icache_all(void) -{ - unsigned int i; - unsigned flags; - - if (cpuinfo.use_icache) { - local_irq_save(flags); - __disable_icache(); - - /* Just loop through cache size and invalidate, no need to add - CACHE_BASE address */ - for (i = 0; i < cpuinfo.icache_size; - i += cpuinfo.icache_line) - __invalidate_icache(i); - - __enable_icache(); - local_irq_restore(flags); - } -} - -void __invalidate_icache_range(unsigned long start, unsigned long end) -{ - unsigned int i; - unsigned flags; - unsigned int align; - - if (cpuinfo.use_icache) { - /* - * No need to cover entire cache range, - * just cover cache footprint - */ - end = min(start + cpuinfo.icache_size, end); - align = ~(cpuinfo.icache_line - 1); - start &= align; /* Make sure we are aligned */ - /* Push end up to the next cache line */ - end = ((end & align) + cpuinfo.icache_line); - - local_irq_save(flags); - __disable_icache(); - - for (i = start; i < end; i += cpuinfo.icache_line) - __invalidate_icache(i); - - __enable_icache(); - local_irq_restore(flags); - } -} - -void __invalidate_icache_page(struct vm_area_struct *vma, struct page *page) -{ - __invalidate_icache_all(); -} - -void __invalidate_icache_user_range(struct vm_area_struct *vma, - struct page *page, unsigned long adr, - int len) -{ - __invalidate_icache_all(); -} - -void __invalidate_cache_sigtramp(unsigned long addr) -{ - __invalidate_icache_range(addr, addr + 8); -} - -void __invalidate_dcache_all(void) -{ - unsigned int i; - unsigned flags; - - if (cpuinfo.use_dcache) { - local_irq_save(flags); - __disable_dcache(); - - /* - * Just loop through cache size and invalidate, - * no need to add CACHE_BASE address - */ - for (i = 0; i < cpuinfo.dcache_size; - i += cpuinfo.dcache_line) - __invalidate_dcache(i); - - __enable_dcache(); - local_irq_restore(flags); - } -} - -void __invalidate_dcache_range(unsigned long start, unsigned long end) -{ - unsigned int i; - unsigned flags; - unsigned int align; - - if (cpuinfo.use_dcache) { - /* - * No need to cover entire cache range, - * just cover cache footprint - */ - end = min(start + cpuinfo.dcache_size, end); - align = ~(cpuinfo.dcache_line - 1); - start &= align; /* Make sure we are aligned */ - /* Push end up to the next cache line */ - end = ((end & align) + cpuinfo.dcache_line); - local_irq_save(flags); - __disable_dcache(); - - for (i = start; i < end; i += cpuinfo.dcache_line) - __invalidate_dcache(i); - - __enable_dcache(); - local_irq_restore(flags); - } -} - -void __invalidate_dcache_page(struct vm_area_struct *vma, struct page *page) -{ - __invalidate_dcache_all(); -} - -void __invalidate_dcache_user_range(struct vm_area_struct *vma, - struct page *page, unsigned long adr, - int len) -{ - __invalidate_dcache_all(); -} diff --git a/trunk/arch/microblaze/kernel/cpu/cpuinfo-pvr-full.c b/trunk/arch/microblaze/kernel/cpu/cpuinfo-pvr-full.c deleted file mode 100644 index cf7424a6bb87..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/cpuinfo-pvr-full.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Support for MicroBlaze PVR (processor version register) - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#include -#include -#include -#include - -/* - * Helper macro to map between fields in our struct cpuinfo, and - * the PVR macros in pvr.h. - */ - -#define CI(c, p) { ci->c = PVR_##p(pvr); } -#define err_printk(x) \ - early_printk("ERROR: Microblaze " x " - different for PVR and DTS\n"); - -void set_cpuinfo_pvr_full(struct cpuinfo *ci, struct device_node *cpu) -{ - struct pvr_s pvr; - int temp; /* for saving temp value */ - get_pvr(&pvr); - - temp = PVR_USE_BARREL(pvr) | PVR_USE_MSR_INSTR(pvr) |\ - PVR_USE_PCMP_INSTR(pvr) | PVR_USE_DIV(pvr); - if (ci->use_instr != temp) - err_printk("BARREL, MSR, PCMP or DIV"); - ci->use_instr = temp; - - temp = PVR_USE_HW_MUL(pvr) | PVR_USE_MUL64(pvr); - if (ci->use_mult != temp) - err_printk("HW_MUL"); - ci->use_mult = temp; - - temp = PVR_USE_FPU(pvr) | PVR_USE_FPU2(pvr); - if (ci->use_fpu != temp) - err_printk("HW_FPU"); - ci->use_fpu = temp; - - ci->use_exc = PVR_OPCODE_0x0_ILLEGAL(pvr) |\ - PVR_UNALIGNED_EXCEPTION(pvr) |\ - PVR_ILL_OPCODE_EXCEPTION(pvr) |\ - PVR_IOPB_BUS_EXCEPTION(pvr) |\ - PVR_DOPB_BUS_EXCEPTION(pvr) |\ - PVR_DIV_ZERO_EXCEPTION(pvr) |\ - PVR_FPU_EXCEPTION(pvr) |\ - PVR_FSL_EXCEPTION(pvr); - - CI(pvr_user1, USER1); - CI(pvr_user2, USER2); - - CI(mmu, USE_MMU); - - CI(ver_code, VERSION); - - CI(use_icache, USE_ICACHE); - CI(icache_tagbits, ICACHE_ADDR_TAG_BITS); - CI(icache_write, ICACHE_ALLOW_WR); - CI(icache_line, ICACHE_LINE_LEN); - CI(icache_size, ICACHE_BYTE_SIZE); - CI(icache_base, ICACHE_BASEADDR); - CI(icache_high, ICACHE_HIGHADDR); - - CI(use_dcache, USE_DCACHE); - CI(dcache_tagbits, DCACHE_ADDR_TAG_BITS); - CI(dcache_write, DCACHE_ALLOW_WR); - CI(dcache_line, DCACHE_LINE_LEN); - CI(dcache_size, DCACHE_BYTE_SIZE); - CI(dcache_base, DCACHE_BASEADDR); - CI(dcache_high, DCACHE_HIGHADDR); - - CI(use_dopb, D_OPB); - CI(use_iopb, I_OPB); - CI(use_dlmb, D_LMB); - CI(use_ilmb, I_LMB); - CI(num_fsl, FSL_LINKS); - - CI(irq_edge, INTERRUPT_IS_EDGE); - CI(irq_positive, EDGE_IS_POSITIVE); - - CI(area_optimised, AREA_OPTIMISED); - - CI(hw_debug, DEBUG_ENABLED); - CI(num_pc_brk, NUMBER_OF_PC_BRK); - CI(num_rd_brk, NUMBER_OF_RD_ADDR_BRK); - CI(num_wr_brk, NUMBER_OF_WR_ADDR_BRK); - - CI(fpga_family_code, TARGET_FAMILY); - - /* take timebase-frequency from DTS */ - ci->cpu_clock_freq = fcpu(cpu, "timebase-frequency"); -} diff --git a/trunk/arch/microblaze/kernel/cpu/cpuinfo-static.c b/trunk/arch/microblaze/kernel/cpu/cpuinfo-static.c deleted file mode 100644 index cfe44effdb77..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/cpuinfo-static.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#include -#include -#include -#include -#include - -const static char family_string[] = CONFIG_XILINX_MICROBLAZE0_FAMILY; -const static char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER; - -#define err_printk(x) \ - early_printk("ERROR: Microblaze " x "- different for kernel and DTS\n"); - -void __init set_cpuinfo_static(struct cpuinfo *ci, struct device_node *cpu) -{ - int i = 0; - - ci->use_instr = - (fcpu(cpu, "xlnx,use-barrel") ? PVR0_USE_BARREL_MASK : 0) | - (fcpu(cpu, "xlnx,use-msr-instr") ? PVR2_USE_MSR_INSTR : 0) | - (fcpu(cpu, "xlnx,use-pcmp-instr") ? PVR2_USE_PCMP_INSTR : 0) | - (fcpu(cpu, "xlnx,use-div") ? PVR0_USE_DIV_MASK : 0); - if (CONFIG_XILINX_MICROBLAZE0_USE_BARREL) - i |= PVR0_USE_BARREL_MASK; - if (CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR) - i |= PVR2_USE_MSR_INSTR; - if (CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) - i |= PVR2_USE_PCMP_INSTR; - if (CONFIG_XILINX_MICROBLAZE0_USE_DIV) - i |= PVR0_USE_DIV_MASK; - if (ci->use_instr != i) - err_printk("BARREL, MSR, PCMP or DIV"); - - ci->use_mult = fcpu(cpu, "xlnx,use-hw-mul"); - if (ci->use_mult != CONFIG_XILINX_MICROBLAZE0_USE_HW_MUL) - err_printk("HW_MUL"); - ci->use_mult = - (ci->use_mult > 1 ? - (PVR2_USE_MUL64_MASK | PVR0_USE_HW_MUL_MASK) : - (ci->use_mult == 1 ? PVR0_USE_HW_MUL_MASK : 0)); - - ci->use_fpu = fcpu(cpu, "xlnx,use-fpu"); - if (ci->use_fpu != CONFIG_XILINX_MICROBLAZE0_USE_FPU) - err_printk("HW_FPU"); - ci->use_fpu = (ci->use_fpu > 1 ? - (PVR2_USE_FPU2_MASK | PVR0_USE_FPU_MASK) : - (ci->use_fpu == 1 ? PVR0_USE_FPU_MASK : 0)); - - ci->use_exc = - (fcpu(cpu, "xlnx,unaligned-exceptions") ? - PVR2_UNALIGNED_EXC_MASK : 0) | - (fcpu(cpu, "xlnx,ill-opcode-exception") ? - PVR2_ILL_OPCODE_EXC_MASK : 0) | - (fcpu(cpu, "xlnx,iopb-bus-exception") ? - PVR2_IOPB_BUS_EXC_MASK : 0) | - (fcpu(cpu, "xlnx,dopb-bus-exception") ? - PVR2_DOPB_BUS_EXC_MASK : 0) | - (fcpu(cpu, "xlnx,div-zero-exception") ? - PVR2_DIV_ZERO_EXC_MASK : 0) | - (fcpu(cpu, "xlnx,fpu-exception") ? PVR2_FPU_EXC_MASK : 0) | - (fcpu(cpu, "xlnx,fsl-exception") ? PVR2_USE_EXTEND_FSL : 0); - - ci->use_icache = fcpu(cpu, "xlnx,use-icache"); - ci->icache_tagbits = fcpu(cpu, "xlnx,addr-tag-bits"); - ci->icache_write = fcpu(cpu, "xlnx,allow-icache-wr"); - ci->icache_line = fcpu(cpu, "xlnx,icache-line-len") << 2; - if (!ci->icache_line) { - if (fcpu(cpu, "xlnx,icache-use-fsl")) - ci->icache_line = 4 << 2; - else - ci->icache_line = 1 << 2; - } - ci->icache_size = fcpu(cpu, "i-cache-size"); - ci->icache_base = fcpu(cpu, "i-cache-baseaddr"); - ci->icache_high = fcpu(cpu, "i-cache-highaddr"); - - ci->use_dcache = fcpu(cpu, "xlnx,use-dcache"); - ci->dcache_tagbits = fcpu(cpu, "xlnx,dcache-addr-tag"); - ci->dcache_write = fcpu(cpu, "xlnx,allow-dcache-wr"); - ci->dcache_line = fcpu(cpu, "xlnx,dcache-line-len") << 2; - if (!ci->dcache_line) { - if (fcpu(cpu, "xlnx,dcache-use-fsl")) - ci->dcache_line = 4 << 2; - else - ci->dcache_line = 1 << 2; - } - ci->dcache_size = fcpu(cpu, "d-cache-size"); - ci->dcache_base = fcpu(cpu, "d-cache-baseaddr"); - ci->dcache_high = fcpu(cpu, "d-cache-highaddr"); - - ci->use_dopb = fcpu(cpu, "xlnx,d-opb"); - ci->use_iopb = fcpu(cpu, "xlnx,i-opb"); - ci->use_dlmb = fcpu(cpu, "xlnx,d-lmb"); - ci->use_ilmb = fcpu(cpu, "xlnx,i-lmb"); - - ci->num_fsl = fcpu(cpu, "xlnx,fsl-links"); - ci->irq_edge = fcpu(cpu, "xlnx,interrupt-is-edge"); - ci->irq_positive = fcpu(cpu, "xlnx,edge-is-positive"); - ci->area_optimised = 0; - - ci->hw_debug = fcpu(cpu, "xlnx,debug-enabled"); - ci->num_pc_brk = fcpu(cpu, "xlnx,number-of-pc-brk"); - ci->num_rd_brk = fcpu(cpu, "xlnx,number-of-rd-addr-brk"); - ci->num_wr_brk = fcpu(cpu, "xlnx,number-of-wr-addr-brk"); - - ci->cpu_clock_freq = fcpu(cpu, "timebase-frequency"); - - ci->pvr_user1 = fcpu(cpu, "xlnx,pvr-user1"); - ci->pvr_user2 = fcpu(cpu, "xlnx,pvr-user2"); - - ci->mmu = fcpu(cpu, "xlnx,use-mmu"); - - ci->ver_code = 0; - ci->fpga_family_code = 0; - - /* Do various fixups based on CPU version and FPGA family strings */ - - /* Resolved the CPU version code */ - for (i = 0; cpu_ver_lookup[i].s != NULL; i++) { - if (strcmp(cpu_ver_lookup[i].s, cpu_ver_string) == 0) - ci->ver_code = cpu_ver_lookup[i].k; - } - - /* Resolved the fpga family code */ - for (i = 0; family_string_lookup[i].s != NULL; i++) { - if (strcmp(family_string_lookup[i].s, family_string) == 0) - ci->fpga_family_code = family_string_lookup[i].k; - } - - /* FIXME - mb3 and spartan2 do not exist in PVR */ - /* This is mb3 and on a non Spartan2 */ - if (ci->ver_code == 0x20 && ci->fpga_family_code != 0xf0) - /* Hardware Multiplier in use */ - ci->use_mult = 1; -} diff --git a/trunk/arch/microblaze/kernel/cpu/cpuinfo.c b/trunk/arch/microblaze/kernel/cpu/cpuinfo.c deleted file mode 100644 index 4a740dfcf6da..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/cpuinfo.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#include -#include -#include -#include - -const struct cpu_ver_key cpu_ver_lookup[] = { - /* These key value are as per MBV field in PVR0 */ - {"5.00.a", 0x01}, - {"5.00.b", 0x02}, - {"5.00.c", 0x03}, - {"6.00.a", 0x04}, - {"6.00.b", 0x06}, - {"7.00.a", 0x05}, - {"7.00.b", 0x07}, - {"7.10.a", 0x08}, - {"7.10.b", 0x09}, - {"7.10.c", 0x0a}, - {"7.10.d", 0x0b}, - /* FIXME There is no keycode defined in MBV for these versions */ - {"2.10.a", 0x10}, - {"3.00.a", 0x20}, - {"4.00.a", 0x30}, - {"4.00.b", 0x40}, - {NULL, 0}, -}; - -/* - * FIXME Not sure if the actual key is defined by Xilinx in the PVR - */ -const struct family_string_key family_string_lookup[] = { - {"virtex2", 0x4}, - {"virtex2pro", 0x5}, - {"spartan3", 0x6}, - {"virtex4", 0x7}, - {"virtex5", 0x8}, - {"spartan3e", 0x9}, - {"spartan3a", 0xa}, - {"spartan3an", 0xb}, - {"spartan3adsp", 0xc}, - /* FIXME There is no key code defined for spartan2 */ - {"spartan2", 0xf0}, - {NULL, 0}, -}; - -struct cpuinfo cpuinfo; - -void __init setup_cpuinfo(void) -{ - struct device_node *cpu = NULL; - - cpu = (struct device_node *) of_find_node_by_type(NULL, "cpu"); - if (!cpu) - printk(KERN_ERR "You don't have cpu!!!\n"); - - printk(KERN_INFO "%s: initialising\n", __func__); - - switch (cpu_has_pvr()) { - case 0: - printk(KERN_WARNING - "%s: No PVR support. Using static CPU info from FDT\n", - __func__); - set_cpuinfo_static(&cpuinfo, cpu); - break; -/* FIXME I found weird behavior with MB 7.00.a/b - * please do not use FULL PVR with MMU */ - case 1: - printk(KERN_INFO "%s: Using full CPU PVR support\n", - __func__); - set_cpuinfo_static(&cpuinfo, cpu); - set_cpuinfo_pvr_full(&cpuinfo, cpu); - break; - default: - printk(KERN_WARNING "%s: Unsupported PVR setting\n", __func__); - set_cpuinfo_static(&cpuinfo, cpu); - } -} diff --git a/trunk/arch/microblaze/kernel/cpu/mb.c b/trunk/arch/microblaze/kernel/cpu/mb.c deleted file mode 100644 index 3b6212bdc8dc..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/mb.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * CPU-version specific code - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2006-2009 PetaLogix - * - * 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. - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static int show_cpuinfo(struct seq_file *m, void *v) -{ - int count = 0; - char *fpga_family = "Unknown"; - char *cpu_ver = "Unknown"; - int i; - - /* Denormalised to get the fpga family string */ - for (i = 0; family_string_lookup[i].s != NULL; i++) { - if (cpuinfo.fpga_family_code == family_string_lookup[i].k) { - fpga_family = (char *)family_string_lookup[i].s; - break; - } - } - - /* Denormalised to get the hw version string */ - for (i = 0; cpu_ver_lookup[i].s != NULL; i++) { - if (cpuinfo.ver_code == cpu_ver_lookup[i].k) { - cpu_ver = (char *)cpu_ver_lookup[i].s; - break; - } - } - - count = seq_printf(m, - "CPU-Family: MicroBlaze\n" - "FPGA-Arch: %s\n" - "CPU-Ver: %s\n" - "CPU-MHz: %d.%02d\n" - "BogoMips: %lu.%02lu\n", - fpga_family, - cpu_ver, - cpuinfo.cpu_clock_freq / - 1000000, - cpuinfo.cpu_clock_freq % - 1000000, - loops_per_jiffy / (500000 / HZ), - (loops_per_jiffy / (5000 / HZ)) % 100); - - count += seq_printf(m, - "HW:\n Shift:\t\t%s\n" - " MSR:\t\t%s\n" - " PCMP:\t\t%s\n" - " DIV:\t\t%s\n", - (cpuinfo.use_instr & PVR0_USE_BARREL_MASK) ? "yes" : "no", - (cpuinfo.use_instr & PVR2_USE_MSR_INSTR) ? "yes" : "no", - (cpuinfo.use_instr & PVR2_USE_PCMP_INSTR) ? "yes" : "no", - (cpuinfo.use_instr & PVR0_USE_DIV_MASK) ? "yes" : "no"); - - count += seq_printf(m, - " MMU:\t\t%x\n", - cpuinfo.mmu); - - count += seq_printf(m, - " MUL:\t\t%s\n" - " FPU:\t\t%s\n", - (cpuinfo.use_mult & PVR2_USE_MUL64_MASK) ? "v2" : - (cpuinfo.use_mult & PVR0_USE_HW_MUL_MASK) ? "v1" : "no", - (cpuinfo.use_fpu & PVR2_USE_FPU2_MASK) ? "v2" : - (cpuinfo.use_fpu & PVR0_USE_FPU_MASK) ? "v1" : "no"); - - count += seq_printf(m, - " Exc:\t\t%s%s%s%s%s%s%s%s\n", - (cpuinfo.use_exc & PVR2_OPCODE_0x0_ILL_MASK) ? "op0x0 " : "", - (cpuinfo.use_exc & PVR2_UNALIGNED_EXC_MASK) ? "unal " : "", - (cpuinfo.use_exc & PVR2_ILL_OPCODE_EXC_MASK) ? "ill " : "", - (cpuinfo.use_exc & PVR2_IOPB_BUS_EXC_MASK) ? "iopb " : "", - (cpuinfo.use_exc & PVR2_DOPB_BUS_EXC_MASK) ? "dopb " : "", - (cpuinfo.use_exc & PVR2_DIV_ZERO_EXC_MASK) ? "zero " : "", - (cpuinfo.use_exc & PVR2_FPU_EXC_MASK) ? "fpu " : "", - (cpuinfo.use_exc & PVR2_USE_FSL_EXC) ? "fsl " : ""); - - if (cpuinfo.use_icache) - count += seq_printf(m, - "Icache:\t\t%ukB\n", - cpuinfo.icache_size >> 10); - else - count += seq_printf(m, "Icache:\t\tno\n"); - - if (cpuinfo.use_dcache) - count += seq_printf(m, - "Dcache:\t\t%ukB\n", - cpuinfo.dcache_size >> 10); - else - count += seq_printf(m, "Dcache:\t\tno\n"); - - count += seq_printf(m, - "HW-Debug:\t%s\n", - cpuinfo.hw_debug ? "yes" : "no"); - - count += seq_printf(m, - "PVR-USR1:\t%x\n" - "PVR-USR2:\t%x\n", - cpuinfo.pvr_user1, - cpuinfo.pvr_user2); - - return 0; -} - -static void *c_start(struct seq_file *m, loff_t *pos) -{ - int i = *pos; - - return i < NR_CPUS ? (void *) (i + 1) : NULL; -} - -static void *c_next(struct seq_file *m, void *v, loff_t *pos) -{ - ++*pos; - return c_start(m, pos); -} - -static void c_stop(struct seq_file *m, void *v) -{ -} - -const struct seq_operations cpuinfo_op = { - .start = c_start, - .next = c_next, - .stop = c_stop, - .show = show_cpuinfo, -}; diff --git a/trunk/arch/microblaze/kernel/cpu/pvr.c b/trunk/arch/microblaze/kernel/cpu/pvr.c deleted file mode 100644 index c9a4340ddd53..000000000000 --- a/trunk/arch/microblaze/kernel/cpu/pvr.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Support for MicroBlaze PVR (processor version register) - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * 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. - */ - -#include -#include -#include -#include -#include - -/* - * Until we get an assembler that knows about the pvr registers, - * this horrible cruft will have to do. - * That hardcoded opcode is mfs r3, rpvrNN - */ - -#define get_single_pvr(pvrid, val) \ -{ \ - register unsigned tmp __asm__("r3"); \ - tmp = 0x0; /* Prevent warning about unused */ \ - __asm__ __volatile__ ( \ - ".byte 0x94,0x60,0xa0, " #pvrid "\n\t" \ - : "=r" (tmp) : : "memory"); \ - val = tmp; \ -} - -/* - * Does the CPU support the PVR register? - * return value: - * 0: no PVR - * 1: simple PVR - * 2: full PVR - * - * This must work on all CPU versions, including those before the - * PVR was even an option. - */ - -int cpu_has_pvr(void) -{ - unsigned flags; - unsigned pvr0; - - local_save_flags(flags); - - /* PVR bit in MSR tells us if there is any support */ - if (!(flags & PVR_MSR_BIT)) - return 0; - - get_single_pvr(0x00, pvr0); - pr_debug("%s: pvr0 is 0x%08x\n", __func__, pvr0); - - if (pvr0 & PVR0_PVR_FULL_MASK) - return 1; - - /* for partial PVR use static cpuinfo */ - return 2; -} - -void get_pvr(struct pvr_s *p) -{ - get_single_pvr(0, p->pvr[0]); - get_single_pvr(1, p->pvr[1]); - get_single_pvr(2, p->pvr[2]); - get_single_pvr(3, p->pvr[3]); - get_single_pvr(4, p->pvr[4]); - get_single_pvr(5, p->pvr[5]); - get_single_pvr(6, p->pvr[6]); - get_single_pvr(7, p->pvr[7]); - get_single_pvr(8, p->pvr[8]); - get_single_pvr(9, p->pvr[9]); - get_single_pvr(10, p->pvr[10]); - get_single_pvr(11, p->pvr[11]); -} diff --git a/trunk/arch/microblaze/kernel/early_printk.c b/trunk/arch/microblaze/kernel/early_printk.c deleted file mode 100644 index 62cc78993f44..000000000000 --- a/trunk/arch/microblaze/kernel/early_printk.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Early printk support for Microblaze. - * - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2003-2006 Yasushi SHOJI - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static u32 early_console_initialized; -static u32 base_addr; - -static void early_printk_putc(char c) -{ - /* - * Limit how many times we'll spin waiting for TX FIFO status. - * This will prevent lockups if the base address is incorrectly - * set, or any other issue on the UARTLITE. - * This limit is pretty arbitrary, unless we are at about 10 baud - * we'll never timeout on a working UART. - */ - - unsigned retries = 10000; - /* read status bit - 0x8 offset */ - while (retries-- && (in_be32(base_addr + 8) & (1 << 3))) - ; - - /* Only attempt the iowrite if we didn't timeout */ - /* write to TX_FIFO - 0x4 offset */ - if (retries) - out_be32(base_addr + 4, c & 0xff); -} - -static void early_printk_write(struct console *unused, - const char *s, unsigned n) -{ - while (*s && n-- > 0) { - early_printk_putc(*s); - if (*s == '\n') - early_printk_putc('\r'); - s++; - } -} - -static struct console early_serial_console = { - .name = "earlyser", - .write = early_printk_write, - .flags = CON_PRINTBUFFER, - .index = -1, -}; - -static struct console *early_console = &early_serial_console; - -void early_printk(const char *fmt, ...) -{ - char buf[512]; - int n; - va_list ap; - - if (early_console_initialized) { - va_start(ap, fmt); - n = vscnprintf(buf, 512, fmt, ap); - early_console->write(early_console, buf, n); - va_end(ap); - } -} - -int __init setup_early_printk(char *opt) -{ - if (early_console_initialized) - return 1; - - base_addr = early_uartlite_console(); - if (base_addr) { - early_console_initialized = 1; - early_printk("early_printk_console is enabled at 0x%08x\n", - base_addr); - - /* register_console(early_console); */ - - return 0; - } else - return 1; -} - -void __init disable_early_printk(void) -{ - if (!early_console_initialized || !early_console) - return; - printk(KERN_WARNING "disabling early console\n"); - unregister_console(early_console); - early_console_initialized = 0; -} diff --git a/trunk/arch/microblaze/kernel/entry-nommu.S b/trunk/arch/microblaze/kernel/entry-nommu.S deleted file mode 100644 index f24b1268baaf..000000000000 --- a/trunk/arch/microblaze/kernel/entry-nommu.S +++ /dev/null @@ -1,596 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR - .macro disable_irq - msrclr r0, MSR_IE - .endm - - .macro enable_irq - msrset r0, MSR_IE - .endm - - .macro clear_bip - msrclr r0, MSR_BIP - .endm -#else - .macro disable_irq - mfs r11, rmsr - andi r11, r11, ~MSR_IE - mts rmsr, r11 - .endm - - .macro enable_irq - mfs r11, rmsr - ori r11, r11, MSR_IE - mts rmsr, r11 - .endm - - .macro clear_bip - mfs r11, rmsr - andi r11, r11, ~MSR_BIP - mts rmsr, r11 - .endm -#endif - -ENTRY(_interrupt) - swi r1, r0, PER_CPU(ENTRY_SP) /* save the current sp */ - swi r11, r0, PER_CPU(R11_SAVE) /* temporarily save r11 */ - lwi r11, r0, PER_CPU(KM) /* load mode indicator */ - beqid r11, 1f - nop - brid 2f /* jump over */ - addik r1, r1, (-PT_SIZE) /* room for pt_regs (delay slot) */ -1: /* switch to kernel stack */ - lwi r1, r0, PER_CPU(CURRENT_SAVE) /* get the saved current */ - lwi r1, r1, TS_THREAD_INFO /* get the thread info */ - /* calculate kernel stack pointer */ - addik r1, r1, THREAD_SIZE - PT_SIZE -2: - swi r11, r1, PT_MODE /* store the mode */ - lwi r11, r0, PER_CPU(R11_SAVE) /* reload r11 */ - swi r2, r1, PT_R2 - swi r3, r1, PT_R3 - swi r4, r1, PT_R4 - swi r5, r1, PT_R5 - swi r6, r1, PT_R6 - swi r7, r1, PT_R7 - swi r8, r1, PT_R8 - swi r9, r1, PT_R9 - swi r10, r1, PT_R10 - swi r11, r1, PT_R11 - swi r12, r1, PT_R12 - swi r13, r1, PT_R13 - swi r14, r1, PT_R14 - swi r14, r1, PT_PC - swi r15, r1, PT_R15 - swi r16, r1, PT_R16 - swi r17, r1, PT_R17 - swi r18, r1, PT_R18 - swi r19, r1, PT_R19 - swi r20, r1, PT_R20 - swi r21, r1, PT_R21 - swi r22, r1, PT_R22 - swi r23, r1, PT_R23 - swi r24, r1, PT_R24 - swi r25, r1, PT_R25 - swi r26, r1, PT_R26 - swi r27, r1, PT_R27 - swi r28, r1, PT_R28 - swi r29, r1, PT_R29 - swi r30, r1, PT_R30 - swi r31, r1, PT_R31 - /* special purpose registers */ - mfs r11, rmsr - swi r11, r1, PT_MSR - mfs r11, rear - swi r11, r1, PT_EAR - mfs r11, resr - swi r11, r1, PT_ESR - mfs r11, rfsr - swi r11, r1, PT_FSR - /* reload original stack pointer and save it */ - lwi r11, r0, PER_CPU(ENTRY_SP) - swi r11, r1, PT_R1 - /* update mode indicator we are in kernel mode */ - addik r11, r0, 1 - swi r11, r0, PER_CPU(KM) - /* restore r31 */ - lwi r31, r0, PER_CPU(CURRENT_SAVE) - /* prepare the link register, the argument and jump */ - la r15, r0, ret_from_intr - 8 - addk r6, r0, r15 - braid do_IRQ - add r5, r0, r1 - -ret_from_intr: - lwi r11, r1, PT_MODE - bneid r11, 3f - - lwi r6, r31, TS_THREAD_INFO /* get thread info */ - lwi r19, r6, TI_FLAGS /* get flags in thread info */ - /* do an extra work if any bits are set */ - - andi r11, r19, _TIF_NEED_RESCHED - beqi r11, 1f - bralid r15, schedule - nop -1: andi r11, r19, _TIF_SIGPENDING - beqid r11, no_intr_reshed - addk r5, r1, r0 - addk r7, r0, r0 - bralid r15, do_signal - addk r6, r0, r0 - -no_intr_reshed: - /* save mode indicator */ - lwi r11, r1, PT_MODE -3: - swi r11, r0, PER_CPU(KM) - - /* save r31 */ - swi r31, r0, PER_CPU(CURRENT_SAVE) -restore_context: - /* special purpose registers */ - lwi r11, r1, PT_FSR - mts rfsr, r11 - lwi r11, r1, PT_ESR - mts resr, r11 - lwi r11, r1, PT_EAR - mts rear, r11 - lwi r11, r1, PT_MSR - mts rmsr, r11 - - lwi r31, r1, PT_R31 - lwi r30, r1, PT_R30 - lwi r29, r1, PT_R29 - lwi r28, r1, PT_R28 - lwi r27, r1, PT_R27 - lwi r26, r1, PT_R26 - lwi r25, r1, PT_R25 - lwi r24, r1, PT_R24 - lwi r23, r1, PT_R23 - lwi r22, r1, PT_R22 - lwi r21, r1, PT_R21 - lwi r20, r1, PT_R20 - lwi r19, r1, PT_R19 - lwi r18, r1, PT_R18 - lwi r17, r1, PT_R17 - lwi r16, r1, PT_R16 - lwi r15, r1, PT_R15 - lwi r14, r1, PT_PC - lwi r13, r1, PT_R13 - lwi r12, r1, PT_R12 - lwi r11, r1, PT_R11 - lwi r10, r1, PT_R10 - lwi r9, r1, PT_R9 - lwi r8, r1, PT_R8 - lwi r7, r1, PT_R7 - lwi r6, r1, PT_R6 - lwi r5, r1, PT_R5 - lwi r4, r1, PT_R4 - lwi r3, r1, PT_R3 - lwi r2, r1, PT_R2 - lwi r1, r1, PT_R1 - rtid r14, 0 - nop - -ENTRY(_reset) - brai 0; - -ENTRY(_user_exception) - swi r1, r0, PER_CPU(ENTRY_SP) /* save the current sp */ - swi r11, r0, PER_CPU(R11_SAVE) /* temporarily save r11 */ - lwi r11, r0, PER_CPU(KM) /* load mode indicator */ - beqid r11, 1f /* Already in kernel mode? */ - nop - brid 2f /* jump over */ - addik r1, r1, (-PT_SIZE) /* Room for pt_regs (delay slot) */ -1: /* Switch to kernel stack */ - lwi r1, r0, PER_CPU(CURRENT_SAVE) /* get the saved current */ - lwi r1, r1, TS_THREAD_INFO /* get the thread info */ - /* calculate kernel stack pointer */ - addik r1, r1, THREAD_SIZE - PT_SIZE - swi r11, r0, PER_CPU(R11_SAVE) /* temporarily save r11 */ - lwi r11, r0, PER_CPU(KM) /* load mode indicator */ -2: - swi r11, r1, PT_MODE /* store the mode */ - lwi r11, r0, PER_CPU(R11_SAVE) /* reload r11 */ - /* save them on stack */ - swi r2, r1, PT_R2 - swi r3, r1, PT_R3 /* r3: _always_ in clobber list; see unistd.h */ - swi r4, r1, PT_R4 /* r4: _always_ in clobber list; see unistd.h */ - swi r5, r1, PT_R5 - swi r6, r1, PT_R6 - swi r7, r1, PT_R7 - swi r8, r1, PT_R8 - swi r9, r1, PT_R9 - swi r10, r1, PT_R10 - swi r11, r1, PT_R11 - /* r12: _always_ in clobber list; see unistd.h */ - swi r12, r1, PT_R12 - swi r13, r1, PT_R13 - /* r14: _always_ in clobber list; see unistd.h */ - swi r14, r1, PT_R14 - /* but we want to return to the next inst. */ - addik r14, r14, 0x4 - swi r14, r1, PT_PC /* increment by 4 and store in pc */ - swi r15, r1, PT_R15 - swi r16, r1, PT_R16 - swi r17, r1, PT_R17 - swi r18, r1, PT_R18 - swi r19, r1, PT_R19 - swi r20, r1, PT_R20 - swi r21, r1, PT_R21 - swi r22, r1, PT_R22 - swi r23, r1, PT_R23 - swi r24, r1, PT_R24 - swi r25, r1, PT_R25 - swi r26, r1, PT_R26 - swi r27, r1, PT_R27 - swi r28, r1, PT_R28 - swi r29, r1, PT_R29 - swi r30, r1, PT_R30 - swi r31, r1, PT_R31 - - disable_irq - nop /* make sure IE bit is in effect */ - clear_bip /* once IE is in effect it is safe to clear BIP */ - nop - - /* special purpose registers */ - mfs r11, rmsr - swi r11, r1, PT_MSR - mfs r11, rear - swi r11, r1, PT_EAR - mfs r11, resr - swi r11, r1, PT_ESR - mfs r11, rfsr - swi r11, r1, PT_FSR - /* reload original stack pointer and save it */ - lwi r11, r0, PER_CPU(ENTRY_SP) - swi r11, r1, PT_R1 - /* update mode indicator we are in kernel mode */ - addik r11, r0, 1 - swi r11, r0, PER_CPU(KM) - /* restore r31 */ - lwi r31, r0, PER_CPU(CURRENT_SAVE) - /* re-enable interrupts now we are in kernel mode */ - enable_irq - - /* See if the system call number is valid. */ - addi r11, r12, -__NR_syscalls - bgei r11, 1f /* return to user if not valid */ - /* Figure out which function to use for this system call. */ - /* Note Microblaze barrel shift is optional, so don't rely on it */ - add r12, r12, r12 /* convert num -> ptr */ - add r12, r12, r12 - lwi r12, r12, sys_call_table /* Get function pointer */ - la r15, r0, ret_to_user-8 /* set return address */ - bra r12 /* Make the system call. */ - bri 0 /* won't reach here */ -1: - brid ret_to_user /* jump to syscall epilogue */ - addi r3, r0, -ENOSYS /* set errno in delay slot */ - -/* - * Debug traps are like a system call, but entered via brki r14, 0x60 - * All we need to do is send the SIGTRAP signal to current, ptrace and do_signal - * will handle the rest - */ -ENTRY(_debug_exception) - swi r1, r0, PER_CPU(ENTRY_SP) /* save the current sp */ - lwi r1, r0, PER_CPU(CURRENT_SAVE) /* get the saved current */ - lwi r1, r1, TS_THREAD_INFO /* get the thread info */ - addik r1, r1, THREAD_SIZE - PT_SIZE /* get the kernel stack */ - swi r11, r0, PER_CPU(R11_SAVE) /* temporarily save r11 */ - lwi r11, r0, PER_CPU(KM) /* load mode indicator */ -//save_context: - swi r11, r1, PT_MODE /* store the mode */ - lwi r11, r0, PER_CPU(R11_SAVE) /* reload r11 */ - /* save them on stack */ - swi r2, r1, PT_R2 - swi r3, r1, PT_R3 /* r3: _always_ in clobber list; see unistd.h */ - swi r4, r1, PT_R4 /* r4: _always_ in clobber list; see unistd.h */ - swi r5, r1, PT_R5 - swi r6, r1, PT_R6 - swi r7, r1, PT_R7 - swi r8, r1, PT_R8 - swi r9, r1, PT_R9 - swi r10, r1, PT_R10 - swi r11, r1, PT_R11 - /* r12: _always_ in clobber list; see unistd.h */ - swi r12, r1, PT_R12 - swi r13, r1, PT_R13 - /* r14: _always_ in clobber list; see unistd.h */ - swi r14, r1, PT_R14 - swi r14, r1, PT_PC /* Will return to interrupted instruction */ - swi r15, r1, PT_R15 - swi r16, r1, PT_R16 - swi r17, r1, PT_R17 - swi r18, r1, PT_R18 - swi r19, r1, PT_R19 - swi r20, r1, PT_R20 - swi r21, r1, PT_R21 - swi r22, r1, PT_R22 - swi r23, r1, PT_R23 - swi r24, r1, PT_R24 - swi r25, r1, PT_R25 - swi r26, r1, PT_R26 - swi r27, r1, PT_R27 - swi r28, r1, PT_R28 - swi r29, r1, PT_R29 - swi r30, r1, PT_R30 - swi r31, r1, PT_R31 - - disable_irq - nop /* make sure IE bit is in effect */ - clear_bip /* once IE is in effect it is safe to clear BIP */ - nop - - /* special purpose registers */ - mfs r11, rmsr - swi r11, r1, PT_MSR - mfs r11, rear - swi r11, r1, PT_EAR - mfs r11, resr - swi r11, r1, PT_ESR - mfs r11, rfsr - swi r11, r1, PT_FSR - /* reload original stack pointer and save it */ - lwi r11, r0, PER_CPU(ENTRY_SP) - swi r11, r1, PT_R1 - /* update mode indicator we are in kernel mode */ - addik r11, r0, 1 - swi r11, r0, PER_CPU(KM) - /* restore r31 */ - lwi r31, r0, PER_CPU(CURRENT_SAVE) - /* re-enable interrupts now we are in kernel mode */ - enable_irq - - addi r5, r0, SIGTRAP /* sending the trap signal */ - add r6, r0, r31 /* to current */ - bralid r15, send_sig - add r7, r0, r0 /* 3rd param zero */ - - /* Restore r3/r4 to work around how ret_to_user works */ - lwi r3, r1, PT_R3 - lwi r4, r1, PT_R4 - bri ret_to_user - -ENTRY(_break) - bri 0 - -/* struct task_struct *_switch_to(struct thread_info *prev, - struct thread_info *next); */ -ENTRY(_switch_to) - /* prepare return value */ - addk r3, r0, r31 - - /* save registers in cpu_context */ - /* use r11 and r12, volatile registers, as temp register */ - addik r11, r5, TI_CPU_CONTEXT - swi r1, r11, CC_R1 - swi r2, r11, CC_R2 - /* skip volatile registers. - * they are saved on stack when we jumped to _switch_to() */ - /* dedicated registers */ - swi r13, r11, CC_R13 - swi r14, r11, CC_R14 - swi r15, r11, CC_R15 - swi r16, r11, CC_R16 - swi r17, r11, CC_R17 - swi r18, r11, CC_R18 - /* save non-volatile registers */ - swi r19, r11, CC_R19 - swi r20, r11, CC_R20 - swi r21, r11, CC_R21 - swi r22, r11, CC_R22 - swi r23, r11, CC_R23 - swi r24, r11, CC_R24 - swi r25, r11, CC_R25 - swi r26, r11, CC_R26 - swi r27, r11, CC_R27 - swi r28, r11, CC_R28 - swi r29, r11, CC_R29 - swi r30, r11, CC_R30 - /* special purpose registers */ - mfs r12, rmsr - swi r12, r11, CC_MSR - mfs r12, rear - swi r12, r11, CC_EAR - mfs r12, resr - swi r12, r11, CC_ESR - mfs r12, rfsr - swi r12, r11, CC_FSR - - /* update r31, the current */ - lwi r31, r6, TI_TASK - swi r31, r0, PER_CPU(CURRENT_SAVE) - - /* get new process' cpu context and restore */ - addik r11, r6, TI_CPU_CONTEXT - - /* special purpose registers */ - lwi r12, r11, CC_FSR - mts rfsr, r12 - lwi r12, r11, CC_ESR - mts resr, r12 - lwi r12, r11, CC_EAR - mts rear, r12 - lwi r12, r11, CC_MSR - mts rmsr, r12 - /* non-volatile registers */ - lwi r30, r11, CC_R30 - lwi r29, r11, CC_R29 - lwi r28, r11, CC_R28 - lwi r27, r11, CC_R27 - lwi r26, r11, CC_R26 - lwi r25, r11, CC_R25 - lwi r24, r11, CC_R24 - lwi r23, r11, CC_R23 - lwi r22, r11, CC_R22 - lwi r21, r11, CC_R21 - lwi r20, r11, CC_R20 - lwi r19, r11, CC_R19 - /* dedicated registers */ - lwi r18, r11, CC_R18 - lwi r17, r11, CC_R17 - lwi r16, r11, CC_R16 - lwi r15, r11, CC_R15 - lwi r14, r11, CC_R14 - lwi r13, r11, CC_R13 - /* skip volatile registers */ - lwi r2, r11, CC_R2 - lwi r1, r11, CC_R1 - - rtsd r15, 8 - nop - -ENTRY(ret_from_fork) - addk r5, r0, r3 - addk r6, r0, r1 - brlid r15, schedule_tail - nop - swi r31, r1, PT_R31 /* save r31 in user context. */ - /* will soon be restored to r31 in ret_to_user */ - addk r3, r0, r0 - brid ret_to_user - nop - -work_pending: - andi r11, r19, _TIF_NEED_RESCHED - beqi r11, 1f - bralid r15, schedule - nop -1: andi r11, r19, _TIF_SIGPENDING - beqi r11, no_work_pending - addk r5, r1, r0 - addik r7, r0, 1 - bralid r15, do_signal - addk r6, r0, r0 - bri no_work_pending - -ENTRY(ret_to_user) - disable_irq - - swi r4, r1, PT_R4 /* return val */ - swi r3, r1, PT_R3 /* return val */ - - lwi r6, r31, TS_THREAD_INFO /* get thread info */ - lwi r19, r6, TI_FLAGS /* get flags in thread info */ - bnei r19, work_pending /* do an extra work if any bits are set */ -no_work_pending: - disable_irq - - /* save r31 */ - swi r31, r0, PER_CPU(CURRENT_SAVE) - /* save mode indicator */ - lwi r18, r1, PT_MODE - swi r18, r0, PER_CPU(KM) -//restore_context: - /* special purpose registers */ - lwi r18, r1, PT_FSR - mts rfsr, r18 - lwi r18, r1, PT_ESR - mts resr, r18 - lwi r18, r1, PT_EAR - mts rear, r18 - lwi r18, r1, PT_MSR - mts rmsr, r18 - - lwi r31, r1, PT_R31 - lwi r30, r1, PT_R30 - lwi r29, r1, PT_R29 - lwi r28, r1, PT_R28 - lwi r27, r1, PT_R27 - lwi r26, r1, PT_R26 - lwi r25, r1, PT_R25 - lwi r24, r1, PT_R24 - lwi r23, r1, PT_R23 - lwi r22, r1, PT_R22 - lwi r21, r1, PT_R21 - lwi r20, r1, PT_R20 - lwi r19, r1, PT_R19 - lwi r18, r1, PT_R18 - lwi r17, r1, PT_R17 - lwi r16, r1, PT_R16 - lwi r15, r1, PT_R15 - lwi r14, r1, PT_PC - lwi r13, r1, PT_R13 - lwi r12, r1, PT_R12 - lwi r11, r1, PT_R11 - lwi r10, r1, PT_R10 - lwi r9, r1, PT_R9 - lwi r8, r1, PT_R8 - lwi r7, r1, PT_R7 - lwi r6, r1, PT_R6 - lwi r5, r1, PT_R5 - lwi r4, r1, PT_R4 /* return val */ - lwi r3, r1, PT_R3 /* return val */ - lwi r2, r1, PT_R2 - lwi r1, r1, PT_R1 - - rtid r14, 0 - nop - -sys_vfork_wrapper: - brid sys_vfork - addk r5, r1, r0 - -sys_clone_wrapper: - brid sys_clone - addk r7, r1, r0 - -sys_execve_wrapper: - brid sys_execve - addk r8, r1, r0 - -sys_sigreturn_wrapper: - brid sys_sigreturn - addk r5, r1, r0 - -sys_rt_sigreturn_wrapper: - brid sys_rt_sigreturn - addk r5, r1, r0 - -sys_sigsuspend_wrapper: - brid sys_rt_sigsuspend - addk r6, r1, r0 - -sys_rt_sigsuspend_wrapper: - brid sys_rt_sigsuspend - addk r7, r1, r0 - - /* Interrupt vector table */ - .section .init.ivt, "ax" - .org 0x0 - brai _reset - brai _user_exception - brai _interrupt - brai _break - brai _hw_exception_handler - .org 0x60 - brai _debug_exception - -.section .rodata,"a" -#include "syscall_table.S" - -syscall_table_size=(.-sys_call_table) diff --git a/trunk/arch/microblaze/kernel/exceptions.c b/trunk/arch/microblaze/kernel/exceptions.c deleted file mode 100644 index 4a8a4064c7ee..000000000000 --- a/trunk/arch/microblaze/kernel/exceptions.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * HW exception handling - * - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008 PetaLogix - * - * 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. - */ - -/* - * This file handles the architecture-dependent parts of hardware exceptions - */ - -#include -#include -#include -#include -#include - -#include -#include /* For KM CPU var */ -#include -#include -#include -#include - -#define MICROBLAZE_ILL_OPCODE_EXCEPTION 0x02 -#define MICROBLAZE_IBUS_EXCEPTION 0x03 -#define MICROBLAZE_DBUS_EXCEPTION 0x04 -#define MICROBLAZE_DIV_ZERO_EXCEPTION 0x05 -#define MICROBLAZE_FPU_EXCEPTION 0x06 -#define MICROBLAZE_PRIVILEG_EXCEPTION 0x07 - -static DEFINE_SPINLOCK(die_lock); - -void die(const char *str, struct pt_regs *fp, long err) -{ - console_verbose(); - spin_lock_irq(&die_lock); - printk(KERN_WARNING "Oops: %s, sig: %ld\n", str, err); - show_regs(fp); - spin_unlock_irq(&die_lock); - /* do_exit() should take care of panic'ing from an interrupt - * context so we don't handle it here - */ - do_exit(err); -} - -void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) -{ - siginfo_t info; - - if (kernel_mode(regs)) { - debugger(regs); - die("Exception in kernel mode", regs, signr); - } - info.si_signo = signr; - info.si_errno = 0; - info.si_code = code; - info.si_addr = (void __user *) addr; - force_sig_info(signr, &info, current); -} - -asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, - int fsr, int addr) -{ -#if 0 - printk(KERN_WARNING "Exception %02x in %s mode, FSR=%08x PC=%08x ESR=%08x\n", - type, user_mode(regs) ? "user" : "kernel", fsr, - (unsigned int) regs->pc, (unsigned int) regs->esr); -#endif - - switch (type & 0x1F) { - case MICROBLAZE_ILL_OPCODE_EXCEPTION: - _exception(SIGILL, regs, ILL_ILLOPC, addr); - break; - case MICROBLAZE_IBUS_EXCEPTION: - if (user_mode(regs)) { - printk(KERN_WARNING "Instruction bus error exception in user mode.\n"); - _exception(SIGBUS, regs, BUS_ADRERR, addr); - return; - } - printk(KERN_WARNING "Instruction bus error exception in kernel mode.\n"); - die("bus exception", regs, SIGBUS); - break; - case MICROBLAZE_DBUS_EXCEPTION: - if (user_mode(regs)) { - printk(KERN_WARNING "Data bus error exception in user mode.\n"); - _exception(SIGBUS, regs, BUS_ADRERR, addr); - return; - } - printk(KERN_WARNING "Data bus error exception in kernel mode.\n"); - die("bus exception", regs, SIGBUS); - break; - case MICROBLAZE_DIV_ZERO_EXCEPTION: - printk(KERN_WARNING "Divide by zero exception\n"); - _exception(SIGILL, regs, ILL_ILLOPC, addr); - break; - - case MICROBLAZE_FPU_EXCEPTION: - /* IEEE FP exception */ - /* I removed fsr variable and use code var for storing fsr */ - if (fsr & FSR_IO) - fsr = FPE_FLTINV; - else if (fsr & FSR_OF) - fsr = FPE_FLTOVF; - else if (fsr & FSR_UF) - fsr = FPE_FLTUND; - else if (fsr & FSR_DZ) - fsr = FPE_FLTDIV; - else if (fsr & FSR_DO) - fsr = FPE_FLTRES; - _exception(SIGFPE, regs, fsr, addr); - break; - - default: - printk(KERN_WARNING "Unexpected exception %02x " - "PC=%08x in %s mode\n", type, (unsigned int) addr, - kernel_mode(regs) ? "kernel" : "user"); - } - return; -} diff --git a/trunk/arch/microblaze/kernel/head.S b/trunk/arch/microblaze/kernel/head.S deleted file mode 100644 index 319dc35fc922..000000000000 --- a/trunk/arch/microblaze/kernel/head.S +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include - - .text -ENTRY(_start) - mfs r1, rmsr - andi r1, r1, ~2 - mts rmsr, r1 - -/* save fdt to kernel location */ -/* r7 stores pointer to fdt blob */ - beqi r7, no_fdt_arg - or r11, r0, r0 /* incremment */ - ori r4, r0, TOPHYS(_fdt_start) /* save bram context */ - ori r3, r0, (0x4000 - 4) -_copy_fdt: - lw r12, r7, r11 /* r12 = r7 + r11 */ - sw r12, r4, r11 /* addr[r4 + r11] = r12 */ - addik r11, r11, 4 /* increment counting */ - bgtid r3, _copy_fdt /* loop for all entries */ - addik r3, r3, -4 /* descrement loop */ -no_fdt_arg: - - /* Initialize small data anchors */ - la r13, r0, _KERNEL_SDA_BASE_ - la r2, r0, _KERNEL_SDA2_BASE_ - - /* Initialize stack pointer */ - la r1, r0, init_thread_union + THREAD_SIZE - 4 - - /* Initialize r31 with current task address */ - la r31, r0, init_task - - /* - * Call platform dependent initialize function. - * Please see $(ARCH)/mach-$(SUBARCH)/setup.c for - * the function. - */ - la r8, r0, machine_early_init - brald r15, r8 - nop - - la r15, r0, machine_halt - braid start_kernel - nop diff --git a/trunk/arch/microblaze/kernel/heartbeat.c b/trunk/arch/microblaze/kernel/heartbeat.c deleted file mode 100644 index 1bdf20222b92..000000000000 --- a/trunk/arch/microblaze/kernel/heartbeat.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include - -#include -#include -#include - -static unsigned int base_addr; - -void heartbeat(void) -{ - static unsigned int cnt, period, dist; - - if (base_addr) { - if (cnt == 0 || cnt == dist) - out_be32(base_addr, 1); - else if (cnt == 7 || cnt == dist + 7) - out_be32(base_addr, 0); - - if (++cnt > period) { - cnt = 0; - /* - * The hyperbolic function below modifies the heartbeat - * period length in dependency of the current (5min) - * load. It goes through the points f(0)=126, f(1)=86, - * f(5)=51, f(inf)->30. - */ - period = ((672 << FSHIFT) / (5 * avenrun[0] + - (7 << FSHIFT))) + 30; - dist = period / 4; - } - } -} - -void setup_heartbeat(void) -{ - struct device_node *gpio = NULL; - int j; - char *gpio_list[] = { - "xlnx,xps-gpio-1.00.a", - "xlnx,opb-gpio-1.00.a", - NULL - }; - - for (j = 0; gpio_list[j] != NULL; j++) { - gpio = of_find_compatible_node(NULL, NULL, gpio_list[j]); - if (gpio) - break; - } - - base_addr = *(int *) of_get_property(gpio, "reg", NULL); - base_addr = (unsigned long) ioremap(base_addr, PAGE_SIZE); - printk(KERN_NOTICE "Heartbeat GPIO at 0x%x\n", base_addr); - - if (*(int *) of_get_property(gpio, "xlnx,is-bidir", NULL)) - out_be32(base_addr + 4, 0); /* GPIO is configured as output */ -} diff --git a/trunk/arch/microblaze/kernel/hw_exception_handler.S b/trunk/arch/microblaze/kernel/hw_exception_handler.S deleted file mode 100644 index cf9486d99838..000000000000 --- a/trunk/arch/microblaze/kernel/hw_exception_handler.S +++ /dev/null @@ -1,458 +0,0 @@ -/* - * Exception handling for Microblaze - * - * Rewriten interrupt handling - * - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * - * uClinux customisation (C) 2005 John Williams - * - * MMU code derived from arch/ppc/kernel/head_4xx.S: - * Copyright (C) 1995-1996 Gary Thomas - * Initial PowerPC version. - * Copyright (C) 1996 Cort Dougan - * Rewritten for PReP - * Copyright (C) 1996 Paul Mackerras - * Low-level exception handers, MMU support, and rewrite. - * Copyright (C) 1997 Dan Malek - * PowerPC 8xx modifications. - * Copyright (C) 1998-1999 TiVo, Inc. - * PowerPC 403GCX modifications. - * Copyright (C) 1999 Grant Erickson - * PowerPC 403GCX/405GP modifications. - * Copyright 2000 MontaVista Software Inc. - * PPC405 modifications - * PowerPC 403GCX/405GP modifications. - * Author: MontaVista Software, Inc. - * frank_rowand@mvista.com or source@mvista.com - * debbie_chu@mvista.com - * - * Original code - * Copyright (C) 2004 Xilinx, Inc. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 as published - * by the Free Software Foundation. - */ - -/* - * Here are the handlers which don't require enabling translation - * and calling other kernel code thus we can keep their design very simple - * and do all processing in real mode. All what they need is a valid current - * (that is an issue for the CONFIG_REGISTER_TASK_PTR case) - * This handlers use r3,r4,r5,r6 and optionally r[current] to work therefore - * these registers are saved/restored - * The handlers which require translation are in entry.S --KAA - * - * Microblaze HW Exception Handler - * - Non self-modifying exception handler for the following exception conditions - * - Unalignment - * - Instruction bus error - * - Data bus error - * - Illegal instruction opcode - * - Divide-by-zero - * - * Note we disable interrupts during exception handling, otherwise we will - * possibly get multiple re-entrancy if interrupt handles themselves cause - * exceptions. JW - */ - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -/* Helpful Macros */ -#define EX_HANDLER_STACK_SIZ (4*19) -#define NUM_TO_REG(num) r ## num - -#define LWREG_NOP \ - bri ex_handler_unhandled; \ - nop; - -#define SWREG_NOP \ - bri ex_handler_unhandled; \ - nop; - -/* FIXME this is weird - for noMMU kernel is not possible to use brid - * instruction which can shorten executed time - */ - -/* r3 is the source */ -#define R3_TO_LWREG_V(regnum) \ - swi r3, r1, 4 * regnum; \ - bri ex_handler_done; - -/* r3 is the source */ -#define R3_TO_LWREG(regnum) \ - or NUM_TO_REG (regnum), r0, r3; \ - bri ex_handler_done; - -/* r3 is the target */ -#define SWREG_TO_R3_V(regnum) \ - lwi r3, r1, 4 * regnum; \ - bri ex_sw_tail; - -/* r3 is the target */ -#define SWREG_TO_R3(regnum) \ - or r3, r0, NUM_TO_REG (regnum); \ - bri ex_sw_tail; - -.extern other_exception_handler /* Defined in exception.c */ - -/* - * hw_exception_handler - Handler for exceptions - * - * Exception handler notes: - * - Handles all exceptions - * - Does not handle unaligned exceptions during load into r17, r1, r0. - * - Does not handle unaligned exceptions during store from r17 (cannot be - * done) and r1 (slows down common case) - * - * Relevant register structures - * - * EAR - |----|----|----|----|----|----|----|----| - * - < ## 32 bit faulting address ## > - * - * ESR - |----|----|----|----|----| - | - |-----|-----| - * - W S REG EXC - * - * - * STACK FRAME STRUCTURE (for NO_MMU) - * --------------------------------- - * - * +-------------+ + 0 - * | MSR | - * +-------------+ + 4 - * | r1 | - * | . | - * | . | - * | . | - * | . | - * | r18 | - * +-------------+ + 76 - * | . | - * | . | - * - * NO_MMU kernel use the same r0_ram pointed space - look to vmlinux.lds.S - * which is used for storing register values - old style was, that value were - * stored in stack but in case of failure you lost information about register. - * Currently you can see register value in memory in specific place. - * In compare to with previous solution the speed should be the same. - * - * MMU exception handler has different handling compare to no MMU kernel. - * Exception handler use jump table for directing of what happen. For MMU kernel - * is this approach better because MMU relate exception are handled by asm code - * in this file. In compare to with MMU expect of unaligned exception - * is everything handled by C code. - */ - -/* - * every of these handlers is entered having R3/4/5/6/11/current saved on stack - * and clobbered so care should be taken to restore them if someone is going to - * return from exception - */ - -/* wrappers to restore state before coming to entry.S */ - -.global _hw_exception_handler -.section .text -.align 4 -.ent _hw_exception_handler -_hw_exception_handler: - addik r1, r1, -(EX_HANDLER_STACK_SIZ); /* Create stack frame */ - swi r3, r1, PT_R3 - swi r4, r1, PT_R4 - swi r5, r1, PT_R5 - swi r6, r1, PT_R6 - - mfs r5, rmsr; - nop - swi r5, r1, 0; - mfs r4, rbtr /* Save BTR before jumping to handler */ - nop - mfs r3, resr - nop - - andi r5, r3, 0x1000; /* Check ESR[DS] */ - beqi r5, not_in_delay_slot; /* Branch if ESR[DS] not set */ - mfs r17, rbtr; /* ESR[DS] set - return address in BTR */ - nop -not_in_delay_slot: - swi r17, r1, PT_R17 - - andi r5, r3, 0x1F; /* Extract ESR[EXC] */ - - /* Exceptions enabled here. This will allow nested exceptions */ - mfs r6, rmsr; - nop - swi r6, r1, 0; /* RMSR_OFFSET */ - ori r6, r6, 0x100; /* Turn ON the EE bit */ - andi r6, r6, ~2; /* Disable interrupts */ - mts rmsr, r6; - nop - - xori r6, r5, 1; /* 00001 = Unaligned Exception */ - /* Jump to unalignment exception handler */ - beqi r6, handle_unaligned_ex; - -handle_other_ex: /* Handle Other exceptions here */ - /* Save other volatiles before we make procedure calls below */ - swi r7, r1, PT_R7 - swi r8, r1, PT_R8 - swi r9, r1, PT_R9 - swi r10, r1, PT_R10 - swi r11, r1, PT_R11 - swi r12, r1, PT_R12 - swi r14, r1, PT_R14 - swi r15, r1, PT_R15 - swi r18, r1, PT_R18 - - or r5, r1, r0 - andi r6, r3, 0x1F; /* Load ESR[EC] */ - lwi r7, r0, PER_CPU(KM) /* MS: saving current kernel mode to regs */ - swi r7, r1, PT_MODE - mfs r7, rfsr - nop - addk r8, r17, r0; /* Load exception address */ - bralid r15, full_exception; /* Branch to the handler */ - nop; - - /* - * Trigger execution of the signal handler by enabling - * interrupts and calling an invalid syscall. - */ - mfs r5, rmsr; - nop - ori r5, r5, 2; - mts rmsr, r5; /* enable interrupt */ - nop - addi r12, r0, __NR_syscalls; - brki r14, 0x08; - mfs r5, rmsr; /* disable interrupt */ - nop - andi r5, r5, ~2; - mts rmsr, r5; - nop - - lwi r7, r1, PT_R7 - lwi r8, r1, PT_R8 - lwi r9, r1, PT_R9 - lwi r10, r1, PT_R10 - lwi r11, r1, PT_R11 - lwi r12, r1, PT_R12 - lwi r14, r1, PT_R14 - lwi r15, r1, PT_R15 - lwi r18, r1, PT_R18 - - bri ex_handler_done; /* Complete exception handling */ - -/* 0x01 - Unaligned data access exception - * This occurs when a word access is not aligned on a word boundary, - * or when a 16-bit access is not aligned on a 16-bit boundary. - * This handler perform the access, and returns, except for MMU when - * the unaligned address is last on a 4k page or the physical address is - * not found in the page table, in which case unaligned_data_trap is called. - */ -handle_unaligned_ex: - /* Working registers already saved: R3, R4, R5, R6 - * R3 = ESR - * R4 = BTR - */ - mfs r4, rear; - nop - - andi r6, r3, 0x3E0; /* Mask and extract the register operand */ - srl r6, r6; /* r6 >> 5 */ - srl r6, r6; - srl r6, r6; - srl r6, r6; - srl r6, r6; - /* Store the register operand in a temporary location */ - sbi r6, r0, TOPHYS(ex_reg_op); - - andi r6, r3, 0x400; /* Extract ESR[S] */ - bnei r6, ex_sw; -ex_lw: - andi r6, r3, 0x800; /* Extract ESR[W] */ - beqi r6, ex_lhw; - lbui r5, r4, 0; /* Exception address in r4 */ - /* Load a word, byte-by-byte from destination address - and save it in tmp space */ - sbi r5, r0, TOPHYS(ex_tmp_data_loc_0); - lbui r5, r4, 1; - sbi r5, r0, TOPHYS(ex_tmp_data_loc_1); - lbui r5, r4, 2; - sbi r5, r0, TOPHYS(ex_tmp_data_loc_2); - lbui r5, r4, 3; - sbi r5, r0, TOPHYS(ex_tmp_data_loc_3); - /* Get the destination register value into r3 */ - lwi r3, r0, TOPHYS(ex_tmp_data_loc_0); - bri ex_lw_tail; -ex_lhw: - lbui r5, r4, 0; /* Exception address in r4 */ - /* Load a half-word, byte-by-byte from destination - address and save it in tmp space */ - sbi r5, r0, TOPHYS(ex_tmp_data_loc_0); - lbui r5, r4, 1; - sbi r5, r0, TOPHYS(ex_tmp_data_loc_1); - /* Get the destination register value into r3 */ - lhui r3, r0, TOPHYS(ex_tmp_data_loc_0); -ex_lw_tail: - /* Get the destination register number into r5 */ - lbui r5, r0, TOPHYS(ex_reg_op); - /* Form load_word jump table offset (lw_table + (8 * regnum)) */ - la r6, r0, TOPHYS(lw_table); - addk r5, r5, r5; - addk r5, r5, r5; - addk r5, r5, r5; - addk r5, r5, r6; - bra r5; -ex_lw_end: /* Exception handling of load word, ends */ -ex_sw: - /* Get the destination register number into r5 */ - lbui r5, r0, TOPHYS(ex_reg_op); - /* Form store_word jump table offset (sw_table + (8 * regnum)) */ - la r6, r0, TOPHYS(sw_table); - add r5, r5, r5; - add r5, r5, r5; - add r5, r5, r5; - add r5, r5, r6; - bra r5; -ex_sw_tail: - mfs r6, resr; - nop - andi r6, r6, 0x800; /* Extract ESR[W] */ - beqi r6, ex_shw; - /* Get the word - delay slot */ - swi r3, r0, TOPHYS(ex_tmp_data_loc_0); - /* Store the word, byte-by-byte into destination address */ - lbui r3, r0, TOPHYS(ex_tmp_data_loc_0); - sbi r3, r4, 0; - lbui r3, r0, TOPHYS(ex_tmp_data_loc_1); - sbi r3, r4, 1; - lbui r3, r0, TOPHYS(ex_tmp_data_loc_2); - sbi r3, r4, 2; - lbui r3, r0, TOPHYS(ex_tmp_data_loc_3); - sbi r3, r4, 3; - bri ex_handler_done; - -ex_shw: - /* Store the lower half-word, byte-by-byte into destination address */ - swi r3, r0, TOPHYS(ex_tmp_data_loc_0); - lbui r3, r0, TOPHYS(ex_tmp_data_loc_2); - sbi r3, r4, 0; - lbui r3, r0, TOPHYS(ex_tmp_data_loc_3); - sbi r3, r4, 1; -ex_sw_end: /* Exception handling of store word, ends. */ - -ex_handler_done: - lwi r5, r1, 0 /* RMSR */ - mts rmsr, r5 - nop - lwi r3, r1, PT_R3 - lwi r4, r1, PT_R4 - lwi r5, r1, PT_R5 - lwi r6, r1, PT_R6 - lwi r17, r1, PT_R17 - - rted r17, 0 - addik r1, r1, (EX_HANDLER_STACK_SIZ); /* Restore stack frame */ - -.end _hw_exception_handler - -ex_handler_unhandled: -/* FIXME add handle function for unhandled exception - dump register */ - bri 0 - -.section .text -.align 4 -lw_table: -lw_r0: R3_TO_LWREG (0); -lw_r1: LWREG_NOP; -lw_r2: R3_TO_LWREG (2); -lw_r3: R3_TO_LWREG_V (3); -lw_r4: R3_TO_LWREG_V (4); -lw_r5: R3_TO_LWREG_V (5); -lw_r6: R3_TO_LWREG_V (6); -lw_r7: R3_TO_LWREG (7); -lw_r8: R3_TO_LWREG (8); -lw_r9: R3_TO_LWREG (9); -lw_r10: R3_TO_LWREG (10); -lw_r11: R3_TO_LWREG (11); -lw_r12: R3_TO_LWREG (12); -lw_r13: R3_TO_LWREG (13); -lw_r14: R3_TO_LWREG (14); -lw_r15: R3_TO_LWREG (15); -lw_r16: R3_TO_LWREG (16); -lw_r17: LWREG_NOP; -lw_r18: R3_TO_LWREG (18); -lw_r19: R3_TO_LWREG (19); -lw_r20: R3_TO_LWREG (20); -lw_r21: R3_TO_LWREG (21); -lw_r22: R3_TO_LWREG (22); -lw_r23: R3_TO_LWREG (23); -lw_r24: R3_TO_LWREG (24); -lw_r25: R3_TO_LWREG (25); -lw_r26: R3_TO_LWREG (26); -lw_r27: R3_TO_LWREG (27); -lw_r28: R3_TO_LWREG (28); -lw_r29: R3_TO_LWREG (29); -lw_r30: R3_TO_LWREG (30); -lw_r31: R3_TO_LWREG (31); - -sw_table: -sw_r0: SWREG_TO_R3 (0); -sw_r1: SWREG_NOP; -sw_r2: SWREG_TO_R3 (2); -sw_r3: SWREG_TO_R3_V (3); -sw_r4: SWREG_TO_R3_V (4); -sw_r5: SWREG_TO_R3_V (5); -sw_r6: SWREG_TO_R3_V (6); -sw_r7: SWREG_TO_R3 (7); -sw_r8: SWREG_TO_R3 (8); -sw_r9: SWREG_TO_R3 (9); -sw_r10: SWREG_TO_R3 (10); -sw_r11: SWREG_TO_R3 (11); -sw_r12: SWREG_TO_R3 (12); -sw_r13: SWREG_TO_R3 (13); -sw_r14: SWREG_TO_R3 (14); -sw_r15: SWREG_TO_R3 (15); -sw_r16: SWREG_TO_R3 (16); -sw_r17: SWREG_NOP; -sw_r18: SWREG_TO_R3 (18); -sw_r19: SWREG_TO_R3 (19); -sw_r20: SWREG_TO_R3 (20); -sw_r21: SWREG_TO_R3 (21); -sw_r22: SWREG_TO_R3 (22); -sw_r23: SWREG_TO_R3 (23); -sw_r24: SWREG_TO_R3 (24); -sw_r25: SWREG_TO_R3 (25); -sw_r26: SWREG_TO_R3 (26); -sw_r27: SWREG_TO_R3 (27); -sw_r28: SWREG_TO_R3 (28); -sw_r29: SWREG_TO_R3 (29); -sw_r30: SWREG_TO_R3 (30); -sw_r31: SWREG_TO_R3 (31); - -/* Temporary data structures used in the handler */ -.section .data -.align 4 -ex_tmp_data_loc_0: - .byte 0 -ex_tmp_data_loc_1: - .byte 0 -ex_tmp_data_loc_2: - .byte 0 -ex_tmp_data_loc_3: - .byte 0 -ex_reg_op: - .byte 0 diff --git a/trunk/arch/microblaze/kernel/init_task.c b/trunk/arch/microblaze/kernel/init_task.c deleted file mode 100644 index 48eb9fb255fa..000000000000 --- a/trunk/arch/microblaze/kernel/init_task.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2009 Michal Simek - * Copyright (C) 2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include - -#include - -static struct signal_struct init_signals = INIT_SIGNALS(init_signals); -static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); -struct mm_struct init_mm = INIT_MM(init_mm); -EXPORT_SYMBOL(init_mm); - -union thread_union init_thread_union - __attribute__((__section__(".data.init_task"))) = -{ INIT_THREAD_INFO(init_task) }; - -struct task_struct init_task = INIT_TASK(init_task); -EXPORT_SYMBOL(init_task); diff --git a/trunk/arch/microblaze/kernel/intc.c b/trunk/arch/microblaze/kernel/intc.c deleted file mode 100644 index a69d3e3c2fd4..000000000000 --- a/trunk/arch/microblaze/kernel/intc.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include - -#include -#include - -#ifdef CONFIG_SELFMOD_INTC -#include -#define INTC_BASE BARRIER_BASE_ADDR -#else -static unsigned int intc_baseaddr; -#define INTC_BASE intc_baseaddr -#endif - -unsigned int nr_irq; - -/* No one else should require these constants, so define them locally here. */ -#define ISR 0x00 /* Interrupt Status Register */ -#define IPR 0x04 /* Interrupt Pending Register */ -#define IER 0x08 /* Interrupt Enable Register */ -#define IAR 0x0c /* Interrupt Acknowledge Register */ -#define SIE 0x10 /* Set Interrupt Enable bits */ -#define CIE 0x14 /* Clear Interrupt Enable bits */ -#define IVR 0x18 /* Interrupt Vector Register */ -#define MER 0x1c /* Master Enable Register */ - -#define MER_ME (1<<0) -#define MER_HIE (1<<1) - -static void intc_enable_or_unmask(unsigned int irq) -{ - pr_debug("enable_or_unmask: %d\n", irq); - out_be32(INTC_BASE + SIE, 1 << irq); -} - -static void intc_disable_or_mask(unsigned int irq) -{ - pr_debug("disable: %d\n", irq); - out_be32(INTC_BASE + CIE, 1 << irq); -} - -static void intc_ack(unsigned int irq) -{ - pr_debug("ack: %d\n", irq); - out_be32(INTC_BASE + IAR, 1 << irq); -} - -static void intc_mask_ack(unsigned int irq) -{ - unsigned long mask = 1 << irq; - pr_debug("disable_and_ack: %d\n", irq); - out_be32(INTC_BASE + CIE, mask); - out_be32(INTC_BASE + IAR, mask); -} - -static void intc_end(unsigned int irq) -{ - unsigned long mask = 1 << irq; - pr_debug("end: %d\n", irq); - if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { - out_be32(INTC_BASE + SIE, mask); - /* ack level sensitive intr */ - if (irq_desc[irq].status & IRQ_LEVEL) - out_be32(INTC_BASE + IAR, mask); - } -} - -static struct irq_chip intc_dev = { - .name = "Xilinx INTC", - .unmask = intc_enable_or_unmask, - .mask = intc_disable_or_mask, - .ack = intc_ack, - .mask_ack = intc_mask_ack, - .end = intc_end, -}; - -unsigned int get_irq(struct pt_regs *regs) -{ - int irq; - - /* - * NOTE: This function is the one that needs to be improved in - * order to handle multiple interrupt controllers. It currently - * is hardcoded to check for interrupts only on the first INTC. - */ - irq = in_be32(INTC_BASE + IVR); - pr_debug("get_irq: %d\n", irq); - - return irq; -} - -void __init init_IRQ(void) -{ - u32 i, j, intr_type; - struct device_node *intc = NULL; -#ifdef CONFIG_SELFMOD_INTC - unsigned int intc_baseaddr = 0; - static int arr_func[] = { - (int)&get_irq, - (int)&intc_enable_or_unmask, - (int)&intc_disable_or_mask, - (int)&intc_mask_ack, - (int)&intc_ack, - (int)&intc_end, - 0 - }; -#endif - static char *intc_list[] = { - "xlnx,xps-intc-1.00.a", - "xlnx,opb-intc-1.00.c", - "xlnx,opb-intc-1.00.b", - "xlnx,opb-intc-1.00.a", - NULL - }; - - for (j = 0; intc_list[j] != NULL; j++) { - intc = of_find_compatible_node(NULL, NULL, intc_list[j]); - if (intc) - break; - } - - intc_baseaddr = *(int *) of_get_property(intc, "reg", NULL); - intc_baseaddr = (unsigned long) ioremap(intc_baseaddr, PAGE_SIZE); - nr_irq = *(int *) of_get_property(intc, "xlnx,num-intr-inputs", NULL); - - intr_type = - *(int *) of_get_property(intc, "xlnx,kind-of-intr", NULL); - if (intr_type >= (1 << nr_irq)) - printk(KERN_INFO " ERROR: Mishmash in king-of-intr param\n"); - -#ifdef CONFIG_SELFMOD_INTC - selfmod_function((int *) arr_func, intc_baseaddr); -#endif - printk(KERN_INFO "%s #0 at 0x%08x, num_irq=%d, edge=0x%x\n", - intc_list[j], intc_baseaddr, nr_irq, intr_type); - - /* - * Disable all external interrupts until they are - * explicity requested. - */ - out_be32(intc_baseaddr + IER, 0); - - /* Acknowledge any pending interrupts just in case. */ - out_be32(intc_baseaddr + IAR, 0xffffffff); - - /* Turn on the Master Enable. */ - out_be32(intc_baseaddr + MER, MER_HIE | MER_ME); - - for (i = 0; i < nr_irq; ++i) { - if (intr_type & (0x00000001 << i)) { - set_irq_chip_and_handler_name(i, &intc_dev, - handle_edge_irq, intc_dev.name); - irq_desc[i].status &= ~IRQ_LEVEL; - } else { - set_irq_chip_and_handler_name(i, &intc_dev, - handle_level_irq, intc_dev.name); - irq_desc[i].status |= IRQ_LEVEL; - } - } -} diff --git a/trunk/arch/microblaze/kernel/irq.c b/trunk/arch/microblaze/kernel/irq.c deleted file mode 100644 index f688ee93e3b9..000000000000 --- a/trunk/arch/microblaze/kernel/irq.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -unsigned int irq_of_parse_and_map(struct device_node *dev, int index) -{ - struct of_irq oirq; - - if (of_irq_map_one(dev, index, &oirq)) - return NO_IRQ; - - return oirq.specifier[0]; -} -EXPORT_SYMBOL_GPL(irq_of_parse_and_map); - -/* - * 'what should we do if we get a hw irq event on an illegal vector'. - * each architecture has to answer this themselves. - */ -void ack_bad_irq(unsigned int irq) -{ - printk(KERN_WARNING "unexpected IRQ trap at vector %02x\n", irq); -} - -static u32 concurrent_irq; - -void do_IRQ(struct pt_regs *regs) -{ - unsigned int irq; - struct pt_regs *old_regs = set_irq_regs(regs); - - irq_enter(); - irq = get_irq(regs); -next_irq: - BUG_ON(irq == -1U); - generic_handle_irq(irq); - - irq = get_irq(regs); - if (irq != -1U) { - pr_debug("next irq: %d\n", irq); - ++concurrent_irq; - goto next_irq; - } - - irq_exit(); - set_irq_regs(old_regs); -} - -int show_interrupts(struct seq_file *p, void *v) -{ - int i = *(loff_t *) v, j; - struct irqaction *action; - unsigned long flags; - - if (i == 0) { - seq_printf(p, " "); - for_each_online_cpu(j) - seq_printf(p, "CPU%-8d", j); - seq_putc(p, '\n'); - } - - if (i < nr_irq) { - spin_lock_irqsave(&irq_desc[i].lock, flags); - action = irq_desc[i].action; - if (!action) - goto skip; - seq_printf(p, "%3d: ", i); -#ifndef CONFIG_SMP - seq_printf(p, "%10u ", kstat_irqs(i)); -#else - for_each_online_cpu(j) - seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); -#endif - seq_printf(p, " %8s", irq_desc[i].status & - IRQ_LEVEL ? "level" : "edge"); - seq_printf(p, " %8s", irq_desc[i].chip->name); - seq_printf(p, " %s", action->name); - - for (action = action->next; action; action = action->next) - seq_printf(p, ", %s", action->name); - - seq_putc(p, '\n'); -skip: - spin_unlock_irqrestore(&irq_desc[i].lock, flags); - } - return 0; -} diff --git a/trunk/arch/microblaze/kernel/microblaze_ksyms.c b/trunk/arch/microblaze/kernel/microblaze_ksyms.c deleted file mode 100644 index 5f71790e3c3c..000000000000 --- a/trunk/arch/microblaze/kernel/microblaze_ksyms.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -/* - * libgcc functions - functions that are used internally by the - * compiler... (prototypes are not correct though, but that - * doesn't really matter since they're not versioned). - */ -extern void __ashldi3(void); -EXPORT_SYMBOL(__ashldi3); -extern void __ashrdi3(void); -EXPORT_SYMBOL(__ashrdi3); -extern void __divsi3(void); -EXPORT_SYMBOL(__divsi3); -extern void __lshrdi3(void); -EXPORT_SYMBOL(__lshrdi3); -extern void __modsi3(void); -EXPORT_SYMBOL(__modsi3); -extern void __mulsi3(void); -EXPORT_SYMBOL(__mulsi3); -extern void __muldi3(void); -EXPORT_SYMBOL(__muldi3); -extern void __ucmpdi2(void); -EXPORT_SYMBOL(__ucmpdi2); -extern void __udivsi3(void); -EXPORT_SYMBOL(__udivsi3); -extern void __umodsi3(void); -EXPORT_SYMBOL(__umodsi3); diff --git a/trunk/arch/microblaze/kernel/module.c b/trunk/arch/microblaze/kernel/module.c deleted file mode 100644 index 51414171326f..000000000000 --- a/trunk/arch/microblaze/kernel/module.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -void *module_alloc(unsigned long size) -{ - void *ret; - ret = (size == 0) ? NULL : vmalloc(size); - pr_debug("module_alloc (%08lx@%08lx)\n", size, (unsigned long int)ret); - return ret; -} - -void module_free(struct module *module, void *region) -{ - pr_debug("module_free(%s,%08lx)\n", module->name, - (unsigned long)region); - vfree(region); -} - -int module_frob_arch_sections(Elf_Ehdr *hdr, - Elf_Shdr *sechdrs, - char *secstrings, - struct module *mod) -{ - return 0; -} - -int apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, - unsigned int symindex, unsigned int relsec, struct module *module) -{ - printk(KERN_ERR "module %s: ADD RELOCATION unsupported\n", - module->name); - return -ENOEXEC; -} - -int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab, - unsigned int symindex, unsigned int relsec, struct module *module) -{ - - unsigned int i; - Elf32_Rela *rela = (void *)sechdrs[relsec].sh_addr; - Elf32_Sym *sym; - unsigned long int *location; - unsigned long int locoffs; - unsigned long int value; -#if __GNUC__ < 4 - unsigned long int old_value; -#endif - - pr_debug("Applying add relocation section %u to %u\n", - relsec, sechdrs[relsec].sh_info); - - for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rela); i++) { - - location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr + - rela[i].r_offset; - sym = (Elf32_Sym *)sechdrs[symindex].sh_addr + - ELF32_R_SYM(rela[i].r_info); - value = sym->st_value + rela[i].r_addend; - - switch (ELF32_R_TYPE(rela[i].r_info)) { - - /* - * Be careful! mb-gcc / mb-ld splits the relocs between the - * text and the reloc table. In general this means we must - * read the current contents of (*location), add any offset - * then store the result back in - */ - - case R_MICROBLAZE_32: -#if __GNUC__ < 4 - old_value = *location; - *location = value + old_value; - - pr_debug("R_MICROBLAZE_32 (%08lx->%08lx)\n", - old_value, value); -#else - *location = value; -#endif - break; - - case R_MICROBLAZE_64: -#if __GNUC__ < 4 - /* Split relocs only required/used pre gcc4.1.1 */ - old_value = ((location[0] & 0x0000FFFF) << 16) | - (location[1] & 0x0000FFFF); - value += old_value; -#endif - location[0] = (location[0] & 0xFFFF0000) | - (value >> 16); - location[1] = (location[1] & 0xFFFF0000) | - (value & 0xFFFF); -#if __GNUC__ < 4 - pr_debug("R_MICROBLAZE_64 (%08lx->%08lx)\n", - old_value, value); -#endif - break; - - case R_MICROBLAZE_64_PCREL: - locoffs = (location[0] & 0xFFFF) << 16 | - (location[1] & 0xFFFF); - value -= (unsigned long int)(location) + 4 + - locoffs; - location[0] = (location[0] & 0xFFFF0000) | - (value >> 16); - location[1] = (location[1] & 0xFFFF0000) | - (value & 0xFFFF); - pr_debug("R_MICROBLAZE_64_PCREL (%08lx)\n", - value); - break; - - case R_MICROBLAZE_NONE: - pr_debug("R_MICROBLAZE_NONE\n"); - break; - - default: - printk(KERN_ERR "module %s: " - "Unknown relocation: %u\n", - module->name, - ELF32_R_TYPE(rela->r_info)); - return -ENOEXEC; - } - } - return 0; -} - -int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs, - struct module *module) -{ - return 0; -} - -void module_arch_cleanup(struct module *mod) -{ -} diff --git a/trunk/arch/microblaze/kernel/of_device.c b/trunk/arch/microblaze/kernel/of_device.c deleted file mode 100644 index 9a0f7632c47c..000000000000 --- a/trunk/arch/microblaze/kernel/of_device.c +++ /dev/null @@ -1,113 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -void of_device_make_bus_id(struct of_device *dev) -{ - static atomic_t bus_no_reg_magic; - struct device_node *node = dev->node; - const u32 *reg; - u64 addr; - int magic; - - /* - * For MMIO, get the physical address - */ - reg = of_get_property(node, "reg", NULL); - if (reg) { - addr = of_translate_address(node, reg); - if (addr != OF_BAD_ADDR) { - dev_set_name(&dev->dev, "%llx.%s", - (unsigned long long)addr, node->name); - return; - } - } - - /* - * No BusID, use the node name and add a globally incremented - * counter (and pray...) - */ - magic = atomic_add_return(1, &bus_no_reg_magic); - dev_set_name(&dev->dev, "%s.%d", node->name, magic - 1); -} -EXPORT_SYMBOL(of_device_make_bus_id); - -struct of_device *of_device_alloc(struct device_node *np, - const char *bus_id, - struct device *parent) -{ - struct of_device *dev; - - dev = kzalloc(sizeof(*dev), GFP_KERNEL); - if (!dev) - return NULL; - - dev->node = of_node_get(np); - dev->dev.dma_mask = &dev->dma_mask; - dev->dev.parent = parent; - dev->dev.release = of_release_dev; - dev->dev.archdata.of_node = np; - - if (bus_id) - dev_set_name(&dev->dev, bus_id); - else - of_device_make_bus_id(dev); - - return dev; -} -EXPORT_SYMBOL(of_device_alloc); - -int of_device_uevent(struct device *dev, struct kobj_uevent_env *env) -{ - struct of_device *ofdev; - const char *compat; - int seen = 0, cplen, sl; - - if (!dev) - return -ENODEV; - - ofdev = to_of_device(dev); - - if (add_uevent_var(env, "OF_NAME=%s", ofdev->node->name)) - return -ENOMEM; - - if (add_uevent_var(env, "OF_TYPE=%s", ofdev->node->type)) - return -ENOMEM; - - /* Since the compatible field can contain pretty much anything - * it's not really legal to split it out with commas. We split it - * up using a number of environment variables instead. */ - - compat = of_get_property(ofdev->node, "compatible", &cplen); - while (compat && *compat && cplen > 0) { - if (add_uevent_var(env, "OF_COMPATIBLE_%d=%s", seen, compat)) - return -ENOMEM; - - sl = strlen(compat) + 1; - compat += sl; - cplen -= sl; - seen++; - } - - if (add_uevent_var(env, "OF_COMPATIBLE_N=%d", seen)) - return -ENOMEM; - - /* modalias is trickier, we add it in 2 steps */ - if (add_uevent_var(env, "MODALIAS=")) - return -ENOMEM; - sl = of_device_get_modalias(ofdev, &env->buf[env->buflen-1], - sizeof(env->buf) - env->buflen); - if (sl >= (sizeof(env->buf) - env->buflen)) - return -ENOMEM; - env->buflen += sl; - - return 0; -} -EXPORT_SYMBOL(of_device_uevent); diff --git a/trunk/arch/microblaze/kernel/of_platform.c b/trunk/arch/microblaze/kernel/of_platform.c deleted file mode 100644 index acf4574d0f18..000000000000 --- a/trunk/arch/microblaze/kernel/of_platform.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. - * - * and Arnd Bergmann, IBM Corp. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - * - */ - -#undef DEBUG - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -struct bus_type of_platform_bus_type = { - .uevent = of_device_uevent, -}; -EXPORT_SYMBOL(of_platform_bus_type); - -static int __init of_bus_driver_init(void) -{ - return of_bus_type_init(&of_platform_bus_type, "of_platform"); -} -postcore_initcall(of_bus_driver_init); - -struct of_device *of_platform_device_create(struct device_node *np, - const char *bus_id, - struct device *parent) -{ - struct of_device *dev; - - dev = of_device_alloc(np, bus_id, parent); - if (!dev) - return NULL; - - dev->dma_mask = 0xffffffffUL; - dev->dev.bus = &of_platform_bus_type; - - /* We do not fill the DMA ops for platform devices by default. - * This is currently the responsibility of the platform code - * to do such, possibly using a device notifier - */ - - if (of_device_register(dev) != 0) { - of_device_free(dev); - return NULL; - } - - return dev; -} -EXPORT_SYMBOL(of_platform_device_create); - -/** - * of_platform_bus_create - Create an OF device for a bus node and all its - * children. Optionally recursively instanciate matching busses. - * @bus: device node of the bus to instanciate - * @matches: match table, NULL to use the default, OF_NO_DEEP_PROBE to - * disallow recursive creation of child busses - */ -static int of_platform_bus_create(const struct device_node *bus, - const struct of_device_id *matches, - struct device *parent) -{ - struct device_node *child; - struct of_device *dev; - int rc = 0; - - for_each_child_of_node(bus, child) { - pr_debug(" create child: %s\n", child->full_name); - dev = of_platform_device_create(child, NULL, parent); - if (dev == NULL) - rc = -ENOMEM; - else if (!of_match_node(matches, child)) - continue; - if (rc == 0) { - pr_debug(" and sub busses\n"); - rc = of_platform_bus_create(child, matches, &dev->dev); - } - if (rc) { - of_node_put(child); - break; - } - } - return rc; -} - - -/** - * of_platform_bus_probe - Probe the device-tree for platform busses - * @root: parent of the first level to probe or NULL for the root of the tree - * @matches: match table, NULL to use the default - * @parent: parent to hook devices from, NULL for toplevel - * - * Note that children of the provided root are not instanciated as devices - * unless the specified root itself matches the bus list and is not NULL. - */ - -int of_platform_bus_probe(struct device_node *root, - const struct of_device_id *matches, - struct device *parent) -{ - struct device_node *child; - struct of_device *dev; - int rc = 0; - - if (matches == NULL) - matches = of_default_bus_ids; - if (matches == OF_NO_DEEP_PROBE) - return -EINVAL; - if (root == NULL) - root = of_find_node_by_path("/"); - else - of_node_get(root); - - pr_debug("of_platform_bus_probe()\n"); - pr_debug(" starting at: %s\n", root->full_name); - - /* Do a self check of bus type, if there's a match, create - * children - */ - if (of_match_node(matches, root)) { - pr_debug(" root match, create all sub devices\n"); - dev = of_platform_device_create(root, NULL, parent); - if (dev == NULL) { - rc = -ENOMEM; - goto bail; - } - pr_debug(" create all sub busses\n"); - rc = of_platform_bus_create(root, matches, &dev->dev); - goto bail; - } - for_each_child_of_node(root, child) { - if (!of_match_node(matches, child)) - continue; - - pr_debug(" match: %s\n", child->full_name); - dev = of_platform_device_create(child, NULL, parent); - if (dev == NULL) - rc = -ENOMEM; - else - rc = of_platform_bus_create(child, matches, &dev->dev); - if (rc) { - of_node_put(child); - break; - } - } - bail: - of_node_put(root); - return rc; -} -EXPORT_SYMBOL(of_platform_bus_probe); - -static int of_dev_node_match(struct device *dev, void *data) -{ - return to_of_device(dev)->node == data; -} - -struct of_device *of_find_device_by_node(struct device_node *np) -{ - struct device *dev; - - dev = bus_find_device(&of_platform_bus_type, - NULL, np, of_dev_node_match); - if (dev) - return to_of_device(dev); - return NULL; -} -EXPORT_SYMBOL(of_find_device_by_node); - -static int of_dev_phandle_match(struct device *dev, void *data) -{ - phandle *ph = data; - return to_of_device(dev)->node->linux_phandle == *ph; -} - -struct of_device *of_find_device_by_phandle(phandle ph) -{ - struct device *dev; - - dev = bus_find_device(&of_platform_bus_type, - NULL, &ph, of_dev_phandle_match); - if (dev) - return to_of_device(dev); - return NULL; -} -EXPORT_SYMBOL(of_find_device_by_phandle); diff --git a/trunk/arch/microblaze/kernel/process.c b/trunk/arch/microblaze/kernel/process.c deleted file mode 100644 index 436f26ccbfa9..000000000000 --- a/trunk/arch/microblaze/kernel/process.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include - -void show_regs(struct pt_regs *regs) -{ - printk(KERN_INFO " Registers dump: mode=%X\r\n", regs->kernel_mode); - printk(KERN_INFO " r1=%08lX, r2=%08lX, r3=%08lX, r4=%08lX\n", - regs->r1, regs->r2, regs->r3, regs->r4); - printk(KERN_INFO " r5=%08lX, r6=%08lX, r7=%08lX, r8=%08lX\n", - regs->r5, regs->r6, regs->r7, regs->r8); - printk(KERN_INFO " r9=%08lX, r10=%08lX, r11=%08lX, r12=%08lX\n", - regs->r9, regs->r10, regs->r11, regs->r12); - printk(KERN_INFO " r13=%08lX, r14=%08lX, r15=%08lX, r16=%08lX\n", - regs->r13, regs->r14, regs->r15, regs->r16); - printk(KERN_INFO " r17=%08lX, r18=%08lX, r19=%08lX, r20=%08lX\n", - regs->r17, regs->r18, regs->r19, regs->r20); - printk(KERN_INFO " r21=%08lX, r22=%08lX, r23=%08lX, r24=%08lX\n", - regs->r21, regs->r22, regs->r23, regs->r24); - printk(KERN_INFO " r25=%08lX, r26=%08lX, r27=%08lX, r28=%08lX\n", - regs->r25, regs->r26, regs->r27, regs->r28); - printk(KERN_INFO " r29=%08lX, r30=%08lX, r31=%08lX, rPC=%08lX\n", - regs->r29, regs->r30, regs->r31, regs->pc); - printk(KERN_INFO " msr=%08lX, ear=%08lX, esr=%08lX, fsr=%08lX\n", - regs->msr, regs->ear, regs->esr, regs->fsr); - while (1) - ; -} - -void (*pm_idle)(void); -void (*pm_power_off)(void) = NULL; -EXPORT_SYMBOL(pm_power_off); - -static int hlt_counter = 1; - -void disable_hlt(void) -{ - hlt_counter++; -} -EXPORT_SYMBOL(disable_hlt); - -void enable_hlt(void) -{ - hlt_counter--; -} -EXPORT_SYMBOL(enable_hlt); - -static int __init nohlt_setup(char *__unused) -{ - hlt_counter = 1; - return 1; -} -__setup("nohlt", nohlt_setup); - -static int __init hlt_setup(char *__unused) -{ - hlt_counter = 0; - return 1; -} -__setup("hlt", hlt_setup); - -void default_idle(void) -{ - if (!hlt_counter) { - clear_thread_flag(TIF_POLLING_NRFLAG); - smp_mb__after_clear_bit(); - local_irq_disable(); - while (!need_resched()) - cpu_sleep(); - local_irq_enable(); - set_thread_flag(TIF_POLLING_NRFLAG); - } else - while (!need_resched()) - cpu_relax(); -} - -void cpu_idle(void) -{ - set_thread_flag(TIF_POLLING_NRFLAG); - - /* endless idle loop with no priority at all */ - while (1) { - void (*idle)(void) = pm_idle; - - if (!idle) - idle = default_idle; - - tick_nohz_stop_sched_tick(1); - while (!need_resched()) - idle(); - tick_nohz_restart_sched_tick(); - - preempt_enable_no_resched(); - schedule(); - preempt_disable(); - check_pgt_cache(); - } -} - -void flush_thread(void) -{ -} - -int copy_thread(unsigned long clone_flags, unsigned long usp, - unsigned long unused, - struct task_struct *p, struct pt_regs *regs) -{ - struct pt_regs *childregs = task_pt_regs(p); - struct thread_info *ti = task_thread_info(p); - - *childregs = *regs; - if (user_mode(regs)) - childregs->r1 = usp; - else - childregs->r1 = ((unsigned long) ti) + THREAD_SIZE; - - memset(&ti->cpu_context, 0, sizeof(struct cpu_context)); - ti->cpu_context.r1 = (unsigned long)childregs; - ti->cpu_context.msr = (unsigned long)childregs->msr; - ti->cpu_context.r15 = (unsigned long)ret_from_fork - 8; - - if (clone_flags & CLONE_SETTLS) - ; - - return 0; -} - -/* - * Return saved PC of a blocked thread. - */ -unsigned long thread_saved_pc(struct task_struct *tsk) -{ - struct cpu_context *ctx = - &(((struct thread_info *)(tsk->stack))->cpu_context); - - /* Check whether the thread is blocked in resume() */ - if (in_sched_functions(ctx->r15)) - return (unsigned long)ctx->r15; - else - return ctx->r14; -} - -static void kernel_thread_helper(int (*fn)(void *), void *arg) -{ - fn(arg); - do_exit(-1); -} - -int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) -{ - struct pt_regs regs; - int ret; - - memset(®s, 0, sizeof(regs)); - /* store them in non-volatile registers */ - regs.r5 = (unsigned long)fn; - regs.r6 = (unsigned long)arg; - local_save_flags(regs.msr); - regs.pc = (unsigned long)kernel_thread_helper; - regs.kernel_mode = 1; - - ret = do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, - ®s, 0, NULL, NULL); - - return ret; -} - -unsigned long get_wchan(struct task_struct *p) -{ -/* TBD (used by procfs) */ - return 0; -} diff --git a/trunk/arch/microblaze/kernel/prom.c b/trunk/arch/microblaze/kernel/prom.c deleted file mode 100644 index 34c48718061a..000000000000 --- a/trunk/arch/microblaze/kernel/prom.c +++ /dev/null @@ -1,1146 +0,0 @@ -/* - * Procedures for creating, accessing and interpreting the device tree. - * - * Paul Mackerras August 1996. - * Copyright (C) 1996-2005 Paul Mackerras. - * - * Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner. - * {engebret|bergner}@us.ibm.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the 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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static int __initdata dt_root_addr_cells; -static int __initdata dt_root_size_cells; - -typedef u32 cell_t; - -static struct boot_param_header *initial_boot_params; - -/* export that to outside world */ -struct device_node *of_chosen; - -static inline char *find_flat_dt_string(u32 offset) -{ - return ((char *)initial_boot_params) + - initial_boot_params->off_dt_strings + offset; -} - -/** - * This function is used to scan the flattened device-tree, it is - * used to extract the memory informations at boot before we can - * unflatten the tree - */ -int __init of_scan_flat_dt(int (*it)(unsigned long node, - const char *uname, int depth, - void *data), - void *data) -{ - unsigned long p = ((unsigned long)initial_boot_params) + - initial_boot_params->off_dt_struct; - int rc = 0; - int depth = -1; - - do { - u32 tag = *((u32 *)p); - char *pathp; - - p += 4; - if (tag == OF_DT_END_NODE) { - depth--; - continue; - } - if (tag == OF_DT_NOP) - continue; - if (tag == OF_DT_END) - break; - if (tag == OF_DT_PROP) { - u32 sz = *((u32 *)p); - p += 8; - if (initial_boot_params->version < 0x10) - p = _ALIGN(p, sz >= 8 ? 8 : 4); - p += sz; - p = _ALIGN(p, 4); - continue; - } - if (tag != OF_DT_BEGIN_NODE) { - printk(KERN_WARNING "Invalid tag %x scanning flattened" - " device tree !\n", tag); - return -EINVAL; - } - depth++; - pathp = (char *)p; - p = _ALIGN(p + strlen(pathp) + 1, 4); - if ((*pathp) == '/') { - char *lp, *np; - for (lp = NULL, np = pathp; *np; np++) - if ((*np) == '/') - lp = np+1; - if (lp != NULL) - pathp = lp; - } - rc = it(p, pathp, depth, data); - if (rc != 0) - break; - } while (1); - - return rc; -} - -unsigned long __init of_get_flat_dt_root(void) -{ - unsigned long p = ((unsigned long)initial_boot_params) + - initial_boot_params->off_dt_struct; - - while (*((u32 *)p) == OF_DT_NOP) - p += 4; - BUG_ON(*((u32 *)p) != OF_DT_BEGIN_NODE); - p += 4; - return _ALIGN(p + strlen((char *)p) + 1, 4); -} - -/** - * This function can be used within scan_flattened_dt callback to get - * access to properties - */ -void *__init of_get_flat_dt_prop(unsigned long node, const char *name, - unsigned long *size) -{ - unsigned long p = node; - - do { - u32 tag = *((u32 *)p); - u32 sz, noff; - const char *nstr; - - p += 4; - if (tag == OF_DT_NOP) - continue; - if (tag != OF_DT_PROP) - return NULL; - - sz = *((u32 *)p); - noff = *((u32 *)(p + 4)); - p += 8; - if (initial_boot_params->version < 0x10) - p = _ALIGN(p, sz >= 8 ? 8 : 4); - - nstr = find_flat_dt_string(noff); - if (nstr == NULL) { - printk(KERN_WARNING "Can't find property index" - " name !\n"); - return NULL; - } - if (strcmp(name, nstr) == 0) { - if (size) - *size = sz; - return (void *)p; - } - p += sz; - p = _ALIGN(p, 4); - } while (1); -} - -int __init of_flat_dt_is_compatible(unsigned long node, const char *compat) -{ - const char *cp; - unsigned long cplen, l; - - cp = of_get_flat_dt_prop(node, "compatible", &cplen); - if (cp == NULL) - return 0; - while (cplen > 0) { - if (strncasecmp(cp, compat, strlen(compat)) == 0) - return 1; - l = strlen(cp) + 1; - cp += l; - cplen -= l; - } - - return 0; -} - -static void *__init unflatten_dt_alloc(unsigned long *mem, unsigned long size, - unsigned long align) -{ - void *res; - - *mem = _ALIGN(*mem, align); - res = (void *)*mem; - *mem += size; - - return res; -} - -static unsigned long __init unflatten_dt_node(unsigned long mem, - unsigned long *p, - struct device_node *dad, - struct device_node ***allnextpp, - unsigned long fpsize) -{ - struct device_node *np; - struct property *pp, **prev_pp = NULL; - char *pathp; - u32 tag; - unsigned int l, allocl; - int has_name = 0; - int new_format = 0; - - tag = *((u32 *)(*p)); - if (tag != OF_DT_BEGIN_NODE) { - printk("Weird tag at start of node: %x\n", tag); - return mem; - } - *p += 4; - pathp = (char *)*p; - l = allocl = strlen(pathp) + 1; - *p = _ALIGN(*p + l, 4); - - /* version 0x10 has a more compact unit name here instead of the full - * path. we accumulate the full path size using "fpsize", we'll rebuild - * it later. We detect this because the first character of the name is - * not '/'. - */ - if ((*pathp) != '/') { - new_format = 1; - if (fpsize == 0) { - /* root node: special case. fpsize accounts for path - * plus terminating zero. root node only has '/', so - * fpsize should be 2, but we want to avoid the first - * level nodes to have two '/' so we use fpsize 1 here - */ - fpsize = 1; - allocl = 2; - } else { - /* account for '/' and path size minus terminal 0 - * already in 'l' - */ - fpsize += l; - allocl = fpsize; - } - } - - np = unflatten_dt_alloc(&mem, sizeof(struct device_node) + allocl, - __alignof__(struct device_node)); - if (allnextpp) { - memset(np, 0, sizeof(*np)); - np->full_name = ((char *)np) + sizeof(struct device_node); - if (new_format) { - char *p2 = np->full_name; - /* rebuild full path for new format */ - if (dad && dad->parent) { - strcpy(p2, dad->full_name); -#ifdef DEBUG - if ((strlen(p2) + l + 1) != allocl) { - pr_debug("%s: p: %d, l: %d, a: %d\n", - pathp, (int)strlen(p2), - l, allocl); - } -#endif - p2 += strlen(p2); - } - *(p2++) = '/'; - memcpy(p2, pathp, l); - } else - memcpy(np->full_name, pathp, l); - prev_pp = &np->properties; - **allnextpp = np; - *allnextpp = &np->allnext; - if (dad != NULL) { - np->parent = dad; - /* we temporarily use the next field as `last_child'*/ - if (dad->next == NULL) - dad->child = np; - else - dad->next->sibling = np; - dad->next = np; - } - kref_init(&np->kref); - } - while (1) { - u32 sz, noff; - char *pname; - - tag = *((u32 *)(*p)); - if (tag == OF_DT_NOP) { - *p += 4; - continue; - } - if (tag != OF_DT_PROP) - break; - *p += 4; - sz = *((u32 *)(*p)); - noff = *((u32 *)((*p) + 4)); - *p += 8; - if (initial_boot_params->version < 0x10) - *p = _ALIGN(*p, sz >= 8 ? 8 : 4); - - pname = find_flat_dt_string(noff); - if (pname == NULL) { - printk(KERN_INFO - "Can't find property name in list !\n"); - break; - } - if (strcmp(pname, "name") == 0) - has_name = 1; - l = strlen(pname) + 1; - pp = unflatten_dt_alloc(&mem, sizeof(struct property), - __alignof__(struct property)); - if (allnextpp) { - if (strcmp(pname, "linux,phandle") == 0) { - np->node = *((u32 *)*p); - if (np->linux_phandle == 0) - np->linux_phandle = np->node; - } - if (strcmp(pname, "ibm,phandle") == 0) - np->linux_phandle = *((u32 *)*p); - pp->name = pname; - pp->length = sz; - pp->value = (void *)*p; - *prev_pp = pp; - prev_pp = &pp->next; - } - *p = _ALIGN((*p) + sz, 4); - } - /* with version 0x10 we may not have the name property, recreate - * it here from the unit name if absent - */ - if (!has_name) { - char *p1 = pathp, *ps = pathp, *pa = NULL; - int sz; - - while (*p1) { - if ((*p1) == '@') - pa = p1; - if ((*p1) == '/') - ps = p1 + 1; - p1++; - } - if (pa < ps) - pa = p1; - sz = (pa - ps) + 1; - pp = unflatten_dt_alloc(&mem, sizeof(struct property) + sz, - __alignof__(struct property)); - if (allnextpp) { - pp->name = "name"; - pp->length = sz; - pp->value = pp + 1; - *prev_pp = pp; - prev_pp = &pp->next; - memcpy(pp->value, ps, sz - 1); - ((char *)pp->value)[sz - 1] = 0; - pr_debug("fixed up name for %s -> %s\n", pathp, - (char *)pp->value); - } - } - if (allnextpp) { - *prev_pp = NULL; - np->name = of_get_property(np, "name", NULL); - np->type = of_get_property(np, "device_type", NULL); - - if (!np->name) - np->name = ""; - if (!np->type) - np->type = ""; - } - while (tag == OF_DT_BEGIN_NODE) { - mem = unflatten_dt_node(mem, p, np, allnextpp, fpsize); - tag = *((u32 *)(*p)); - } - if (tag != OF_DT_END_NODE) { - printk(KERN_INFO "Weird tag at end of node: %x\n", tag); - return mem; - } - *p += 4; - return mem; -} - -/** - * unflattens the device-tree passed by the firmware, creating the - * tree of struct device_node. It also fills the "name" and "type" - * pointers of the nodes so the normal device-tree walking functions - * can be used (this used to be done by finish_device_tree) - */ -void __init unflatten_device_tree(void) -{ - unsigned long start, mem, size; - struct device_node **allnextp = &allnodes; - - pr_debug(" -> unflatten_device_tree()\n"); - - /* First pass, scan for size */ - start = ((unsigned long)initial_boot_params) + - initial_boot_params->off_dt_struct; - size = unflatten_dt_node(0, &start, NULL, NULL, 0); - size = (size | 3) + 1; - - pr_debug(" size is %lx, allocating...\n", size); - - /* Allocate memory for the expanded device tree */ - mem = lmb_alloc(size + 4, __alignof__(struct device_node)); - mem = (unsigned long) __va(mem); - - ((u32 *)mem)[size / 4] = 0xdeadbeef; - - pr_debug(" unflattening %lx...\n", mem); - - /* Second pass, do actual unflattening */ - start = ((unsigned long)initial_boot_params) + - initial_boot_params->off_dt_struct; - unflatten_dt_node(mem, &start, NULL, &allnextp, 0); - if (*((u32 *)start) != OF_DT_END) - printk(KERN_WARNING "Weird tag at end of tree: %08x\n", - *((u32 *)start)); - if (((u32 *)mem)[size / 4] != 0xdeadbeef) - printk(KERN_WARNING "End of tree marker overwritten: %08x\n", - ((u32 *)mem)[size / 4]); - *allnextp = NULL; - - /* Get pointer to OF "/chosen" node for use everywhere */ - of_chosen = of_find_node_by_path("/chosen"); - if (of_chosen == NULL) - of_chosen = of_find_node_by_path("/chosen@0"); - - pr_debug(" <- unflatten_device_tree()\n"); -} - -#define early_init_dt_scan_drconf_memory(node) 0 - -static int __init early_init_dt_scan_cpus(unsigned long node, - const char *uname, int depth, - void *data) -{ - static int logical_cpuid; - char *type = of_get_flat_dt_prop(node, "device_type", NULL); - const u32 *intserv; - int i, nthreads; - int found = 0; - - /* We are scanning "cpu" nodes only */ - if (type == NULL || strcmp(type, "cpu") != 0) - return 0; - - /* Get physical cpuid */ - intserv = of_get_flat_dt_prop(node, "reg", NULL); - nthreads = 1; - - /* - * Now see if any of these threads match our boot cpu. - * NOTE: This must match the parsing done in smp_setup_cpu_maps. - */ - for (i = 0; i < nthreads; i++) { - /* - * version 2 of the kexec param format adds the phys cpuid of - * booted proc. - */ - if (initial_boot_params && initial_boot_params->version >= 2) { - if (intserv[i] == - initial_boot_params->boot_cpuid_phys) { - found = 1; - break; - } - } else { - /* - * Check if it's the boot-cpu, set it's hw index now, - * unfortunately this format did not support booting - * off secondary threads. - */ - if (of_get_flat_dt_prop(node, - "linux,boot-cpu", NULL) != NULL) { - found = 1; - break; - } - } - -#ifdef CONFIG_SMP - /* logical cpu id is always 0 on UP kernels */ - logical_cpuid++; -#endif - } - - if (found) { - pr_debug("boot cpu: logical %d physical %d\n", logical_cpuid, - intserv[i]); - boot_cpuid = logical_cpuid; - } - - return 0; -} - -#ifdef CONFIG_BLK_DEV_INITRD -static void __init early_init_dt_check_for_initrd(unsigned long node) -{ - unsigned long l; - u32 *prop; - - pr_debug("Looking for initrd properties... "); - - prop = of_get_flat_dt_prop(node, "linux,initrd-start", &l); - if (prop) { - initrd_start = (unsigned long)__va(of_read_ulong(prop, l/4)); - - prop = of_get_flat_dt_prop(node, "linux,initrd-end", &l); - if (prop) { - initrd_end = (unsigned long) - __va(of_read_ulong(prop, l/4)); - initrd_below_start_ok = 1; - } else { - initrd_start = 0; - } - } - - pr_debug("initrd_start=0x%lx initrd_end=0x%lx\n", - initrd_start, initrd_end); -} -#else -static inline void early_init_dt_check_for_initrd(unsigned long node) -{ -} -#endif /* CONFIG_BLK_DEV_INITRD */ - -static int __init early_init_dt_scan_chosen(unsigned long node, - const char *uname, int depth, void *data) -{ - unsigned long l; - char *p; - - pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); - - if (depth != 1 || - (strcmp(uname, "chosen") != 0 && - strcmp(uname, "chosen@0") != 0)) - return 0; - -#ifdef CONFIG_KEXEC - lprop = (u64 *)of_get_flat_dt_prop(node, - "linux,crashkernel-base", NULL); - if (lprop) - crashk_res.start = *lprop; - - lprop = (u64 *)of_get_flat_dt_prop(node, - "linux,crashkernel-size", NULL); - if (lprop) - crashk_res.end = crashk_res.start + *lprop - 1; -#endif - - early_init_dt_check_for_initrd(node); - - /* Retreive command line */ - p = of_get_flat_dt_prop(node, "bootargs", &l); - if (p != NULL && l > 0) - strlcpy(cmd_line, p, min((int)l, COMMAND_LINE_SIZE)); - -#ifdef CONFIG_CMDLINE - if (p == NULL || l == 0 || (l == 1 && (*p) == 0)) - strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); -#endif /* CONFIG_CMDLINE */ - - pr_debug("Command line is: %s\n", cmd_line); - - /* break now */ - return 1; -} - -static int __init early_init_dt_scan_root(unsigned long node, - const char *uname, int depth, void *data) -{ - u32 *prop; - - if (depth != 0) - return 0; - - prop = of_get_flat_dt_prop(node, "#size-cells", NULL); - dt_root_size_cells = (prop == NULL) ? 1 : *prop; - pr_debug("dt_root_size_cells = %x\n", dt_root_size_cells); - - prop = of_get_flat_dt_prop(node, "#address-cells", NULL); - dt_root_addr_cells = (prop == NULL) ? 2 : *prop; - pr_debug("dt_root_addr_cells = %x\n", dt_root_addr_cells); - - /* break now */ - return 1; -} - -static u64 __init dt_mem_next_cell(int s, cell_t **cellp) -{ - cell_t *p = *cellp; - - *cellp = p + s; - return of_read_number(p, s); -} - -static int __init early_init_dt_scan_memory(unsigned long node, - const char *uname, int depth, void *data) -{ - char *type = of_get_flat_dt_prop(node, "device_type", NULL); - cell_t *reg, *endp; - unsigned long l; - - /* Look for the ibm,dynamic-reconfiguration-memory node */ -/* if (depth == 1 && - strcmp(uname, "ibm,dynamic-reconfiguration-memory") == 0) - return early_init_dt_scan_drconf_memory(node); -*/ - /* We are scanning "memory" nodes only */ - if (type == NULL) { - /* - * The longtrail doesn't have a device_type on the - * /memory node, so look for the node called /memory@0. - */ - if (depth != 1 || strcmp(uname, "memory@0") != 0) - return 0; - } else if (strcmp(type, "memory") != 0) - return 0; - - reg = (cell_t *)of_get_flat_dt_prop(node, "linux,usable-memory", &l); - if (reg == NULL) - reg = (cell_t *)of_get_flat_dt_prop(node, "reg", &l); - if (reg == NULL) - return 0; - - endp = reg + (l / sizeof(cell_t)); - - pr_debug("memory scan node %s, reg size %ld, data: %x %x %x %x,\n", - uname, l, reg[0], reg[1], reg[2], reg[3]); - - while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) { - u64 base, size; - - base = dt_mem_next_cell(dt_root_addr_cells, ®); - size = dt_mem_next_cell(dt_root_size_cells, ®); - - if (size == 0) - continue; - pr_debug(" - %llx , %llx\n", (unsigned long long)base, - (unsigned long long)size); - - lmb_add(base, size); - } - return 0; -} - -#ifdef CONFIG_PHYP_DUMP -/** - * phyp_dump_calculate_reserve_size() - reserve variable boot area 5% or arg - * - * Function to find the largest size we need to reserve - * during early boot process. - * - * It either looks for boot param and returns that OR - * returns larger of 256 or 5% rounded down to multiples of 256MB. - * - */ -static inline unsigned long phyp_dump_calculate_reserve_size(void) -{ - unsigned long tmp; - - if (phyp_dump_info->reserve_bootvar) - return phyp_dump_info->reserve_bootvar; - - /* divide by 20 to get 5% of value */ - tmp = lmb_end_of_DRAM(); - do_div(tmp, 20); - - /* round it down in multiples of 256 */ - tmp = tmp & ~0x0FFFFFFFUL; - - return (tmp > PHYP_DUMP_RMR_END ? tmp : PHYP_DUMP_RMR_END); -} - -/** - * phyp_dump_reserve_mem() - reserve all not-yet-dumped mmemory - * - * This routine may reserve memory regions in the kernel only - * if the system is supported and a dump was taken in last - * boot instance or if the hardware is supported and the - * scratch area needs to be setup. In other instances it returns - * without reserving anything. The memory in case of dump being - * active is freed when the dump is collected (by userland tools). - */ -static void __init phyp_dump_reserve_mem(void) -{ - unsigned long base, size; - unsigned long variable_reserve_size; - - if (!phyp_dump_info->phyp_dump_configured) { - printk(KERN_ERR "Phyp-dump not supported on this hardware\n"); - return; - } - - if (!phyp_dump_info->phyp_dump_at_boot) { - printk(KERN_INFO "Phyp-dump disabled at boot time\n"); - return; - } - - variable_reserve_size = phyp_dump_calculate_reserve_size(); - - if (phyp_dump_info->phyp_dump_is_active) { - /* Reserve *everything* above RMR.Area freed by userland tools*/ - base = variable_reserve_size; - size = lmb_end_of_DRAM() - base; - - /* XXX crashed_ram_end is wrong, since it may be beyond - * the memory_limit, it will need to be adjusted. */ - lmb_reserve(base, size); - - phyp_dump_info->init_reserve_start = base; - phyp_dump_info->init_reserve_size = size; - } else { - size = phyp_dump_info->cpu_state_size + - phyp_dump_info->hpte_region_size + - variable_reserve_size; - base = lmb_end_of_DRAM() - size; - lmb_reserve(base, size); - phyp_dump_info->init_reserve_start = base; - phyp_dump_info->init_reserve_size = size; - } -} -#else -static inline void __init phyp_dump_reserve_mem(void) {} -#endif /* CONFIG_PHYP_DUMP && CONFIG_PPC_RTAS */ - -#ifdef CONFIG_EARLY_PRINTK -/* MS this is Microblaze specifig function */ -static int __init early_init_dt_scan_serial(unsigned long node, - const char *uname, int depth, void *data) -{ - unsigned long l; - char *p; - int *addr; - - pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); - -/* find all serial nodes */ - if (strncmp(uname, "serial", 6) != 0) - return 0; - - early_init_dt_check_for_initrd(node); - -/* find compatible node with uartlite */ - p = of_get_flat_dt_prop(node, "compatible", &l); - if ((strncmp(p, "xlnx,xps-uartlite", 17) != 0) && - (strncmp(p, "xlnx,opb-uartlite", 17) != 0)) - return 0; - - addr = of_get_flat_dt_prop(node, "reg", &l); - return *addr; /* return address */ -} - -/* this function is looking for early uartlite console - Microblaze specific */ -int __init early_uartlite_console(void) -{ - return of_scan_flat_dt(early_init_dt_scan_serial, NULL); -} -#endif - -void __init early_init_devtree(void *params) -{ - pr_debug(" -> early_init_devtree(%p)\n", params); - - /* Setup flat device-tree pointer */ - initial_boot_params = params; - -#ifdef CONFIG_PHYP_DUMP - /* scan tree to see if dump occured during last boot */ - of_scan_flat_dt(early_init_dt_scan_phyp_dump, NULL); -#endif - - /* Retrieve various informations from the /chosen node of the - * device-tree, including the platform type, initrd location and - * size, TCE reserve, and more ... - */ - of_scan_flat_dt(early_init_dt_scan_chosen, NULL); - - /* Scan memory nodes and rebuild LMBs */ - lmb_init(); - of_scan_flat_dt(early_init_dt_scan_root, NULL); - of_scan_flat_dt(early_init_dt_scan_memory, NULL); - - /* Save command line for /proc/cmdline and then parse parameters */ - strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE); - parse_early_param(); - - lmb_analyze(); - - pr_debug("Phys. mem: %lx\n", (unsigned long) lmb_phys_mem_size()); - - pr_debug("Scanning CPUs ...\n"); - - /* Retreive CPU related informations from the flat tree - * (altivec support, boot CPU ID, ...) - */ - of_scan_flat_dt(early_init_dt_scan_cpus, NULL); - - pr_debug(" <- early_init_devtree()\n"); -} - -/** - * Indicates whether the root node has a given value in its - * compatible property. - */ -int machine_is_compatible(const char *compat) -{ - struct device_node *root; - int rc = 0; - - root = of_find_node_by_path("/"); - if (root) { - rc = of_device_is_compatible(root, compat); - of_node_put(root); - } - return rc; -} -EXPORT_SYMBOL(machine_is_compatible); - -/******* - * - * New implementation of the OF "find" APIs, return a refcounted - * object, call of_node_put() when done. The device tree and list - * are protected by a rw_lock. - * - * Note that property management will need some locking as well, - * this isn't dealt with yet. - * - *******/ - -/** - * of_find_node_by_phandle - Find a node given a phandle - * @handle: phandle of the node to find - * - * Returns a node pointer with refcount incremented, use - * of_node_put() on it when done. - */ -struct device_node *of_find_node_by_phandle(phandle handle) -{ - struct device_node *np; - - read_lock(&devtree_lock); - for (np = allnodes; np != NULL; np = np->allnext) - if (np->linux_phandle == handle) - break; - of_node_get(np); - read_unlock(&devtree_lock); - return np; -} -EXPORT_SYMBOL(of_find_node_by_phandle); - -/** - * of_find_all_nodes - Get next node in global list - * @prev: Previous node or NULL to start iteration - * of_node_put() will be called on it - * - * Returns a node pointer with refcount incremented, use - * of_node_put() on it when done. - */ -struct device_node *of_find_all_nodes(struct device_node *prev) -{ - struct device_node *np; - - read_lock(&devtree_lock); - np = prev ? prev->allnext : allnodes; - for (; np != NULL; np = np->allnext) - if (of_node_get(np)) - break; - of_node_put(prev); - read_unlock(&devtree_lock); - return np; -} -EXPORT_SYMBOL(of_find_all_nodes); - -/** - * of_node_get - Increment refcount of a node - * @node: Node to inc refcount, NULL is supported to - * simplify writing of callers - * - * Returns node. - */ -struct device_node *of_node_get(struct device_node *node) -{ - if (node) - kref_get(&node->kref); - return node; -} -EXPORT_SYMBOL(of_node_get); - -static inline struct device_node *kref_to_device_node(struct kref *kref) -{ - return container_of(kref, struct device_node, kref); -} - -/** - * of_node_release - release a dynamically allocated node - * @kref: kref element of the node to be released - * - * In of_node_put() this function is passed to kref_put() - * as the destructor. - */ -static void of_node_release(struct kref *kref) -{ - struct device_node *node = kref_to_device_node(kref); - struct property *prop = node->properties; - - /* We should never be releasing nodes that haven't been detached. */ - if (!of_node_check_flag(node, OF_DETACHED)) { - printk(KERN_INFO "WARNING: Bad of_node_put() on %s\n", - node->full_name); - dump_stack(); - kref_init(&node->kref); - return; - } - - if (!of_node_check_flag(node, OF_DYNAMIC)) - return; - - while (prop) { - struct property *next = prop->next; - kfree(prop->name); - kfree(prop->value); - kfree(prop); - prop = next; - - if (!prop) { - prop = node->deadprops; - node->deadprops = NULL; - } - } - kfree(node->full_name); - kfree(node->data); - kfree(node); -} - -/** - * of_node_put - Decrement refcount of a node - * @node: Node to dec refcount, NULL is supported to - * simplify writing of callers - * - */ -void of_node_put(struct device_node *node) -{ - if (node) - kref_put(&node->kref, of_node_release); -} -EXPORT_SYMBOL(of_node_put); - -/* - * Plug a device node into the tree and global list. - */ -void of_attach_node(struct device_node *np) -{ - unsigned long flags; - - write_lock_irqsave(&devtree_lock, flags); - np->sibling = np->parent->child; - np->allnext = allnodes; - np->parent->child = np; - allnodes = np; - write_unlock_irqrestore(&devtree_lock, flags); -} - -/* - * "Unplug" a node from the device tree. The caller must hold - * a reference to the node. The memory associated with the node - * is not freed until its refcount goes to zero. - */ -void of_detach_node(struct device_node *np) -{ - struct device_node *parent; - unsigned long flags; - - write_lock_irqsave(&devtree_lock, flags); - - parent = np->parent; - if (!parent) - goto out_unlock; - - if (allnodes == np) - allnodes = np->allnext; - else { - struct device_node *prev; - for (prev = allnodes; - prev->allnext != np; - prev = prev->allnext) - ; - prev->allnext = np->allnext; - } - - if (parent->child == np) - parent->child = np->sibling; - else { - struct device_node *prevsib; - for (prevsib = np->parent->child; - prevsib->sibling != np; - prevsib = prevsib->sibling) - ; - prevsib->sibling = np->sibling; - } - - of_node_set_flag(np, OF_DETACHED); - -out_unlock: - write_unlock_irqrestore(&devtree_lock, flags); -} - -/* - * Add a property to a node - */ -int prom_add_property(struct device_node *np, struct property *prop) -{ - struct property **next; - unsigned long flags; - - prop->next = NULL; - write_lock_irqsave(&devtree_lock, flags); - next = &np->properties; - while (*next) { - if (strcmp(prop->name, (*next)->name) == 0) { - /* duplicate ! don't insert it */ - write_unlock_irqrestore(&devtree_lock, flags); - return -1; - } - next = &(*next)->next; - } - *next = prop; - write_unlock_irqrestore(&devtree_lock, flags); - -#ifdef CONFIG_PROC_DEVICETREE - /* try to add to proc as well if it was initialized */ - if (np->pde) - proc_device_tree_add_prop(np->pde, prop); -#endif /* CONFIG_PROC_DEVICETREE */ - - return 0; -} - -/* - * Remove a property from a node. Note that we don't actually - * remove it, since we have given out who-knows-how-many pointers - * to the data using get-property. Instead we just move the property - * to the "dead properties" list, so it won't be found any more. - */ -int prom_remove_property(struct device_node *np, struct property *prop) -{ - struct property **next; - unsigned long flags; - int found = 0; - - write_lock_irqsave(&devtree_lock, flags); - next = &np->properties; - while (*next) { - if (*next == prop) { - /* found the node */ - *next = prop->next; - prop->next = np->deadprops; - np->deadprops = prop; - found = 1; - break; - } - next = &(*next)->next; - } - write_unlock_irqrestore(&devtree_lock, flags); - - if (!found) - return -ENODEV; - -#ifdef CONFIG_PROC_DEVICETREE - /* try to remove the proc node as well */ - if (np->pde) - proc_device_tree_remove_prop(np->pde, prop); -#endif /* CONFIG_PROC_DEVICETREE */ - - return 0; -} - -/* - * Update a property in a node. Note that we don't actually - * remove it, since we have given out who-knows-how-many pointers - * to the data using get-property. Instead we just move the property - * to the "dead properties" list, and add the new property to the - * property list - */ -int prom_update_property(struct device_node *np, - struct property *newprop, - struct property *oldprop) -{ - struct property **next; - unsigned long flags; - int found = 0; - - write_lock_irqsave(&devtree_lock, flags); - next = &np->properties; - while (*next) { - if (*next == oldprop) { - /* found the node */ - newprop->next = oldprop->next; - *next = newprop; - oldprop->next = np->deadprops; - np->deadprops = oldprop; - found = 1; - break; - } - next = &(*next)->next; - } - write_unlock_irqrestore(&devtree_lock, flags); - - if (!found) - return -ENODEV; - -#ifdef CONFIG_PROC_DEVICETREE - /* try to add to proc as well if it was initialized */ - if (np->pde) - proc_device_tree_update_prop(np->pde, newprop, oldprop); -#endif /* CONFIG_PROC_DEVICETREE */ - - return 0; -} - -#if defined(CONFIG_DEBUG_FS) && defined(DEBUG) -static struct debugfs_blob_wrapper flat_dt_blob; - -static int __init export_flat_device_tree(void) -{ - struct dentry *d; - - flat_dt_blob.data = initial_boot_params; - flat_dt_blob.size = initial_boot_params->totalsize; - - d = debugfs_create_blob("flat-device-tree", S_IFREG | S_IRUSR, - of_debugfs_root, &flat_dt_blob); - if (!d) - return 1; - - return 0; -} -device_initcall(export_flat_device_tree); -#endif diff --git a/trunk/arch/microblaze/kernel/prom_parse.c b/trunk/arch/microblaze/kernel/prom_parse.c deleted file mode 100644 index ae0352ecd5a9..000000000000 --- a/trunk/arch/microblaze/kernel/prom_parse.c +++ /dev/null @@ -1,1025 +0,0 @@ -#undef DEBUG - -#include -#include -#include -#include -#include -#include -#include -#include - -#define PRu64 "%llx" - -/* Max address size we deal with */ -#define OF_MAX_ADDR_CELLS 4 -#define OF_CHECK_COUNTS(na, ns) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS && \ - (ns) > 0) - -static struct of_bus *of_match_bus(struct device_node *np); -static int __of_address_to_resource(struct device_node *dev, - const u32 *addrp, u64 size, unsigned int flags, - struct resource *r); - -/* Debug utility */ -#ifdef DEBUG -static void of_dump_addr(const char *s, const u32 *addr, int na) -{ - printk(KERN_INFO "%s", s); - while (na--) - printk(KERN_INFO " %08x", *(addr++)); - printk(KERN_INFO "\n"); -} -#else -static void of_dump_addr(const char *s, const u32 *addr, int na) { } -#endif - -/* Callbacks for bus specific translators */ -struct of_bus { - const char *name; - const char *addresses; - int (*match)(struct device_node *parent); - void (*count_cells)(struct device_node *child, - int *addrc, int *sizec); - u64 (*map)(u32 *addr, const u32 *range, - int na, int ns, int pna); - int (*translate)(u32 *addr, u64 offset, int na); - unsigned int (*get_flags)(const u32 *addr); -}; - -/* - * Default translator (generic bus) - */ - -static void of_bus_default_count_cells(struct device_node *dev, - int *addrc, int *sizec) -{ - if (addrc) - *addrc = of_n_addr_cells(dev); - if (sizec) - *sizec = of_n_size_cells(dev); -} - -static u64 of_bus_default_map(u32 *addr, const u32 *range, - int na, int ns, int pna) -{ - u64 cp, s, da; - - cp = of_read_number(range, na); - s = of_read_number(range + na + pna, ns); - da = of_read_number(addr, na); - - pr_debug("OF: default map, cp="PRu64", s="PRu64", da="PRu64"\n", - cp, s, da); - - if (da < cp || da >= (cp + s)) - return OF_BAD_ADDR; - return da - cp; -} - -static int of_bus_default_translate(u32 *addr, u64 offset, int na) -{ - u64 a = of_read_number(addr, na); - memset(addr, 0, na * 4); - a += offset; - if (na > 1) - addr[na - 2] = a >> 32; - addr[na - 1] = a & 0xffffffffu; - - return 0; -} - -static unsigned int of_bus_default_get_flags(const u32 *addr) -{ - return IORESOURCE_MEM; -} - -#ifdef CONFIG_PCI -/* - * PCI bus specific translator - */ - -static int of_bus_pci_match(struct device_node *np) -{ - /* "vci" is for the /chaos bridge on 1st-gen PCI powermacs */ - return !strcmp(np->type, "pci") || !strcmp(np->type, "vci"); -} - -static void of_bus_pci_count_cells(struct device_node *np, - int *addrc, int *sizec) -{ - if (addrc) - *addrc = 3; - if (sizec) - *sizec = 2; -} - -static u64 of_bus_pci_map(u32 *addr, const u32 *range, int na, int ns, int pna) -{ - u64 cp, s, da; - - /* Check address type match */ - if ((addr[0] ^ range[0]) & 0x03000000) - return OF_BAD_ADDR; - - /* Read address values, skipping high cell */ - cp = of_read_number(range + 1, na - 1); - s = of_read_number(range + na + pna, ns); - da = of_read_number(addr + 1, na - 1); - - pr_debug("OF: PCI map, cp="PRu64", s="PRu64", da="PRu64"\n", cp, s, da); - - if (da < cp || da >= (cp + s)) - return OF_BAD_ADDR; - return da - cp; -} - -static int of_bus_pci_translate(u32 *addr, u64 offset, int na) -{ - return of_bus_default_translate(addr + 1, offset, na - 1); -} - -static unsigned int of_bus_pci_get_flags(const u32 *addr) -{ - unsigned int flags = 0; - u32 w = addr[0]; - - switch ((w >> 24) & 0x03) { - case 0x01: - flags |= IORESOURCE_IO; - break; - case 0x02: /* 32 bits */ - case 0x03: /* 64 bits */ - flags |= IORESOURCE_MEM; - break; - } - if (w & 0x40000000) - flags |= IORESOURCE_PREFETCH; - return flags; -} - -const u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size, - unsigned int *flags) -{ - const u32 *prop; - unsigned int psize; - struct device_node *parent; - struct of_bus *bus; - int onesize, i, na, ns; - - /* Get parent & match bus type */ - parent = of_get_parent(dev); - if (parent == NULL) - return NULL; - bus = of_match_bus(parent); - if (strcmp(bus->name, "pci")) { - of_node_put(parent); - return NULL; - } - bus->count_cells(dev, &na, &ns); - of_node_put(parent); - if (!OF_CHECK_COUNTS(na, ns)) - return NULL; - - /* Get "reg" or "assigned-addresses" property */ - prop = of_get_property(dev, bus->addresses, &psize); - if (prop == NULL) - return NULL; - psize /= 4; - - onesize = na + ns; - for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++) - if ((prop[0] & 0xff) == ((bar_no * 4) + PCI_BASE_ADDRESS_0)) { - if (size) - *size = of_read_number(prop + na, ns); - if (flags) - *flags = bus->get_flags(prop); - return prop; - } - return NULL; -} -EXPORT_SYMBOL(of_get_pci_address); - -int of_pci_address_to_resource(struct device_node *dev, int bar, - struct resource *r) -{ - const u32 *addrp; - u64 size; - unsigned int flags; - - addrp = of_get_pci_address(dev, bar, &size, &flags); - if (addrp == NULL) - return -EINVAL; - return __of_address_to_resource(dev, addrp, size, flags, r); -} -EXPORT_SYMBOL_GPL(of_pci_address_to_resource); - -static u8 of_irq_pci_swizzle(u8 slot, u8 pin) -{ - return (((pin - 1) + slot) % 4) + 1; -} - -int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq) -{ - struct device_node *dn, *ppnode; - struct pci_dev *ppdev; - u32 lspec; - u32 laddr[3]; - u8 pin; - int rc; - - /* Check if we have a device node, if yes, fallback to standard OF - * parsing - */ - dn = pci_device_to_OF_node(pdev); - if (dn) - return of_irq_map_one(dn, 0, out_irq); - - /* Ok, we don't, time to have fun. Let's start by building up an - * interrupt spec. we assume #interrupt-cells is 1, which is standard - * for PCI. If you do different, then don't use that routine. - */ - rc = pci_read_config_byte(pdev, PCI_INTERRUPT_PIN, &pin); - if (rc != 0) - return rc; - /* No pin, exit */ - if (pin == 0) - return -ENODEV; - - /* Now we walk up the PCI tree */ - lspec = pin; - for (;;) { - /* Get the pci_dev of our parent */ - ppdev = pdev->bus->self; - - /* Ouch, it's a host bridge... */ - if (ppdev == NULL) { - struct pci_controller *host; - host = pci_bus_to_host(pdev->bus); - ppnode = host ? host->arch_data : NULL; - /* No node for host bridge ? give up */ - if (ppnode == NULL) - return -EINVAL; - } else - /* We found a P2P bridge, check if it has a node */ - ppnode = pci_device_to_OF_node(ppdev); - - /* Ok, we have found a parent with a device-node, hand over to - * the OF parsing code. - * We build a unit address from the linux device to be used for - * resolution. Note that we use the linux bus number which may - * not match your firmware bus numbering. - * Fortunately, in most cases, interrupt-map-mask doesn't - * include the bus number as part of the matching. - * You should still be careful about that though if you intend - * to rely on this function (you ship a firmware that doesn't - * create device nodes for all PCI devices). - */ - if (ppnode) - break; - - /* We can only get here if we hit a P2P bridge with no node, - * let's do standard swizzling and try again - */ - lspec = of_irq_pci_swizzle(PCI_SLOT(pdev->devfn), lspec); - pdev = ppdev; - } - - laddr[0] = (pdev->bus->number << 16) - | (pdev->devfn << 8); - laddr[1] = laddr[2] = 0; - return of_irq_map_raw(ppnode, &lspec, 1, laddr, out_irq); -} -EXPORT_SYMBOL_GPL(of_irq_map_pci); -#endif /* CONFIG_PCI */ - -/* - * ISA bus specific translator - */ - -static int of_bus_isa_match(struct device_node *np) -{ - return !strcmp(np->name, "isa"); -} - -static void of_bus_isa_count_cells(struct device_node *child, - int *addrc, int *sizec) -{ - if (addrc) - *addrc = 2; - if (sizec) - *sizec = 1; -} - -static u64 of_bus_isa_map(u32 *addr, const u32 *range, int na, int ns, int pna) -{ - u64 cp, s, da; - - /* Check address type match */ - if ((addr[0] ^ range[0]) & 0x00000001) - return OF_BAD_ADDR; - - /* Read address values, skipping high cell */ - cp = of_read_number(range + 1, na - 1); - s = of_read_number(range + na + pna, ns); - da = of_read_number(addr + 1, na - 1); - - pr_debug("OF: ISA map, cp="PRu64", s="PRu64", da="PRu64"\n", cp, s, da); - - if (da < cp || da >= (cp + s)) - return OF_BAD_ADDR; - return da - cp; -} - -static int of_bus_isa_translate(u32 *addr, u64 offset, int na) -{ - return of_bus_default_translate(addr + 1, offset, na - 1); -} - -static unsigned int of_bus_isa_get_flags(const u32 *addr) -{ - unsigned int flags = 0; - u32 w = addr[0]; - - if (w & 1) - flags |= IORESOURCE_IO; - else - flags |= IORESOURCE_MEM; - return flags; -} - -/* - * Array of bus specific translators - */ - -static struct of_bus of_busses[] = { -#ifdef CONFIG_PCI - /* PCI */ - { - .name = "pci", - .addresses = "assigned-addresses", - .match = of_bus_pci_match, - .count_cells = of_bus_pci_count_cells, - .map = of_bus_pci_map, - .translate = of_bus_pci_translate, - .get_flags = of_bus_pci_get_flags, - }, -#endif /* CONFIG_PCI */ - /* ISA */ - { - .name = "isa", - .addresses = "reg", - .match = of_bus_isa_match, - .count_cells = of_bus_isa_count_cells, - .map = of_bus_isa_map, - .translate = of_bus_isa_translate, - .get_flags = of_bus_isa_get_flags, - }, - /* Default */ - { - .name = "default", - .addresses = "reg", - .match = NULL, - .count_cells = of_bus_default_count_cells, - .map = of_bus_default_map, - .translate = of_bus_default_translate, - .get_flags = of_bus_default_get_flags, - }, -}; - -static struct of_bus *of_match_bus(struct device_node *np) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(of_busses); i++) - if (!of_busses[i].match || of_busses[i].match(np)) - return &of_busses[i]; - BUG(); - return NULL; -} - -static int of_translate_one(struct device_node *parent, struct of_bus *bus, - struct of_bus *pbus, u32 *addr, - int na, int ns, int pna) -{ - const u32 *ranges; - unsigned int rlen; - int rone; - u64 offset = OF_BAD_ADDR; - - /* Normally, an absence of a "ranges" property means we are - * crossing a non-translatable boundary, and thus the addresses - * below the current not cannot be converted to CPU physical ones. - * Unfortunately, while this is very clear in the spec, it's not - * what Apple understood, and they do have things like /uni-n or - * /ht nodes with no "ranges" property and a lot of perfectly - * useable mapped devices below them. Thus we treat the absence of - * "ranges" as equivalent to an empty "ranges" property which means - * a 1:1 translation at that level. It's up to the caller not to try - * to translate addresses that aren't supposed to be translated in - * the first place. --BenH. - */ - ranges = of_get_property(parent, "ranges", (int *) &rlen); - if (ranges == NULL || rlen == 0) { - offset = of_read_number(addr, na); - memset(addr, 0, pna * 4); - pr_debug("OF: no ranges, 1:1 translation\n"); - goto finish; - } - - pr_debug("OF: walking ranges...\n"); - - /* Now walk through the ranges */ - rlen /= 4; - rone = na + pna + ns; - for (; rlen >= rone; rlen -= rone, ranges += rone) { - offset = bus->map(addr, ranges, na, ns, pna); - if (offset != OF_BAD_ADDR) - break; - } - if (offset == OF_BAD_ADDR) { - pr_debug("OF: not found !\n"); - return 1; - } - memcpy(addr, ranges + na, 4 * pna); - - finish: - of_dump_addr("OF: parent translation for:", addr, pna); - pr_debug("OF: with offset: "PRu64"\n", offset); - - /* Translate it into parent bus space */ - return pbus->translate(addr, offset, pna); -} - -/* - * Translate an address from the device-tree into a CPU physical address, - * this walks up the tree and applies the various bus mappings on the - * way. - * - * Note: We consider that crossing any level with #size-cells == 0 to mean - * that translation is impossible (that is we are not dealing with a value - * that can be mapped to a cpu physical address). This is not really specified - * that way, but this is traditionally the way IBM at least do things - */ -u64 of_translate_address(struct device_node *dev, const u32 *in_addr) -{ - struct device_node *parent = NULL; - struct of_bus *bus, *pbus; - u32 addr[OF_MAX_ADDR_CELLS]; - int na, ns, pna, pns; - u64 result = OF_BAD_ADDR; - - pr_debug("OF: ** translation for device %s **\n", dev->full_name); - - /* Increase refcount at current level */ - of_node_get(dev); - - /* Get parent & match bus type */ - parent = of_get_parent(dev); - if (parent == NULL) - goto bail; - bus = of_match_bus(parent); - - /* Cound address cells & copy address locally */ - bus->count_cells(dev, &na, &ns); - if (!OF_CHECK_COUNTS(na, ns)) { - printk(KERN_ERR "prom_parse: Bad cell count for %s\n", - dev->full_name); - goto bail; - } - memcpy(addr, in_addr, na * 4); - - pr_debug("OF: bus is %s (na=%d, ns=%d) on %s\n", - bus->name, na, ns, parent->full_name); - of_dump_addr("OF: translating address:", addr, na); - - /* Translate */ - for (;;) { - /* Switch to parent bus */ - of_node_put(dev); - dev = parent; - parent = of_get_parent(dev); - - /* If root, we have finished */ - if (parent == NULL) { - pr_debug("OF: reached root node\n"); - result = of_read_number(addr, na); - break; - } - - /* Get new parent bus and counts */ - pbus = of_match_bus(parent); - pbus->count_cells(dev, &pna, &pns); - if (!OF_CHECK_COUNTS(pna, pns)) { - printk(KERN_ERR "prom_parse: Bad cell count for %s\n", - dev->full_name); - break; - } - - pr_debug("OF: parent bus is %s (na=%d, ns=%d) on %s\n", - pbus->name, pna, pns, parent->full_name); - - /* Apply bus translation */ - if (of_translate_one(dev, bus, pbus, addr, na, ns, pna)) - break; - - /* Complete the move up one level */ - na = pna; - ns = pns; - bus = pbus; - - of_dump_addr("OF: one level translation:", addr, na); - } - bail: - of_node_put(parent); - of_node_put(dev); - - return result; -} -EXPORT_SYMBOL(of_translate_address); - -const u32 *of_get_address(struct device_node *dev, int index, u64 *size, - unsigned int *flags) -{ - const u32 *prop; - unsigned int psize; - struct device_node *parent; - struct of_bus *bus; - int onesize, i, na, ns; - - /* Get parent & match bus type */ - parent = of_get_parent(dev); - if (parent == NULL) - return NULL; - bus = of_match_bus(parent); - bus->count_cells(dev, &na, &ns); - of_node_put(parent); - if (!OF_CHECK_COUNTS(na, ns)) - return NULL; - - /* Get "reg" or "assigned-addresses" property */ - prop = of_get_property(dev, bus->addresses, (int *) &psize); - if (prop == NULL) - return NULL; - psize /= 4; - - onesize = na + ns; - for (i = 0; psize >= onesize; psize -= onesize, prop += onesize, i++) - if (i == index) { - if (size) - *size = of_read_number(prop + na, ns); - if (flags) - *flags = bus->get_flags(prop); - return prop; - } - return NULL; -} -EXPORT_SYMBOL(of_get_address); - -static int __of_address_to_resource(struct device_node *dev, const u32 *addrp, - u64 size, unsigned int flags, - struct resource *r) -{ - u64 taddr; - - if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) == 0) - return -EINVAL; - taddr = of_translate_address(dev, addrp); - if (taddr == OF_BAD_ADDR) - return -EINVAL; - memset(r, 0, sizeof(struct resource)); - if (flags & IORESOURCE_IO) { - unsigned long port; - port = -1; /* pci_address_to_pio(taddr); */ - if (port == (unsigned long)-1) - return -EINVAL; - r->start = port; - r->end = port + size - 1; - } else { - r->start = taddr; - r->end = taddr + size - 1; - } - r->flags = flags; - r->name = dev->name; - return 0; -} - -int of_address_to_resource(struct device_node *dev, int index, - struct resource *r) -{ - const u32 *addrp; - u64 size; - unsigned int flags; - - addrp = of_get_address(dev, index, &size, &flags); - if (addrp == NULL) - return -EINVAL; - return __of_address_to_resource(dev, addrp, size, flags, r); -} -EXPORT_SYMBOL_GPL(of_address_to_resource); - -void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop, - unsigned long *busno, unsigned long *phys, unsigned long *size) -{ - const u32 *dma_window; - u32 cells; - const unsigned char *prop; - - dma_window = dma_window_prop; - - /* busno is always one cell */ - *busno = *(dma_window++); - - prop = of_get_property(dn, "ibm,#dma-address-cells", NULL); - if (!prop) - prop = of_get_property(dn, "#address-cells", NULL); - - cells = prop ? *(u32 *)prop : of_n_addr_cells(dn); - *phys = of_read_number(dma_window, cells); - - dma_window += cells; - - prop = of_get_property(dn, "ibm,#dma-size-cells", NULL); - cells = prop ? *(u32 *)prop : of_n_size_cells(dn); - *size = of_read_number(dma_window, cells); -} - -/* - * Interrupt remapper - */ - -static unsigned int of_irq_workarounds; -static struct device_node *of_irq_dflt_pic; - -static struct device_node *of_irq_find_parent(struct device_node *child) -{ - struct device_node *p; - const phandle *parp; - - if (!of_node_get(child)) - return NULL; - - do { - parp = of_get_property(child, "interrupt-parent", NULL); - if (parp == NULL) - p = of_get_parent(child); - else { - if (of_irq_workarounds & OF_IMAP_NO_PHANDLE) - p = of_node_get(of_irq_dflt_pic); - else - p = of_find_node_by_phandle(*parp); - } - of_node_put(child); - child = p; - } while (p && of_get_property(p, "#interrupt-cells", NULL) == NULL); - - return p; -} - -/* This doesn't need to be called if you don't have any special workaround - * flags to pass - */ -void of_irq_map_init(unsigned int flags) -{ - of_irq_workarounds = flags; - - /* OldWorld, don't bother looking at other things */ - if (flags & OF_IMAP_OLDWORLD_MAC) - return; - - /* If we don't have phandles, let's try to locate a default interrupt - * controller (happens when booting with BootX). We do a first match - * here, hopefully, that only ever happens on machines with one - * controller. - */ - if (flags & OF_IMAP_NO_PHANDLE) { - struct device_node *np; - - for (np = NULL; (np = of_find_all_nodes(np)) != NULL;) { - if (of_get_property(np, "interrupt-controller", NULL) - == NULL) - continue; - /* Skip /chosen/interrupt-controller */ - if (strcmp(np->name, "chosen") == 0) - continue; - /* It seems like at least one person on this planet - * wants to use BootX on a machine with an AppleKiwi - * controller which happens to pretend to be an - * interrupt controller too. - */ - if (strcmp(np->name, "AppleKiwi") == 0) - continue; - /* I think we found one ! */ - of_irq_dflt_pic = np; - break; - } - } - -} - -int of_irq_map_raw(struct device_node *parent, const u32 *intspec, u32 ointsize, - const u32 *addr, struct of_irq *out_irq) -{ - struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL; - const u32 *tmp, *imap, *imask; - u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0; - int imaplen, match, i; - - pr_debug("of_irq_map_raw: par=%s,intspec=[0x%08x 0x%08x...]," - "ointsize=%d\n", - parent->full_name, intspec[0], intspec[1], ointsize); - - ipar = of_node_get(parent); - - /* First get the #interrupt-cells property of the current cursor - * that tells us how to interpret the passed-in intspec. If there - * is none, we are nice and just walk up the tree - */ - do { - tmp = of_get_property(ipar, "#interrupt-cells", NULL); - if (tmp != NULL) { - intsize = *tmp; - break; - } - tnode = ipar; - ipar = of_irq_find_parent(ipar); - of_node_put(tnode); - } while (ipar); - if (ipar == NULL) { - pr_debug(" -> no parent found !\n"); - goto fail; - } - - pr_debug("of_irq_map_raw: ipar=%s, size=%d\n", - ipar->full_name, intsize); - - if (ointsize != intsize) - return -EINVAL; - - /* Look for this #address-cells. We have to implement the old linux - * trick of looking for the parent here as some device-trees rely on it - */ - old = of_node_get(ipar); - do { - tmp = of_get_property(old, "#address-cells", NULL); - tnode = of_get_parent(old); - of_node_put(old); - old = tnode; - } while (old && tmp == NULL); - of_node_put(old); - old = NULL; - addrsize = (tmp == NULL) ? 2 : *tmp; - - pr_debug(" -> addrsize=%d\n", addrsize); - - /* Now start the actual "proper" walk of the interrupt tree */ - while (ipar != NULL) { - /* Now check if cursor is an interrupt-controller and if it is - * then we are done - */ - if (of_get_property(ipar, "interrupt-controller", NULL) != - NULL) { - pr_debug(" -> got it !\n"); - memcpy(out_irq->specifier, intspec, - intsize * sizeof(u32)); - out_irq->size = intsize; - out_irq->controller = ipar; - of_node_put(old); - return 0; - } - - /* Now look for an interrupt-map */ - imap = of_get_property(ipar, "interrupt-map", &imaplen); - /* No interrupt map, check for an interrupt parent */ - if (imap == NULL) { - pr_debug(" -> no map, getting parent\n"); - newpar = of_irq_find_parent(ipar); - goto skiplevel; - } - imaplen /= sizeof(u32); - - /* Look for a mask */ - imask = of_get_property(ipar, "interrupt-map-mask", NULL); - - /* If we were passed no "reg" property and we attempt to parse - * an interrupt-map, then #address-cells must be 0. - * Fail if it's not. - */ - if (addr == NULL && addrsize != 0) { - pr_debug(" -> no reg passed in when needed !\n"); - goto fail; - } - - /* Parse interrupt-map */ - match = 0; - while (imaplen > (addrsize + intsize + 1) && !match) { - /* Compare specifiers */ - match = 1; - for (i = 0; i < addrsize && match; ++i) { - u32 mask = imask ? imask[i] : 0xffffffffu; - match = ((addr[i] ^ imap[i]) & mask) == 0; - } - for (; i < (addrsize + intsize) && match; ++i) { - u32 mask = imask ? imask[i] : 0xffffffffu; - match = - ((intspec[i-addrsize] ^ imap[i]) - & mask) == 0; - } - imap += addrsize + intsize; - imaplen -= addrsize + intsize; - - pr_debug(" -> match=%d (imaplen=%d)\n", match, imaplen); - - /* Get the interrupt parent */ - if (of_irq_workarounds & OF_IMAP_NO_PHANDLE) - newpar = of_node_get(of_irq_dflt_pic); - else - newpar = - of_find_node_by_phandle((phandle)*imap); - imap++; - --imaplen; - - /* Check if not found */ - if (newpar == NULL) { - pr_debug(" -> imap parent not found !\n"); - goto fail; - } - - /* Get #interrupt-cells and #address-cells of new - * parent - */ - tmp = of_get_property(newpar, "#interrupt-cells", NULL); - if (tmp == NULL) { - pr_debug(" -> parent lacks " - "#interrupt-cells!\n"); - goto fail; - } - newintsize = *tmp; - tmp = of_get_property(newpar, "#address-cells", NULL); - newaddrsize = (tmp == NULL) ? 0 : *tmp; - - pr_debug(" -> newintsize=%d, newaddrsize=%d\n", - newintsize, newaddrsize); - - /* Check for malformed properties */ - if (imaplen < (newaddrsize + newintsize)) - goto fail; - - imap += newaddrsize + newintsize; - imaplen -= newaddrsize + newintsize; - - pr_debug(" -> imaplen=%d\n", imaplen); - } - if (!match) - goto fail; - - of_node_put(old); - old = of_node_get(newpar); - addrsize = newaddrsize; - intsize = newintsize; - intspec = imap - intsize; - addr = intspec - addrsize; - -skiplevel: - /* Iterate again with new parent */ - pr_debug(" -> new parent: %s\n", - newpar ? newpar->full_name : "<>"); - of_node_put(ipar); - ipar = newpar; - newpar = NULL; - } -fail: - of_node_put(ipar); - of_node_put(old); - of_node_put(newpar); - - return -EINVAL; -} -EXPORT_SYMBOL_GPL(of_irq_map_raw); - -int of_irq_map_one(struct device_node *device, - int index, struct of_irq *out_irq) -{ - struct device_node *p; - const u32 *intspec, *tmp, *addr; - u32 intsize, intlen; - int res; - - pr_debug("of_irq_map_one: dev=%s, index=%d\n", - device->full_name, index); - - /* Get the interrupts property */ - intspec = of_get_property(device, "interrupts", (int *) &intlen); - if (intspec == NULL) - return -EINVAL; - intlen /= sizeof(u32); - - pr_debug(" intspec=%d intlen=%d\n", *intspec, intlen); - - /* Get the reg property (if any) */ - addr = of_get_property(device, "reg", NULL); - - /* Look for the interrupt parent. */ - p = of_irq_find_parent(device); - if (p == NULL) - return -EINVAL; - - /* Get size of interrupt specifier */ - tmp = of_get_property(p, "#interrupt-cells", NULL); - if (tmp == NULL) { - of_node_put(p); - return -EINVAL; - } - intsize = *tmp; - - pr_debug(" intsize=%d intlen=%d\n", intsize, intlen); - - /* Check index */ - if ((index + 1) * intsize > intlen) - return -EINVAL; - - /* Get new specifier and map it */ - res = of_irq_map_raw(p, intspec + index * intsize, intsize, - addr, out_irq); - of_node_put(p); - return res; -} -EXPORT_SYMBOL_GPL(of_irq_map_one); - -/** - * Search the device tree for the best MAC address to use. 'mac-address' is - * checked first, because that is supposed to contain to "most recent" MAC - * address. If that isn't set, then 'local-mac-address' is checked next, - * because that is the default address. If that isn't set, then the obsolete - * 'address' is checked, just in case we're using an old device tree. - * - * Note that the 'address' property is supposed to contain a virtual address of - * the register set, but some DTS files have redefined that property to be the - * MAC address. - * - * All-zero MAC addresses are rejected, because those could be properties that - * exist in the device tree, but were not set by U-Boot. For example, the - * DTS could define 'mac-address' and 'local-mac-address', with zero MAC - * addresses. Some older U-Boots only initialized 'local-mac-address'. In - * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists - * but is all zeros. -*/ -const void *of_get_mac_address(struct device_node *np) -{ - struct property *pp; - - pp = of_find_property(np, "mac-address", NULL); - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) - return pp->value; - - pp = of_find_property(np, "local-mac-address", NULL); - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) - return pp->value; - - pp = of_find_property(np, "address", NULL); - if (pp && (pp->length == 6) && is_valid_ether_addr(pp->value)) - return pp->value; - - return NULL; -} -EXPORT_SYMBOL(of_get_mac_address); - -int of_irq_to_resource(struct device_node *dev, int index, struct resource *r) -{ - struct of_irq out_irq; - int irq; - int res; - - res = of_irq_map_one(dev, index, &out_irq); - - /* Get irq for the device */ - if (res) { - pr_debug("IRQ not found... code = %d", res); - return NO_IRQ; - } - /* Assuming single interrupt controller... */ - irq = out_irq.specifier[0]; - - pr_debug("IRQ found = %d", irq); - - /* Only dereference the resource if both the - * resource and the irq are valid. */ - if (r && irq != NO_IRQ) { - r->start = r->end = irq; - r->flags = IORESOURCE_IRQ; - } - - return irq; -} -EXPORT_SYMBOL_GPL(of_irq_to_resource); - -void __iomem *of_iomap(struct device_node *np, int index) -{ - struct resource res; - - if (of_address_to_resource(np, index, &res)) - return NULL; - - return ioremap(res.start, 1 + res.end - res.start); -} -EXPORT_SYMBOL(of_iomap); diff --git a/trunk/arch/microblaze/kernel/ptrace.c b/trunk/arch/microblaze/kernel/ptrace.c deleted file mode 100644 index b86aa623e36d..000000000000 --- a/trunk/arch/microblaze/kernel/ptrace.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * `ptrace' system call - * - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2004-2007 John Williams - * - * derived from arch/v850/kernel/ptrace.c - * - * Copyright (C) 2002,03 NEC Electronics Corporation - * Copyright (C) 2002,03 Miles Bader - * - * Derived from arch/mips/kernel/ptrace.c: - * - * Copyright (C) 1992 Ross Biro - * Copyright (C) Linus Torvalds - * Copyright (C) 1994, 95, 96, 97, 98, 2000 Ralf Baechle - * Copyright (C) 1996 David S. Miller - * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com - * Copyright (C) 1999 MIPS Technologies, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -/* Returns the address where the register at REG_OFFS in P is stashed away. */ -static microblaze_reg_t *reg_save_addr(unsigned reg_offs, - struct task_struct *t) -{ - struct pt_regs *regs; - - /* - * Three basic cases: - * - * (1) A register normally saved before calling the scheduler, is - * available in the kernel entry pt_regs structure at the top - * of the kernel stack. The kernel trap/irq exit path takes - * care to save/restore almost all registers for ptrace'd - * processes. - * - * (2) A call-clobbered register, where the process P entered the - * kernel via [syscall] trap, is not stored anywhere; that's - * OK, because such registers are not expected to be preserved - * when the trap returns anyway (so we don't actually bother to - * test for this case). - * - * (3) A few registers not used at all by the kernel, and so - * normally never saved except by context-switches, are in the - * context switch state. - */ - - /* Register saved during kernel entry (or not available). */ - regs = task_pt_regs(t); - - return (microblaze_reg_t *)((char *)regs + reg_offs); -} - -long arch_ptrace(struct task_struct *child, long request, long addr, long data) -{ - int rval; - unsigned long val = 0; - unsigned long copied; - - switch (request) { - case PTRACE_PEEKTEXT: /* read word at location addr. */ - case PTRACE_PEEKDATA: - pr_debug("PEEKTEXT/PEEKDATA at %08lX\n", addr); - copied = access_process_vm(child, addr, &val, sizeof(val), 0); - rval = -EIO; - if (copied != sizeof(val)) - break; - rval = put_user(val, (unsigned long *)data); - break; - - case PTRACE_POKETEXT: /* write the word at location addr. */ - case PTRACE_POKEDATA: - pr_debug("POKETEXT/POKEDATA to %08lX\n", addr); - rval = 0; - if (access_process_vm(child, addr, &data, sizeof(data), 1) - == sizeof(data)) - break; - rval = -EIO; - break; - - /* Read/write the word at location ADDR in the registers. */ - case PTRACE_PEEKUSR: - case PTRACE_POKEUSR: - pr_debug("PEEKUSR/POKEUSR : 0x%08lx\n", addr); - rval = 0; - if (addr >= PT_SIZE && request == PTRACE_PEEKUSR) { - /* - * Special requests that don't actually correspond - * to offsets in struct pt_regs. - */ - if (addr == PT_TEXT_ADDR) { - val = child->mm->start_code; - } else if (addr == PT_DATA_ADDR) { - val = child->mm->start_data; - } else if (addr == PT_TEXT_LEN) { - val = child->mm->end_code - - child->mm->start_code; - } else { - rval = -EIO; - } - } else if (addr >= 0 && addr < PT_SIZE && (addr & 0x3) == 0) { - microblaze_reg_t *reg_addr = reg_save_addr(addr, child); - if (request == PTRACE_PEEKUSR) - val = *reg_addr; - else - *reg_addr = data; - } else - rval = -EIO; - - if (rval == 0 && request == PTRACE_PEEKUSR) - rval = put_user(val, (unsigned long *)data); - break; - /* Continue and stop at next (return from) syscall */ - case PTRACE_SYSCALL: - pr_debug("PTRACE_SYSCALL\n"); - case PTRACE_SINGLESTEP: - pr_debug("PTRACE_SINGLESTEP\n"); - /* Restart after a signal. */ - case PTRACE_CONT: - pr_debug("PTRACE_CONT\n"); - rval = -EIO; - if (!valid_signal(data)) - break; - - if (request == PTRACE_SYSCALL) - set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - else - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - - child->exit_code = data; - pr_debug("wakeup_process\n"); - wake_up_process(child); - rval = 0; - break; - - /* - * make the child exit. Best I can do is send it a sigkill. - * perhaps it should be put in the status that it wants to - * exit. - */ - case PTRACE_KILL: - pr_debug("PTRACE_KILL\n"); - rval = 0; - if (child->exit_state == EXIT_ZOMBIE) /* already dead */ - break; - child->exit_code = SIGKILL; - wake_up_process(child); - break; - - case PTRACE_DETACH: /* detach a process that was attached. */ - pr_debug("PTRACE_DETACH\n"); - rval = ptrace_detach(child, data); - break; - default: - /* rval = ptrace_request(child, request, addr, data); noMMU */ - rval = -EIO; - } - return rval; -} - -void ptrace_disable(struct task_struct *child) -{ - /* nothing to do */ -} diff --git a/trunk/arch/microblaze/kernel/selfmod.c b/trunk/arch/microblaze/kernel/selfmod.c deleted file mode 100644 index 89508bdc9f3c..000000000000 --- a/trunk/arch/microblaze/kernel/selfmod.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2009 PetaLogix - * - * 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. - */ - -#include -#include - -#undef DEBUG - -#if __GNUC__ > 3 -#error GCC 4 unsupported SELFMOD. Please disable SELFMOD from menuconfig. -#endif - -#define OPCODE_IMM 0xB0000000 -#define OPCODE_LWI 0xE8000000 -#define OPCODE_LWI_MASK 0xEC000000 -#define OPCODE_RTSD 0xB60F0008 /* return from func: rtsd r15, 8 */ -#define OPCODE_ADDIK 0x30000000 -#define OPCODE_ADDIK_MASK 0xFC000000 - -#define IMM_BASE (OPCODE_IMM | (BARRIER_BASE_ADDR >> 16)) -#define LWI_BASE (OPCODE_LWI | (BARRIER_BASE_ADDR & 0x0000ff00)) -#define LWI_BASE_MASK (OPCODE_LWI_MASK | (BARRIER_BASE_ADDR & 0x0000ff00)) -#define ADDIK_BASE (OPCODE_ADDIK | (BARRIER_BASE_ADDR & 0x0000ff00)) -#define ADDIK_BASE_MASK (OPCODE_ADDIK_MASK | (BARRIER_BASE_ADDR & 0x0000ff00)) - -#define MODIFY_INSTR { \ - pr_debug("%s: curr instr, (%d):0x%x, next(%d):0x%x\n", \ - __func__, i, addr[i], i + 1, addr[i + 1]); \ - addr[i] = OPCODE_IMM + (base >> 16); \ - /* keep instruction opcode and add only last 16bits */ \ - addr[i + 1] = (addr[i + 1] & 0xffff00ff) + (base & 0xffff); \ - __invalidate_icache(addr[i]); \ - __invalidate_icache(addr[i + 1]); \ - pr_debug("%s: hack instr, (%d):0x%x, next(%d):0x%x\n", \ - __func__, i, addr[i], i + 1, addr[i + 1]); } - -/* NOTE - * self-modified part of code for improvement of interrupt controller - * save instruction in interrupt rutine - */ -void selfmod_function(const int *arr_fce, const unsigned int base) -{ - unsigned int flags, i, j, *addr = NULL; - - local_irq_save(flags); - __disable_icache(); - - /* zero terminated array */ - for (j = 0; arr_fce[j] != 0; j++) { - /* get start address of function */ - addr = (unsigned int *) arr_fce[j]; - pr_debug("%s: func(%d) at 0x%x\n", - __func__, j, (unsigned int) addr); - for (i = 0; ; i++) { - pr_debug("%s: instruction code at %d: 0x%x\n", - __func__, i, addr[i]); - if (addr[i] == IMM_BASE) { - /* detecting of lwi (0xE8) or swi (0xF8) instr - * I can detect both opcode with one mask */ - if ((addr[i + 1] & LWI_BASE_MASK) == LWI_BASE) { - MODIFY_INSTR; - } else /* detection addik for ack */ - if ((addr[i + 1] & ADDIK_BASE_MASK) == - ADDIK_BASE) { - MODIFY_INSTR; - } - } else if (addr[i] == OPCODE_RTSD) { - /* return from function means end of function */ - pr_debug("%s: end of array %d\n", __func__, i); - break; - } - } - } - local_irq_restore(flags); -} /* end of self-modified code */ diff --git a/trunk/arch/microblaze/kernel/setup.c b/trunk/arch/microblaze/kernel/setup.c deleted file mode 100644 index eb6b41758e23..000000000000 --- a/trunk/arch/microblaze/kernel/setup.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -DEFINE_PER_CPU(unsigned int, KSP); /* Saved kernel stack pointer */ -DEFINE_PER_CPU(unsigned int, KM); /* Kernel/user mode */ -DEFINE_PER_CPU(unsigned int, ENTRY_SP); /* Saved SP on kernel entry */ -DEFINE_PER_CPU(unsigned int, R11_SAVE); /* Temp variable for entry */ -DEFINE_PER_CPU(unsigned int, CURRENT_SAVE); /* Saved current pointer */ - -unsigned int boot_cpuid; -char cmd_line[COMMAND_LINE_SIZE]; - -void __init setup_arch(char **cmdline_p) -{ -#ifdef CONFIG_CMDLINE_FORCE - strlcpy(cmd_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); - strlcpy(boot_command_line, CONFIG_CMDLINE, COMMAND_LINE_SIZE); -#endif - *cmdline_p = cmd_line; - - console_verbose(); - - unflatten_device_tree(); - - /* NOTE I think that this function is not necessary to call */ - /* irq_early_init(); */ - setup_cpuinfo(); - - __invalidate_icache_all(); - __enable_icache(); - - __invalidate_dcache_all(); - __enable_dcache(); - - panic_timeout = 120; - - setup_memory(); - -#if defined(CONFIG_SELFMOD_INTC) || defined(CONFIG_SELFMOD_TIMER) - printk(KERN_NOTICE "Self modified code enable\n"); -#endif - -#ifdef CONFIG_VT -#if defined(CONFIG_XILINX_CONSOLE) - conswitchp = &xil_con; -#elif defined(CONFIG_DUMMY_CONSOLE) - conswitchp = &dummy_con; -#endif -#endif -} - -#ifdef CONFIG_MTD_UCLINUX -/* Handle both romfs and cramfs types, without generating unnecessary - code (ie no point checking for CRAMFS if it's not even enabled) */ -inline unsigned get_romfs_len(unsigned *addr) -{ -#ifdef CONFIG_ROMFS_FS - if (memcmp(&addr[0], "-rom1fs-", 8) == 0) /* romfs */ - return be32_to_cpu(addr[2]); -#endif - -#ifdef CONFIG_CRAMFS - if (addr[0] == le32_to_cpu(0x28cd3d45)) /* cramfs */ - return le32_to_cpu(addr[1]); -#endif - return 0; -} -#endif /* CONFIG_MTD_UCLINUX_EBSS */ - -void __init machine_early_init(const char *cmdline, unsigned int ram, - unsigned int fdt) -{ - unsigned long *src, *dst = (unsigned long *)0x0; - -/* clearing bss section */ - memset(__bss_start, 0, __bss_stop-__bss_start); - memset(_ssbss, 0, _esbss-_ssbss); - - /* - * Copy command line passed from bootloader, or use default - * if none provided, or forced - */ -#ifndef CONFIG_CMDLINE_BOOL - if (cmdline && cmdline[0] != '\0') - strlcpy(cmd_line, cmdline, COMMAND_LINE_SIZE); -#endif - -/* initialize device tree for usage in early_printk */ - early_init_devtree((void *)_fdt_start); - -#ifdef CONFIG_EARLY_PRINTK - setup_early_printk(NULL); -#endif - - early_printk("Ramdisk addr 0x%08x, FDT 0x%08x\n", ram, fdt); - printk(KERN_NOTICE "Found FDT at 0x%08x\n", fdt); - -#ifdef CONFIG_MTD_UCLINUX - { - int size; - unsigned int romfs_base; - romfs_base = (ram ? ram : (unsigned int)&__init_end); - /* if CONFIG_MTD_UCLINUX_EBSS is defined, assume ROMFS is at the - * end of kernel, which is ROMFS_LOCATION defined above. */ - size = PAGE_ALIGN(get_romfs_len((unsigned *)romfs_base)); - early_printk("Found romfs @ 0x%08x (0x%08x)\n", - romfs_base, size); - early_printk("#### klimit %p ####\n", klimit); - BUG_ON(size < 0); /* What else can we do? */ - - /* Use memmove to handle likely case of memory overlap */ - early_printk("Moving 0x%08x bytes from 0x%08x to 0x%08x\n", - size, romfs_base, (unsigned)&_ebss); - memmove(&_ebss, (int *)romfs_base, size); - - /* update klimit */ - klimit += PAGE_ALIGN(size); - early_printk("New klimit: 0x%08x\n", (unsigned)klimit); - } -#endif - - for (src = __ivt_start; src < __ivt_end; src++, dst++) - *dst = *src; - - /* Initialize global data */ - per_cpu(KM, 0) = 0x1; /* We start in kernel mode */ - per_cpu(CURRENT_SAVE, 0) = (unsigned long)current; -} - -#ifdef CONFIG_DEBUG_FS -struct dentry *of_debugfs_root; - -static int microblaze_debugfs_init(void) -{ - of_debugfs_root = debugfs_create_dir("microblaze", NULL); - - return of_debugfs_root == NULL; -} -arch_initcall(microblaze_debugfs_init); -#endif - -void machine_restart(char *cmd) -{ - printk(KERN_NOTICE "Machine restart...\n"); - dump_stack(); - while (1) - ; -} - -void machine_shutdown(void) -{ - printk(KERN_NOTICE "Machine shutdown...\n"); - while (1) - ; -} - -void machine_halt(void) -{ - printk(KERN_NOTICE "Machine halt...\n"); - while (1) - ; -} - -void machine_power_off(void) -{ - printk(KERN_NOTICE "Machine power off...\n"); - while (1) - ; -} diff --git a/trunk/arch/microblaze/kernel/signal.c b/trunk/arch/microblaze/kernel/signal.c deleted file mode 100644 index 3889cf45fa71..000000000000 --- a/trunk/arch/microblaze/kernel/signal.c +++ /dev/null @@ -1,537 +0,0 @@ -/* - * Signal handling - * - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2003,2004 John Williams - * Copyright (C) 2001 NEC Corporation - * Copyright (C) 2001 Miles Bader - * Copyright (C) 1999,2000 Niibe Yutaka & Kaz Kojima - * Copyright (C) 1991,1992 Linus Torvalds - * - * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson - * - * This file was was derived from the sh version, arch/sh/kernel/signal.c - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) - -asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_sycall); - -/* - * Atomically swap in the new signal mask, and wait for a signal. - */ -asmlinkage int -sys_sigsuspend(old_sigset_t mask, struct pt_regs *regs) -{ - sigset_t saveset; - - mask &= _BLOCKABLE; - spin_lock_irq(¤t->sighand->siglock); - saveset = current->blocked; - siginitset(¤t->blocked, mask); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - - regs->r3 = -EINTR; - while (1) { - current->state = TASK_INTERRUPTIBLE; - schedule(); - if (do_signal(regs, &saveset, 1)) - return -EINTR; - } -} - -asmlinkage int -sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, - struct pt_regs *regs) -{ - sigset_t saveset, newset; - - /* XXX: Don't preclude handling different sized sigset_t's. */ - if (sigsetsize != sizeof(sigset_t)) - return -EINVAL; - - if (copy_from_user(&newset, unewset, sizeof(newset))) - return -EFAULT; - sigdelsetmask(&newset, ~_BLOCKABLE); - spin_lock_irq(¤t->sighand->siglock); - saveset = current->blocked; - current->blocked = newset; - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - - regs->r3 = -EINTR; - while (1) { - current->state = TASK_INTERRUPTIBLE; - schedule(); - if (do_signal(regs, &saveset, 1)) - return -EINTR; - } -} - -asmlinkage int -sys_sigaction(int sig, const struct old_sigaction *act, - struct old_sigaction *oact) -{ - struct k_sigaction new_ka, old_ka; - int ret; - - if (act) { - old_sigset_t mask; - if (!access_ok(VERIFY_READ, act, sizeof(*act)) || - __get_user(new_ka.sa.sa_handler, &act->sa_handler) || - __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) - return -EFAULT; - __get_user(new_ka.sa.sa_flags, &act->sa_flags); - __get_user(mask, &act->sa_mask); - siginitset(&new_ka.sa.sa_mask, mask); - } - - ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); - - if (!ret && oact) { - if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) || - __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || - __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) - return -EFAULT; - __put_user(old_ka.sa.sa_flags, &oact->sa_flags); - __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); - } - - return ret; -} - -asmlinkage int -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, - struct pt_regs *regs) -{ - return do_sigaltstack(uss, uoss, regs->r1); -} - -/* - * Do a signal return; undo the signal stack. - */ - -struct sigframe { - struct sigcontext sc; - unsigned long extramask[_NSIG_WORDS-1]; - unsigned long tramp[2]; /* signal trampoline */ -}; - -struct rt_sigframe { - struct siginfo info; - struct ucontext uc; - unsigned long tramp[2]; /* signal trampoline */ -}; - -static int -restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *rval_p) -{ - unsigned int err = 0; - -#define COPY(x) {err |= __get_user(regs->x, &sc->regs.x); } - COPY(r0); - COPY(r1); - COPY(r2); COPY(r3); COPY(r4); COPY(r5); - COPY(r6); COPY(r7); COPY(r8); COPY(r9); - COPY(r10); COPY(r11); COPY(r12); COPY(r13); - COPY(r14); COPY(r15); COPY(r16); COPY(r17); - COPY(r18); COPY(r19); COPY(r20); COPY(r21); - COPY(r22); COPY(r23); COPY(r24); COPY(r25); - COPY(r26); COPY(r27); COPY(r28); COPY(r29); - COPY(r30); COPY(r31); - COPY(pc); COPY(ear); COPY(esr); COPY(fsr); -#undef COPY - - *rval_p = regs->r3; - - return err; -} - -asmlinkage int sys_sigreturn(struct pt_regs *regs) -{ - struct sigframe *frame = (struct sigframe *)regs->r1; - sigset_t set; - int rval; - - if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) - goto badframe; - - if (__get_user(set.sig[0], &frame->sc.oldmask) - || (_NSIG_WORDS > 1 - && __copy_from_user(&set.sig[1], &frame->extramask, - sizeof(frame->extramask)))) - goto badframe; - - sigdelsetmask(&set, ~_BLOCKABLE); - - spin_lock_irq(¤t->sighand->siglock); - current->blocked = set; - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - - if (restore_sigcontext(regs, &frame->sc, &rval)) - goto badframe; - return rval; - -badframe: - force_sig(SIGSEGV, current); - return 0; -} - -asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) -{ - struct rt_sigframe *frame = (struct rt_sigframe *)regs->r1; - sigset_t set; - stack_t st; - int rval; - - if (!access_ok(VERIFY_READ, frame, sizeof(*frame))) - goto badframe; - - if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) - goto badframe; - - sigdelsetmask(&set, ~_BLOCKABLE); - spin_lock_irq(¤t->sighand->siglock); - current->blocked = set; - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - - if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &rval)) - goto badframe; - - if (__copy_from_user((void *)&st, &frame->uc.uc_stack, sizeof(st))) - goto badframe; - /* It is more difficult to avoid calling this function than to - call it and ignore errors. */ - do_sigaltstack(&st, NULL, regs->r1); - - return rval; - -badframe: - force_sig(SIGSEGV, current); - return 0; -} - -/* - * Set up a signal frame. - */ - -static int -setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, - unsigned long mask) -{ - int err = 0; - -#define COPY(x) {err |= __put_user(regs->x, &sc->regs.x); } - COPY(r0); - COPY(r1); - COPY(r2); COPY(r3); COPY(r4); COPY(r5); - COPY(r6); COPY(r7); COPY(r8); COPY(r9); - COPY(r10); COPY(r11); COPY(r12); COPY(r13); - COPY(r14); COPY(r15); COPY(r16); COPY(r17); - COPY(r18); COPY(r19); COPY(r20); COPY(r21); - COPY(r22); COPY(r23); COPY(r24); COPY(r25); - COPY(r26); COPY(r27); COPY(r28); COPY(r29); - COPY(r30); COPY(r31); - COPY(pc); COPY(ear); COPY(esr); COPY(fsr); -#undef COPY - - err |= __put_user(mask, &sc->oldmask); - - return err; -} - -/* - * Determine which stack to use.. - */ -static inline void * -get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) -{ - /* Default to using normal stack */ - unsigned long sp = regs->r1; - - if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && !on_sig_stack(sp)) - sp = current->sas_ss_sp + current->sas_ss_size; - - return (void *)((sp - frame_size) & -8UL); -} - -static void setup_frame(int sig, struct k_sigaction *ka, - sigset_t *set, struct pt_regs *regs) -{ - struct sigframe *frame; - int err = 0; - int signal; - - frame = get_sigframe(ka, regs, sizeof(*frame)); - - if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) - goto give_sigsegv; - - signal = current_thread_info()->exec_domain - && current_thread_info()->exec_domain->signal_invmap - && sig < 32 - ? current_thread_info()->exec_domain->signal_invmap[sig] - : sig; - - err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); - - if (_NSIG_WORDS > 1) { - err |= __copy_to_user(frame->extramask, &set->sig[1], - sizeof(frame->extramask)); - } - - /* Set up to return from userspace. If provided, use a stub - already in userspace. */ - /* minus 8 is offset to cater for "rtsd r15,8" offset */ - if (ka->sa.sa_flags & SA_RESTORER) { - regs->r15 = ((unsigned long)ka->sa.sa_restorer)-8; - } else { - /* Note, these encodings are _big endian_! */ - - /* addi r12, r0, __NR_sigreturn */ - err |= __put_user(0x31800000 | __NR_sigreturn , - frame->tramp + 0); - /* brki r14, 0x8 */ - err |= __put_user(0xb9cc0008, frame->tramp + 1); - - /* Return from sighandler will jump to the tramp. - Negative 8 offset because return is rtsd r15, 8 */ - regs->r15 = ((unsigned long)frame->tramp)-8; - - __invalidate_cache_sigtramp((unsigned long)frame->tramp); - } - - if (err) - goto give_sigsegv; - - /* Set up registers for signal handler */ - regs->r1 = (unsigned long) frame; - /* Signal handler args: */ - regs->r5 = signal; /* Arg 0: signum */ - regs->r6 = (unsigned long) &frame->sc; /* arg 1: sigcontext */ - - /* Offset of 4 to handle microblaze rtid r14, 0 */ - regs->pc = (unsigned long)ka->sa.sa_handler; - - set_fs(USER_DS); - -#ifdef DEBUG_SIG - printk(KERN_INFO "SIG deliver (%s:%d): sp=%p pc=%08lx\n", - current->comm, current->pid, frame, regs->pc); -#endif - - return; - -give_sigsegv: - if (sig == SIGSEGV) - ka->sa.sa_handler = SIG_DFL; - force_sig(SIGSEGV, current); -} - -static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, - sigset_t *set, struct pt_regs *regs) -{ - struct rt_sigframe *frame; - int err = 0; - int signal; - - frame = get_sigframe(ka, regs, sizeof(*frame)); - - if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) - goto give_sigsegv; - - signal = current_thread_info()->exec_domain - && current_thread_info()->exec_domain->signal_invmap - && sig < 32 - ? current_thread_info()->exec_domain->signal_invmap[sig] - : sig; - - err |= copy_siginfo_to_user(&frame->info, info); - - /* Create the ucontext. */ - err |= __put_user(0, &frame->uc.uc_flags); - err |= __put_user(0, &frame->uc.uc_link); - err |= __put_user((void *)current->sas_ss_sp, - &frame->uc.uc_stack.ss_sp); - err |= __put_user(sas_ss_flags(regs->r1), - &frame->uc.uc_stack.ss_flags); - err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); - err |= setup_sigcontext(&frame->uc.uc_mcontext, - regs, set->sig[0]); - err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); - - /* Set up to return from userspace. If provided, use a stub - already in userspace. */ - /* minus 8 is offset to cater for "rtsd r15,8" */ - if (ka->sa.sa_flags & SA_RESTORER) { - regs->r15 = ((unsigned long)ka->sa.sa_restorer)-8; - } else { - /* addi r12, r0, __NR_sigreturn */ - err |= __put_user(0x31800000 | __NR_rt_sigreturn , - frame->tramp + 0); - /* brki r14, 0x8 */ - err |= __put_user(0xb9cc0008, frame->tramp + 1); - - /* Return from sighandler will jump to the tramp. - Negative 8 offset because return is rtsd r15, 8 */ - regs->r15 = ((unsigned long)frame->tramp)-8; - - __invalidate_cache_sigtramp((unsigned long)frame->tramp); - } - - if (err) - goto give_sigsegv; - - /* Set up registers for signal handler */ - regs->r1 = (unsigned long) frame; - /* Signal handler args: */ - regs->r5 = signal; /* arg 0: signum */ - regs->r6 = (unsigned long) &frame->info; /* arg 1: siginfo */ - regs->r7 = (unsigned long) &frame->uc; /* arg2: ucontext */ - /* Offset to handle microblaze rtid r14, 0 */ - regs->pc = (unsigned long)ka->sa.sa_handler; - - set_fs(USER_DS); - -#ifdef DEBUG_SIG - printk(KERN_INFO "SIG deliver (%s:%d): sp=%p pc=%08lx\n", - current->comm, current->pid, frame, regs->pc); -#endif - - return; - -give_sigsegv: - if (sig == SIGSEGV) - ka->sa.sa_handler = SIG_DFL; - force_sig(SIGSEGV, current); -} - -/* Handle restarting system calls */ -static inline void -handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) -{ - switch (regs->r3) { - case -ERESTART_RESTARTBLOCK: - case -ERESTARTNOHAND: - if (!has_handler) - goto do_restart; - regs->r3 = -EINTR; - break; - case -ERESTARTSYS: - if (has_handler && !(ka->sa.sa_flags & SA_RESTART)) { - regs->r3 = -EINTR; - break; - } - /* fallthrough */ - case -ERESTARTNOINTR: -do_restart: - /* offset of 4 bytes to re-execute trap (brki) instruction */ - regs->pc -= 4; - break; - } -} - -/* - * OK, we're invoking a handler - */ - -static void -handle_signal(unsigned long sig, struct k_sigaction *ka, - siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) -{ - /* Set up the stack frame */ - if (ka->sa.sa_flags & SA_SIGINFO) - setup_rt_frame(sig, ka, info, oldset, regs); - else - setup_frame(sig, ka, oldset, regs); - - if (ka->sa.sa_flags & SA_ONESHOT) - ka->sa.sa_handler = SIG_DFL; - - if (!(ka->sa.sa_flags & SA_NODEFER)) { - spin_lock_irq(¤t->sighand->siglock); - sigorsets(¤t->blocked, - ¤t->blocked, &ka->sa.sa_mask); - sigaddset(¤t->blocked, sig); - recalc_sigpending(); - spin_unlock_irq(¤t->sighand->siglock); - } -} - -/* - * Note that 'init' is a special process: it doesn't get signals it doesn't - * want to handle. Thus you cannot kill init even with a SIGKILL even by - * mistake. - * - * Note that we go through the signals twice: once to check the signals that - * the kernel can handle, and then we build all the user-level signal handling - * stack-frames in one go after that. - */ -int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) -{ - siginfo_t info; - int signr; - struct k_sigaction ka; -#ifdef DEBUG_SIG - printk(KERN_INFO "do signal: %p %p %d\n", regs, oldset, in_syscall); - printk(KERN_INFO "do signal2: %lx %lx %ld [%lx]\n", regs->pc, regs->r1, - regs->r12, current_thread_info()->flags); -#endif - /* - * We want the common case to go fast, which - * is why we may in certain cases get here from - * kernel mode. Just return without doing anything - * if so. - */ - if (kernel_mode(regs)) - return 1; - - if (!oldset) - oldset = ¤t->blocked; - - signr = get_signal_to_deliver(&info, &ka, regs, NULL); - if (signr > 0) { - /* Whee! Actually deliver the signal. */ - if (in_syscall) - handle_restart(regs, &ka, 1); - handle_signal(signr, &ka, &info, oldset, regs); - return 1; - } - - if (in_syscall) - handle_restart(regs, NULL, 0); - - /* Did we come from a system call? */ - return 0; -} diff --git a/trunk/arch/microblaze/kernel/sys_microblaze.c b/trunk/arch/microblaze/kernel/sys_microblaze.c deleted file mode 100644 index ba0568c2cc1c..000000000000 --- a/trunk/arch/microblaze/kernel/sys_microblaze.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * Copyright (C) 2006 Atmark Techno, Inc. - * Yasushi SHOJI - * Tetsuya OHKAWA - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -/* - * sys_ipc() is the de-multiplexer for the SysV IPC calls.. - * - * This is really horribly ugly. This will be remove with new toolchain. - */ -asmlinkage int -sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth) -{ - int version, ret; - - version = call >> 16; /* hack for backward compatibility */ - call &= 0xffff; - - ret = -EINVAL; - switch (call) { - case SEMOP: - ret = sys_semop(first, (struct sembuf *)ptr, second); - break; - case SEMGET: - ret = sys_semget(first, second, third); - break; - case SEMCTL: - { - union semun fourth; - - if (!ptr) - break; - ret = (access_ok(VERIFY_READ, ptr, sizeof(long)) ? 0 : -EFAULT) - || (get_user(fourth.__pad, (void **)ptr)) ; - if (ret) - break; - ret = sys_semctl(first, second, third, fourth); - break; - } - case MSGSND: - ret = sys_msgsnd(first, (struct msgbuf *) ptr, second, third); - break; - case MSGRCV: - switch (version) { - case 0: { - struct ipc_kludge tmp; - - if (!ptr) - break; - ret = (access_ok(VERIFY_READ, ptr, sizeof(tmp)) - ? 0 : -EFAULT) || copy_from_user(&tmp, - (struct ipc_kludge *) ptr, sizeof(tmp)); - if (ret) - break; - ret = sys_msgrcv(first, tmp.msgp, second, tmp.msgtyp, - third); - break; - } - default: - ret = sys_msgrcv(first, (struct msgbuf *) ptr, - second, fifth, third); - break; - } - break; - case MSGGET: - ret = sys_msgget((key_t) first, second); - break; - case MSGCTL: - ret = sys_msgctl(first, second, (struct msqid_ds *) ptr); - break; - case SHMAT: - switch (version) { - default: { - ulong raddr; - ret = access_ok(VERIFY_WRITE, (ulong *) third, - sizeof(ulong)) ? 0 : -EFAULT; - if (ret) - break; - ret = do_shmat(first, (char *) ptr, second, &raddr); - if (ret) - break; - ret = put_user(raddr, (ulong *) third); - break; - } - case 1: /* iBCS2 emulator entry point */ - if (!segment_eq(get_fs(), get_ds())) - break; - ret = do_shmat(first, (char *) ptr, second, - (ulong *) third); - break; - } - break; - case SHMDT: - ret = sys_shmdt((char *)ptr); - break; - case SHMGET: - ret = sys_shmget(first, second, third); - break; - case SHMCTL: - ret = sys_shmctl(first, second, (struct shmid_ds *) ptr); - break; - } - return -EINVAL; -} - -asmlinkage int sys_vfork(struct pt_regs *regs) -{ - return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->r1, - regs, 0, NULL, NULL); -} - -asmlinkage int sys_clone(int flags, unsigned long stack, struct pt_regs *regs) -{ - if (!stack) - stack = regs->r1; - return do_fork(flags, stack, regs, 0, NULL, NULL); -} - -asmlinkage int sys_execve(char __user *filenamei, char __user *__user *argv, - char __user *__user *envp, struct pt_regs *regs) -{ - int error; - char *filename; - - filename = getname(filenamei); - error = PTR_ERR(filename); - if (IS_ERR(filename)) - goto out; - error = do_execve(filename, argv, envp, regs); - putname(filename); -out: - return error; -} - -asmlinkage unsigned long -sys_mmap2(unsigned long addr, size_t len, - unsigned long prot, unsigned long flags, - unsigned long fd, unsigned long pgoff) -{ - struct file *file = NULL; - int ret = -EBADF; - - flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - if (!(flags & MAP_ANONYMOUS)) { - file = fget(fd); - if (!file) { - printk(KERN_INFO "no fd in mmap\r\n"); - goto out; - } - } - - down_write(¤t->mm->mmap_sem); - ret = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); - up_write(¤t->mm->mmap_sem); - if (file) - fput(file); -out: - return ret; -} - -asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len, - unsigned long prot, unsigned long flags, - unsigned long fd, off_t offset) -{ - int err = -EINVAL; - - if (offset & ~PAGE_MASK) { - printk(KERN_INFO "no pagemask in mmap\r\n"); - goto out; - } - - err = sys_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); -out: - return err; -} - -/* - * Do a system call from kernel instead of calling sys_execve so we - * end up with proper pt_regs. - */ -int kernel_execve(const char *filename, char *const argv[], char *const envp[]) -{ - register const char *__a __asm__("r5") = filename; - register const void *__b __asm__("r6") = argv; - register const void *__c __asm__("r7") = envp; - register unsigned long __syscall __asm__("r12") = __NR_execve; - register unsigned long __ret __asm__("r3"); - __asm__ __volatile__ ("brki r14, 0x8" - : "=r" (__ret), "=r" (__syscall) - : "1" (__syscall), "r" (__a), "r" (__b), "r" (__c) - : "r4", "r8", "r9", - "r10", "r11", "r14", "cc", "memory"); - return __ret; -} diff --git a/trunk/arch/microblaze/kernel/syscall_table.S b/trunk/arch/microblaze/kernel/syscall_table.S deleted file mode 100644 index 529b0dbf4fe9..000000000000 --- a/trunk/arch/microblaze/kernel/syscall_table.S +++ /dev/null @@ -1,365 +0,0 @@ -ENTRY(sys_call_table) - .long sys_restart_syscall /* 0 - old "setup()" system call, - * used for restarting */ - .long sys_exit - .long sys_ni_syscall /* was fork */ - .long sys_read - .long sys_write - .long sys_open /* 5 */ - .long sys_close - .long sys_waitpid - .long sys_creat - .long sys_link - .long sys_unlink /* 10 */ - .long sys_execve_wrapper - .long sys_chdir - .long sys_time - .long sys_mknod - .long sys_chmod /* 15 */ - .long sys_lchown - .long sys_ni_syscall /* old break syscall holder */ - .long sys_ni_syscall /* old stat */ - .long sys_lseek - .long sys_getpid /* 20 */ - .long sys_mount - .long sys_oldumount - .long sys_setuid - .long sys_getuid - .long sys_stime /* 25 */ - .long sys_ptrace - .long sys_alarm - .long sys_ni_syscall /* oldfstat */ - .long sys_pause - .long sys_utime /* 30 */ - .long sys_ni_syscall /* old stty syscall holder */ - .long sys_ni_syscall /* old gtty syscall holder */ - .long sys_access - .long sys_nice - .long sys_ni_syscall /* 35 - old ftime syscall holder */ - .long sys_sync - .long sys_kill - .long sys_rename - .long sys_mkdir - .long sys_rmdir /* 40 */ - .long sys_dup - .long sys_pipe - .long sys_times - .long sys_ni_syscall /* old prof syscall holder */ - .long sys_brk /* 45 */ - .long sys_setgid - .long sys_getgid - .long sys_signal - .long sys_geteuid - .long sys_getegid /* 50 */ - .long sys_acct - .long sys_umount /* recycled never used phys() */ - .long sys_ni_syscall /* old lock syscall holder */ - .long sys_ioctl - .long sys_fcntl /* 55 */ - .long sys_ni_syscall /* old mpx syscall holder */ - .long sys_setpgid - .long sys_ni_syscall /* old ulimit syscall holder */ - .long sys_ni_syscall /* olduname */ - .long sys_umask /* 60 */ - .long sys_chroot - .long sys_ustat - .long sys_dup2 - .long sys_getppid - .long sys_getpgrp /* 65 */ - .long sys_setsid - .long sys_sigaction - .long sys_sgetmask - .long sys_ssetmask - .long sys_setreuid /* 70 */ - .long sys_setregid - .long sys_sigsuspend_wrapper - .long sys_sigpending - .long sys_sethostname - .long sys_setrlimit /* 75 */ - .long sys_ni_syscall /* old_getrlimit */ - .long sys_getrusage - .long sys_gettimeofday - .long sys_settimeofday - .long sys_getgroups /* 80 */ - .long sys_setgroups - .long sys_ni_syscall /* old_select */ - .long sys_symlink - .long sys_ni_syscall /* oldlstat */ - .long sys_readlink /* 85 */ - .long sys_uselib - .long sys_swapon - .long sys_reboot - .long sys_ni_syscall /* old_readdir */ - .long sys_mmap /* 90 */ /* old_mmap */ - .long sys_munmap - .long sys_truncate - .long sys_ftruncate - .long sys_fchmod - .long sys_fchown /* 95 */ - .long sys_getpriority - .long sys_setpriority - .long sys_ni_syscall /* old profil syscall holder */ - .long sys_statfs - .long sys_fstatfs /* 100 */ - .long sys_ni_syscall /* ioperm */ - .long sys_socketcall - .long sys_syslog /* operation with system console */ - .long sys_setitimer - .long sys_getitimer /* 105 */ - .long sys_newstat - .long sys_newlstat - .long sys_newfstat - .long sys_ni_syscall /* uname */ - .long sys_ni_syscall /* 110 */ /* iopl */ - .long sys_vhangup - .long sys_ni_syscall /* old "idle" system call */ - .long sys_ni_syscall /* old sys_vm86old */ - .long sys_wait4 - .long sys_swapoff /* 115 */ - .long sys_sysinfo - .long sys_ipc - .long sys_fsync - .long sys_sigreturn_wrapper - .long sys_clone_wrapper /* 120 */ - .long sys_setdomainname - .long sys_newuname - .long sys_ni_syscall /* modify_ldt */ - .long sys_adjtimex - .long sys_mprotect /* 125: sys_mprotect */ - .long sys_sigprocmask - .long sys_ni_syscall /* old "create_module" */ - .long sys_init_module - .long sys_delete_module - .long sys_ni_syscall /* 130: old "get_kernel_syms" */ - .long sys_quotactl - .long sys_getpgid - .long sys_fchdir - .long sys_bdflush - .long sys_sysfs /* 135 */ - .long sys_personality - .long sys_ni_syscall /* reserved for afs_syscall */ - .long sys_setfsuid - .long sys_setfsgid - .long sys_llseek /* 140 */ - .long sys_getdents - .long sys_select - .long sys_flock - .long sys_msync - .long sys_readv /* 145 */ - .long sys_writev - .long sys_getsid - .long sys_fdatasync - .long sys_sysctl - .long sys_mlock /* 150: sys_mlock */ - .long sys_munlock - .long sys_mlockall - .long sys_munlockall - .long sys_sched_setparam - .long sys_sched_getparam /* 155 */ - .long sys_sched_setscheduler - .long sys_sched_getscheduler - .long sys_sched_yield - .long sys_sched_get_priority_max - .long sys_sched_get_priority_min /* 160 */ - .long sys_sched_rr_get_interval - .long sys_nanosleep - .long sys_mremap - .long sys_setresuid - .long sys_getresuid /* 165 */ - .long sys_ni_syscall /* sys_vm86 */ - .long sys_ni_syscall /* Old sys_query_module */ - .long sys_poll - .long sys_nfsservctl - .long sys_setresgid /* 170 */ - .long sys_getresgid - .long sys_prctl - .long sys_rt_sigreturn_wrapper - .long sys_rt_sigaction - .long sys_rt_sigprocmask /* 175 */ - .long sys_rt_sigpending - .long sys_rt_sigtimedwait - .long sys_rt_sigqueueinfo - .long sys_rt_sigsuspend_wrapper - .long sys_pread64 /* 180 */ - .long sys_pwrite64 - .long sys_chown - .long sys_getcwd - .long sys_capget - .long sys_capset /* 185 */ - .long sys_ni_syscall /* sigaltstack */ - .long sys_sendfile - .long sys_ni_syscall /* reserved for streams1 */ - .long sys_ni_syscall /* reserved for streams2 */ - .long sys_vfork_wrapper /* 190 */ - .long sys_getrlimit - .long sys_mmap2 /* mmap2 */ - .long sys_truncate64 - .long sys_ftruncate64 - .long sys_stat64 /* 195 */ - .long sys_lstat64 - .long sys_fstat64 - .long sys_lchown - .long sys_getuid - .long sys_getgid /* 200 */ - .long sys_geteuid - .long sys_getegid - .long sys_setreuid - .long sys_setregid - .long sys_getgroups /* 205 */ - .long sys_setgroups - .long sys_fchown - .long sys_setresuid - .long sys_getresuid - .long sys_setresgid /* 210 */ - .long sys_getresgid - .long sys_chown - .long sys_setuid - .long sys_setgid - .long sys_setfsuid /* 215 */ - .long sys_setfsgid - .long sys_pivot_root - .long sys_mincore - .long sys_madvise - .long sys_getdents64 /* 220 */ - .long sys_fcntl64 - .long sys_ni_syscall /* reserved for TUX */ - .long sys_ni_syscall - .long sys_gettid - .long sys_readahead /* 225 */ - .long sys_setxattr - .long sys_lsetxattr - .long sys_fsetxattr - .long sys_getxattr - .long sys_lgetxattr /* 230 */ - .long sys_fgetxattr - .long sys_listxattr - .long sys_llistxattr - .long sys_flistxattr - .long sys_removexattr /* 235 */ - .long sys_lremovexattr - .long sys_fremovexattr - .long sys_tkill - .long sys_sendfile64 - .long sys_futex /* 240 */ - .long sys_sched_setaffinity - .long sys_sched_getaffinity - .long sys_ni_syscall /* set_thread_area */ - .long sys_ni_syscall /* get_thread_area */ - .long sys_io_setup /* 245 */ - .long sys_io_destroy - .long sys_io_getevents - .long sys_io_submit - .long sys_io_cancel - .long sys_fadvise64 /* 250 */ - .long sys_ni_syscall - .long sys_exit_group - .long sys_lookup_dcookie - .long sys_epoll_create - .long sys_epoll_ctl /* 255 */ - .long sys_epoll_wait - .long sys_remap_file_pages - .long sys_set_tid_address - .long sys_timer_create - .long sys_timer_settime /* 260 */ - .long sys_timer_gettime - .long sys_timer_getoverrun - .long sys_timer_delete - .long sys_clock_settime - .long sys_clock_gettime /* 265 */ - .long sys_clock_getres - .long sys_clock_nanosleep - .long sys_statfs64 - .long sys_fstatfs64 - .long sys_tgkill /* 270 */ - .long sys_utimes - .long sys_fadvise64_64 - .long sys_ni_syscall /* sys_vserver */ - .long sys_mbind - .long sys_get_mempolicy - .long sys_set_mempolicy - .long sys_mq_open - .long sys_mq_unlink - .long sys_mq_timedsend - .long sys_mq_timedreceive /* 280 */ - .long sys_mq_notify - .long sys_mq_getsetattr - .long sys_kexec_load - .long sys_waitid - .long sys_ni_syscall /* 285 */ /* available */ - .long sys_add_key - .long sys_request_key - .long sys_keyctl - .long sys_ioprio_set - .long sys_ioprio_get /* 290 */ - .long sys_inotify_init - .long sys_inotify_add_watch - .long sys_inotify_rm_watch - .long sys_ni_syscall /* sys_migrate_pages */ - .long sys_openat /* 295 */ - .long sys_mkdirat - .long sys_mknodat - .long sys_fchownat - .long sys_ni_syscall - .long sys_fstatat64 /* 300 */ - .long sys_unlinkat - .long sys_renameat - .long sys_linkat - .long sys_symlinkat - .long sys_readlinkat /* 305 */ - .long sys_fchmodat - .long sys_faccessat - .long sys_ni_syscall /* pselect6 */ - .long sys_ni_syscall /* sys_ppoll */ - .long sys_unshare /* 310 */ - .long sys_set_robust_list - .long sys_get_robust_list - .long sys_splice - .long sys_sync_file_range - .long sys_tee /* 315 */ - .long sys_vmsplice - .long sys_move_pages - .long sys_getcpu - .long sys_epoll_pwait - .long sys_utimensat /* 320 */ - .long sys_signalfd - .long sys_timerfd_create - .long sys_eventfd - .long sys_fallocate - .long sys_semtimedop /* 325 */ - .long sys_timerfd_settime - .long sys_timerfd_gettime - .long sys_semctl - .long sys_semget - .long sys_semop /* 330 */ - .long sys_msgctl - .long sys_msgget - .long sys_msgrcv - .long sys_msgsnd - .long sys_shmat /* 335 */ - .long sys_shmctl - .long sys_shmdt - .long sys_shmget - .long sys_signalfd4 /* new syscall */ - .long sys_eventfd2 /* 340 */ - .long sys_epoll_create1 - .long sys_dup3 - .long sys_pipe2 - .long sys_inotify_init1 - .long sys_socket /* 345 */ - .long sys_socketpair - .long sys_bind - .long sys_listen - .long sys_accept - .long sys_connect /* 350 */ - .long sys_getsockname - .long sys_getpeername - .long sys_sendto - .long sys_send - .long sys_recvfrom /* 355 */ - .long sys_recv - .long sys_setsockopt - .long sys_getsockopt - .long sys_shutdown - .long sys_sendmsg /* 360 */ - .long sys_recvmsg - .long sys_ni_syscall diff --git a/trunk/arch/microblaze/kernel/timer.c b/trunk/arch/microblaze/kernel/timer.c deleted file mode 100644 index 05a497eefd78..000000000000 --- a/trunk/arch/microblaze/kernel/timer.c +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CONFIG_SELFMOD_TIMER -#include -#define TIMER_BASE BARRIER_BASE_ADDR -#else -static unsigned int timer_baseaddr; -#define TIMER_BASE timer_baseaddr -#endif - -#define TCSR0 (0x00) -#define TLR0 (0x04) -#define TCR0 (0x08) -#define TCSR1 (0x10) -#define TLR1 (0x14) -#define TCR1 (0x18) - -#define TCSR_MDT (1<<0) -#define TCSR_UDT (1<<1) -#define TCSR_GENT (1<<2) -#define TCSR_CAPT (1<<3) -#define TCSR_ARHT (1<<4) -#define TCSR_LOAD (1<<5) -#define TCSR_ENIT (1<<6) -#define TCSR_ENT (1<<7) -#define TCSR_TINT (1<<8) -#define TCSR_PWMA (1<<9) -#define TCSR_ENALL (1<<10) - -static inline void microblaze_timer0_stop(void) -{ - out_be32(TIMER_BASE + TCSR0, in_be32(TIMER_BASE + TCSR0) & ~TCSR_ENT); -} - -static inline void microblaze_timer0_start_periodic(unsigned long load_val) -{ - if (!load_val) - load_val = 1; - out_be32(TIMER_BASE + TLR0, load_val); /* loading value to timer reg */ - - /* load the initial value */ - out_be32(TIMER_BASE + TCSR0, TCSR_LOAD); - - /* see timer data sheet for detail - * !ENALL - don't enable 'em all - * !PWMA - disable pwm - * TINT - clear interrupt status - * ENT- enable timer itself - * EINT - enable interrupt - * !LOAD - clear the bit to let go - * ARHT - auto reload - * !CAPT - no external trigger - * !GENT - no external signal - * UDT - set the timer as down counter - * !MDT0 - generate mode - */ - out_be32(TIMER_BASE + TCSR0, - TCSR_TINT|TCSR_ENIT|TCSR_ENT|TCSR_ARHT|TCSR_UDT); -} - -static inline void microblaze_timer0_start_oneshot(unsigned long load_val) -{ - if (!load_val) - load_val = 1; - out_be32(TIMER_BASE + TLR0, load_val); /* loading value to timer reg */ - - /* load the initial value */ - out_be32(TIMER_BASE + TCSR0, TCSR_LOAD); - - out_be32(TIMER_BASE + TCSR0, - TCSR_TINT|TCSR_ENIT|TCSR_ENT|TCSR_ARHT|TCSR_UDT); -} - -static int microblaze_timer_set_next_event(unsigned long delta, - struct clock_event_device *dev) -{ - pr_debug("%s: next event, delta %x\n", __func__, (u32)delta); - microblaze_timer0_start_oneshot(delta); - return 0; -} - -static void microblaze_timer_set_mode(enum clock_event_mode mode, - struct clock_event_device *evt) -{ - switch (mode) { - case CLOCK_EVT_MODE_PERIODIC: - printk(KERN_INFO "%s: periodic\n", __func__); - microblaze_timer0_start_periodic(cpuinfo.freq_div_hz); - break; - case CLOCK_EVT_MODE_ONESHOT: - printk(KERN_INFO "%s: oneshot\n", __func__); - break; - case CLOCK_EVT_MODE_UNUSED: - printk(KERN_INFO "%s: unused\n", __func__); - break; - case CLOCK_EVT_MODE_SHUTDOWN: - printk(KERN_INFO "%s: shutdown\n", __func__); - microblaze_timer0_stop(); - break; - case CLOCK_EVT_MODE_RESUME: - printk(KERN_INFO "%s: resume\n", __func__); - break; - } -} - -static struct clock_event_device clockevent_microblaze_timer = { - .name = "microblaze_clockevent", - .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC, - .shift = 24, - .rating = 300, - .set_next_event = microblaze_timer_set_next_event, - .set_mode = microblaze_timer_set_mode, -}; - -static inline void timer_ack(void) -{ - out_be32(TIMER_BASE + TCSR0, in_be32(TIMER_BASE + TCSR0)); -} - -static irqreturn_t timer_interrupt(int irq, void *dev_id) -{ - struct clock_event_device *evt = &clockevent_microblaze_timer; -#ifdef CONFIG_HEART_BEAT - heartbeat(); -#endif - timer_ack(); - evt->event_handler(evt); - return IRQ_HANDLED; -} - -static struct irqaction timer_irqaction = { - .handler = timer_interrupt, - .flags = IRQF_DISABLED | IRQF_TIMER, - .name = "timer", - .dev_id = &clockevent_microblaze_timer, -}; - -static __init void microblaze_clockevent_init(void) -{ - clockevent_microblaze_timer.mult = - div_sc(cpuinfo.cpu_clock_freq, NSEC_PER_SEC, - clockevent_microblaze_timer.shift); - clockevent_microblaze_timer.max_delta_ns = - clockevent_delta2ns((u32)~0, &clockevent_microblaze_timer); - clockevent_microblaze_timer.min_delta_ns = - clockevent_delta2ns(1, &clockevent_microblaze_timer); - clockevent_microblaze_timer.cpumask = cpumask_of(0); - clockevents_register_device(&clockevent_microblaze_timer); -} - -static cycle_t microblaze_read(void) -{ - /* reading actual value of timer 1 */ - return (cycle_t) (in_be32(TIMER_BASE + TCR1)); -} - -static struct clocksource clocksource_microblaze = { - .name = "microblaze_clocksource", - .rating = 300, - .read = microblaze_read, - .mask = CLOCKSOURCE_MASK(32), - .shift = 24, /* I can shift it */ - .flags = CLOCK_SOURCE_IS_CONTINUOUS, -}; - -static int __init microblaze_clocksource_init(void) -{ - clocksource_microblaze.mult = - clocksource_hz2mult(cpuinfo.cpu_clock_freq, - clocksource_microblaze.shift); - if (clocksource_register(&clocksource_microblaze)) - panic("failed to register clocksource"); - - /* stop timer1 */ - out_be32(TIMER_BASE + TCSR1, in_be32(TIMER_BASE + TCSR1) & ~TCSR_ENT); - /* start timer1 - up counting without interrupt */ - out_be32(TIMER_BASE + TCSR1, TCSR_TINT|TCSR_ENT|TCSR_ARHT); - return 0; -} - -void __init time_init(void) -{ - u32 irq, i = 0; - u32 timer_num = 1; - struct device_node *timer = NULL; -#ifdef CONFIG_SELFMOD_TIMER - unsigned int timer_baseaddr = 0; - int arr_func[] = { - (int)µblaze_read, - (int)&timer_interrupt, - (int)µblaze_clocksource_init, - (int)µblaze_timer_set_mode, - (int)µblaze_timer_set_next_event, - 0 - }; -#endif - char *timer_list[] = { - "xlnx,xps-timer-1.00.a", - "xlnx,opb-timer-1.00.b", - "xlnx,opb-timer-1.00.a", - NULL - }; - - for (i = 0; timer_list[i] != NULL; i++) { - timer = of_find_compatible_node(NULL, NULL, timer_list[i]); - if (timer) - break; - } - - timer_baseaddr = *(int *) of_get_property(timer, "reg", NULL); - timer_baseaddr = (unsigned long) ioremap(timer_baseaddr, PAGE_SIZE); - irq = *(int *) of_get_property(timer, "interrupts", NULL); - timer_num = - *(int *) of_get_property(timer, "xlnx,one-timer-only", NULL); - if (timer_num) { - printk(KERN_EMERG "Please enable two timers in HW\n"); - BUG(); - } - -#ifdef CONFIG_SELFMOD_TIMER - selfmod_function((int *) arr_func, timer_baseaddr); -#endif - printk(KERN_INFO "%s #0 at 0x%08x, irq=%d\n", - timer_list[i], timer_baseaddr, irq); - - cpuinfo.freq_div_hz = cpuinfo.cpu_clock_freq / HZ; - - setup_irq(irq, &timer_irqaction); -#ifdef CONFIG_HEART_BEAT - setup_heartbeat(); -#endif - microblaze_clocksource_init(); - microblaze_clockevent_init(); -} diff --git a/trunk/arch/microblaze/kernel/traps.c b/trunk/arch/microblaze/kernel/traps.c deleted file mode 100644 index fbdc533c61e3..000000000000 --- a/trunk/arch/microblaze/kernel/traps.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2007-2009 Michal Simek - * Copyright (C) 2007-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include - -#include -#include - -void trap_init(void) -{ - __enable_hw_exceptions(); -} - -void __bad_xchg(volatile void *ptr, int size) -{ - printk(KERN_INFO "xchg: bad data size: pc 0x%p, ptr 0x%p, size %d\n", - __builtin_return_address(0), ptr, size); - BUG(); -} -EXPORT_SYMBOL(__bad_xchg); - -static int kstack_depth_to_print = 24; - -static int __init kstack_setup(char *s) -{ - kstack_depth_to_print = strict_strtoul(s, 0, 0); - - return 1; -} -__setup("kstack=", kstack_setup); - -void show_trace(struct task_struct *task, unsigned long *stack) -{ - unsigned long addr; - - if (!stack) - stack = (unsigned long *)&stack; - - printk(KERN_NOTICE "Call Trace: "); -#ifdef CONFIG_KALLSYMS - printk(KERN_NOTICE "\n"); -#endif - while (!kstack_end(stack)) { - addr = *stack++; - /* - * If the address is either in the text segment of the - * kernel, or in the region which contains vmalloc'ed - * memory, it *may* be the address of a calling - * routine; if so, print it so that someone tracing - * down the cause of the crash will be able to figure - * out the call path that was taken. - */ - if (kernel_text_address(addr)) - print_ip_sym(addr); - } - printk(KERN_NOTICE "\n"); - - if (!task) - task = current; - - debug_show_held_locks(task); -} - -void show_stack(struct task_struct *task, unsigned long *sp) -{ - unsigned long *stack; - int i; - - if (sp == NULL) { - if (task) - sp = (unsigned long *) ((struct thread_info *) - (task->stack))->cpu_context.r1; - else - sp = (unsigned long *)&sp; - } - - stack = sp; - - printk(KERN_INFO "\nStack:\n "); - - for (i = 0; i < kstack_depth_to_print; i++) { - if (kstack_end(sp)) - break; - if (i && ((i % 8) == 0)) - printk("\n "); - printk("%08lx ", *sp++); - } - printk("\n"); - show_trace(task, stack); -} - -void dump_stack(void) -{ - show_stack(NULL, NULL); -} -EXPORT_SYMBOL(dump_stack); diff --git a/trunk/arch/microblaze/kernel/vmlinux.lds.S b/trunk/arch/microblaze/kernel/vmlinux.lds.S deleted file mode 100644 index 840385e51291..000000000000 --- a/trunk/arch/microblaze/kernel/vmlinux.lds.S +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") -OUTPUT_ARCH(microblaze) -ENTRY(_start) - -#include - -jiffies = jiffies_64 + 4; - -SECTIONS { - . = CONFIG_KERNEL_BASE_ADDR; - - .text : { - _text = . ; - _stext = . ; - *(.text .text.*) - *(.fixup) - - *(.exitcall.exit) - SCHED_TEXT - LOCK_TEXT - KPROBES_TEXT - . = ALIGN (4) ; - _etext = . ; - } - - . = ALIGN (4) ; - _fdt_start = . ; /* place for fdt blob */ - . = . + 0x4000; - _fdt_end = . ; - - . = ALIGN(16); - RODATA - . = ALIGN(16); - __ex_table : { - __start___ex_table = .; - *(__ex_table) - __stop___ex_table = .; - } - - /* - * sdata2 section can go anywhere, but must be word aligned - * and SDA2_BASE must point to the middle of it - */ - .sdata2 : { - _ssrw = .; - . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ - *(.sdata2) - . = ALIGN(8); - _essrw = .; - _ssrw_size = _essrw - _ssrw; - _KERNEL_SDA2_BASE_ = _ssrw + (_ssrw_size / 2); - } - - _sdata = . ; - .data ALIGN (4096) : { /* page aligned when MMU used - origin 0x4 */ - *(.data) - } - . = ALIGN(32); - .data.cacheline_aligned : { *(.data.cacheline_aligned) } - _edata = . ; - - /* Reserve some low RAM for r0 based memory references */ - . = ALIGN(0x4) ; - r0_ram = . ; - . = . + 4096; /* a page should be enough */ - - /* The initial task */ - . = ALIGN(8192); - .data.init_task : { *(.data.init_task) } - - /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ - . = ALIGN(8); - .sdata : { - _ssro = .; - *(.sdata) - } - - .sbss : { - _ssbss = .; - *(.sbss) - _esbss = .; - _essro = .; - _ssro_size = _essro - _ssro ; - _KERNEL_SDA_BASE_ = _ssro + (_ssro_size / 2) ; - } - - __init_begin = .; - - . = ALIGN(4096); - .init.text : { - _sinittext = . ; - *(.init.text) - *(.exit.text) - *(.exit.data) - _einittext = .; - } - - .init.data : { *(.init.data) } - - . = ALIGN(4); - .init.ivt : { - __ivt_start = .; - *(.init.ivt) - __ivt_end = .; - } - - .init.setup : { - __setup_start = .; - *(.init.setup) - __setup_end = .; - } - - .initcall.init : { - __initcall_start = .; - INITCALLS - __initcall_end = .; - } - - .con_initcall.init : { - __con_initcall_start = .; - *(.con_initcall.init) - __con_initcall_end = .; - } - - __init_end_before_initramfs = .; - - .init.ramfs ALIGN(4096) : { - __initramfs_start = .; - *(.init.ramfs) - __initramfs_end = .; - . = ALIGN(4); - LONG(0); -/* - * FIXME this can break initramfs for MMU. - * Pad init.ramfs up to page boundary, - * so that __init_end == __bss_start. This will make image.elf - * consistent with the image.bin - */ - /* . = ALIGN(4096); */ - } - __init_end = .; - - .bss ALIGN (4096) : { /* page aligned when MMU used */ - __bss_start = . ; - *(.bss*) - *(COMMON) - . = ALIGN (4) ; - __bss_stop = . ; - _ebss = . ; - } - . = ALIGN(4096); - _end = .; -} diff --git a/trunk/arch/microblaze/lib/Makefile b/trunk/arch/microblaze/lib/Makefile deleted file mode 100644 index d27126bf306a..000000000000 --- a/trunk/arch/microblaze/lib/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# Makefile -# - -lib-y := memset.o checksum.o - -ifeq ($(CONFIG_OPT_LIB_ASM),y) -lib-y += fastcopy.o -else -lib-y += memcpy.o memmove.o -endif - -lib-y += uaccess.o diff --git a/trunk/arch/microblaze/lib/checksum.c b/trunk/arch/microblaze/lib/checksum.c deleted file mode 100644 index 809340070a13..000000000000 --- a/trunk/arch/microblaze/lib/checksum.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * - * INET An implementation of the TCP/IP protocol suite for the LINUX - * operating system. INET is implemented using the BSD Socket - * interface as the means of communication with the user level. - * - * IP/TCP/UDP checksumming routines - * - * Authors: Jorge Cwik, - * Arnt Gulbrandsen, - * Tom May, - * Andreas Schwab, - * Lots of code moved from tcp.c and ip.c; see those files - * for more names. - * - * 03/02/96 Jes Sorensen, Andreas Schwab, Roman Hodek: - * Fixed some nasty bugs, causing some horrible crashes. - * A: At some points, the sum (%0) was used as - * length-counter instead of the length counter - * (%1). Thanks to Roman Hodek for pointing this out. - * B: GCC seems to mess up if one uses too many - * data-registers to hold input values and one tries to - * specify d0 and d1 as scratch registers. Letting gcc - * choose these registers itself solves the problem. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -/* Revised by Kenneth Albanowski for m68knommu. Basic problem: unaligned access - kills, so most of the assembly has to go. */ - -#include -#include -#include - -static inline unsigned short from32to16(unsigned long x) -{ - /* add up 16-bit and 16-bit for 16+c bit */ - x = (x & 0xffff) + (x >> 16); - /* add up carry.. */ - x = (x & 0xffff) + (x >> 16); - return x; -} - -static unsigned int do_csum(const unsigned char *buff, int len) -{ - int odd, count; - unsigned long result = 0; - - if (len <= 0) - goto out; - odd = 1 & (unsigned long) buff; - if (odd) { - result = *buff; - len--; - buff++; - } - count = len >> 1; /* nr of 16-bit words.. */ - if (count) { - if (2 & (unsigned long) buff) { - result += *(unsigned short *) buff; - count--; - len -= 2; - buff += 2; - } - count >>= 1; /* nr of 32-bit words.. */ - if (count) { - unsigned long carry = 0; - do { - unsigned long w = *(unsigned long *) buff; - count--; - buff += 4; - result += carry; - result += w; - carry = (w > result); - } while (count); - result += carry; - result = (result & 0xffff) + (result >> 16); - } - if (len & 2) { - result += *(unsigned short *) buff; - buff += 2; - } - } - if (len & 1) - result += (*buff << 8); - result = from32to16(result); - if (odd) - result = ((result >> 8) & 0xff) | ((result & 0xff) << 8); -out: - return result; -} - -/* - * This is a version of ip_compute_csum() optimized for IP headers, - * which always checksum on 4 octet boundaries. - */ -__sum16 ip_fast_csum(const void *iph, unsigned int ihl) -{ - return (__force __sum16)~do_csum(iph, ihl*4); -} - -/* - * computes the checksum of a memory block at buff, length len, - * and adds in "sum" (32-bit) - * - * returns a 32-bit number suitable for feeding into itself - * or csum_tcpudp_magic - * - * this function must be called with even lengths, except - * for the last fragment, which may be odd - * - * it's best to have buff aligned on a 32-bit boundary - */ -__wsum csum_partial(const void *buff, int len, __wsum sum) -{ - unsigned int result = do_csum(buff, len); - - /* add in old sum, and carry.. */ - result += sum; - if (sum > result) - result += 1; - return result; -} -EXPORT_SYMBOL(csum_partial); - -/* - * this routine is used for miscellaneous IP-like checksums, mainly - * in icmp.c - */ -__sum16 ip_compute_csum(const unsigned char *buff, int len) -{ - return ~do_csum(buff, len); -} -EXPORT_SYMBOL(ip_compute_csum); - -/* - * copy from fs while checksumming, otherwise like csum_partial - */ -__wsum -csum_partial_copy_from_user(const char __user *src, char *dst, int len, - int sum, int *csum_err) -{ - if (csum_err) - *csum_err = 0; - memcpy(dst, src, len); - return csum_partial(dst, len, sum); -} -EXPORT_SYMBOL(csum_partial_copy_from_user); - -/* - * copy from ds while checksumming, otherwise like csum_partial - */ -__wsum -csum_partial_copy(const char *src, char *dst, int len, int sum) -{ - memcpy(dst, src, len); - return csum_partial(dst, len, sum); -} -EXPORT_SYMBOL(csum_partial_copy); diff --git a/trunk/arch/microblaze/lib/fastcopy.S b/trunk/arch/microblaze/lib/fastcopy.S deleted file mode 100644 index 02e3ab4eddf3..000000000000 --- a/trunk/arch/microblaze/lib/fastcopy.S +++ /dev/null @@ -1,662 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2008 Jim Law - Iris LP All rights reserved. - * - * 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 Jim Law - * - * intended to replace: - * memcpy in memcpy.c and - * memmove in memmove.c - * ... in arch/microblaze/lib - * - * - * assly_fastcopy.S - * - * Attempt at quicker memcpy and memmove for MicroBlaze - * Input : Operand1 in Reg r5 - destination address - * Operand2 in Reg r6 - source address - * Operand3 in Reg r7 - number of bytes to transfer - * Output: Result in Reg r3 - starting destinaition address - * - * - * Explanation: - * Perform (possibly unaligned) copy of a block of memory - * between mem locations with size of xfer spec'd in bytes - */ - -#include - - .globl memcpy - .ent memcpy - -memcpy: -fast_memcpy_ascending: - /* move d to return register as value of function */ - addi r3, r5, 0 - - addi r4, r0, 4 /* n = 4 */ - cmpu r4, r4, r7 /* n = c - n (unsigned) */ - blti r4, a_xfer_end /* if n < 0, less than one word to transfer */ - - /* transfer first 0~3 bytes to get aligned dest address */ - andi r4, r5, 3 /* n = d & 3 */ - /* if zero, destination already aligned */ - beqi r4, a_dalign_done - /* n = 4 - n (yields 3, 2, 1 transfers for 1, 2, 3 addr offset) */ - rsubi r4, r4, 4 - rsub r7, r4, r7 /* c = c - n adjust c */ - -a_xfer_first_loop: - /* if no bytes left to transfer, transfer the bulk */ - beqi r4, a_dalign_done - lbui r11, r6, 0 /* h = *s */ - sbi r11, r5, 0 /* *d = h */ - addi r6, r6, 1 /* s++ */ - addi r5, r5, 1 /* d++ */ - brid a_xfer_first_loop /* loop */ - addi r4, r4, -1 /* n-- (IN DELAY SLOT) */ - -a_dalign_done: - addi r4, r0, 32 /* n = 32 */ - cmpu r4, r4, r7 /* n = c - n (unsigned) */ - /* if n < 0, less than one block to transfer */ - blti r4, a_block_done - -a_block_xfer: - andi r4, r7, 0xffffffe0 /* n = c & ~31 */ - rsub r7, r4, r7 /* c = c - n */ - - andi r9, r6, 3 /* t1 = s & 3 */ - /* if temp != 0, unaligned transfers needed */ - bnei r9, a_block_unaligned - -a_block_aligned: - lwi r9, r6, 0 /* t1 = *(s + 0) */ - lwi r10, r6, 4 /* t2 = *(s + 4) */ - lwi r11, r6, 8 /* t3 = *(s + 8) */ - lwi r12, r6, 12 /* t4 = *(s + 12) */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - swi r10, r5, 4 /* *(d + 4) = t2 */ - swi r11, r5, 8 /* *(d + 8) = t3 */ - swi r12, r5, 12 /* *(d + 12) = t4 */ - lwi r9, r6, 16 /* t1 = *(s + 16) */ - lwi r10, r6, 20 /* t2 = *(s + 20) */ - lwi r11, r6, 24 /* t3 = *(s + 24) */ - lwi r12, r6, 28 /* t4 = *(s + 28) */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - swi r10, r5, 20 /* *(d + 20) = t2 */ - swi r11, r5, 24 /* *(d + 24) = t3 */ - swi r12, r5, 28 /* *(d + 28) = t4 */ - addi r6, r6, 32 /* s = s + 32 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, a_block_aligned /* while (n) loop */ - addi r5, r5, 32 /* d = d + 32 (IN DELAY SLOT) */ - bri a_block_done - -a_block_unaligned: - andi r8, r6, 0xfffffffc /* as = s & ~3 */ - add r6, r6, r4 /* s = s + n */ - lwi r11, r8, 0 /* h = *(as + 0) */ - - addi r9, r9, -1 - beqi r9, a_block_u1 /* t1 was 1 => 1 byte offset */ - addi r9, r9, -1 - beqi r9, a_block_u2 /* t1 was 2 => 2 byte offset */ - -a_block_u3: - bslli r11, r11, 24 /* h = h << 24 */ -a_bu3_loop: - lwi r12, r8, 4 /* v = *(as + 4) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 8 /* v = *(as + 8) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 4 /* *(d + 4) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 12 /* v = *(as + 12) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 8 /* *(d + 8) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 16 /* v = *(as + 16) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 12 /* *(d + 12) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 20 /* v = *(as + 20) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 24 /* v = *(as + 24) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 20 /* *(d + 20) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 28 /* v = *(as + 28) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 24 /* *(d + 24) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - lwi r12, r8, 32 /* v = *(as + 32) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - addi r8, r8, 32 /* as = as + 32 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, a_bu3_loop /* while (n) loop */ - addi r5, r5, 32 /* d = d + 32 (IN DELAY SLOT) */ - bri a_block_done - -a_block_u1: - bslli r11, r11, 8 /* h = h << 8 */ -a_bu1_loop: - lwi r12, r8, 4 /* v = *(as + 4) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 8 /* v = *(as + 8) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 4 /* *(d + 4) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 12 /* v = *(as + 12) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 8 /* *(d + 8) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 16 /* v = *(as + 16) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 12 /* *(d + 12) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 20 /* v = *(as + 20) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 24 /* v = *(as + 24) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 20 /* *(d + 20) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 28 /* v = *(as + 28) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 24 /* *(d + 24) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - lwi r12, r8, 32 /* v = *(as + 32) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - addi r8, r8, 32 /* as = as + 32 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, a_bu1_loop /* while (n) loop */ - addi r5, r5, 32 /* d = d + 32 (IN DELAY SLOT) */ - bri a_block_done - -a_block_u2: - bslli r11, r11, 16 /* h = h << 16 */ -a_bu2_loop: - lwi r12, r8, 4 /* v = *(as + 4) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 8 /* v = *(as + 8) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 4 /* *(d + 4) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 12 /* v = *(as + 12) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 8 /* *(d + 8) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 16 /* v = *(as + 16) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 12 /* *(d + 12) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 20 /* v = *(as + 20) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 24 /* v = *(as + 24) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 20 /* *(d + 20) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 28 /* v = *(as + 28) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 24 /* *(d + 24) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - lwi r12, r8, 32 /* v = *(as + 32) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - addi r8, r8, 32 /* as = as + 32 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, a_bu2_loop /* while (n) loop */ - addi r5, r5, 32 /* d = d + 32 (IN DELAY SLOT) */ - -a_block_done: - addi r4, r0, 4 /* n = 4 */ - cmpu r4, r4, r7 /* n = c - n (unsigned) */ - blti r4, a_xfer_end /* if n < 0, less than one word to transfer */ - -a_word_xfer: - andi r4, r7, 0xfffffffc /* n = c & ~3 */ - addi r10, r0, 0 /* offset = 0 */ - - andi r9, r6, 3 /* t1 = s & 3 */ - /* if temp != 0, unaligned transfers needed */ - bnei r9, a_word_unaligned - -a_word_aligned: - lw r9, r6, r10 /* t1 = *(s+offset) */ - sw r9, r5, r10 /* *(d+offset) = t1 */ - addi r4, r4,-4 /* n-- */ - bneid r4, a_word_aligned /* loop */ - addi r10, r10, 4 /* offset++ (IN DELAY SLOT) */ - - bri a_word_done - -a_word_unaligned: - andi r8, r6, 0xfffffffc /* as = s & ~3 */ - lwi r11, r8, 0 /* h = *(as + 0) */ - addi r8, r8, 4 /* as = as + 4 */ - - addi r9, r9, -1 - beqi r9, a_word_u1 /* t1 was 1 => 1 byte offset */ - addi r9, r9, -1 - beqi r9, a_word_u2 /* t1 was 2 => 2 byte offset */ - -a_word_u3: - bslli r11, r11, 24 /* h = h << 24 */ -a_wu3_loop: - lw r12, r8, r10 /* v = *(as + offset) */ - bsrli r9, r12, 8 /* t1 = v >> 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - sw r9, r5, r10 /* *(d + offset) = t1 */ - bslli r11, r12, 24 /* h = v << 24 */ - addi r4, r4,-4 /* n = n - 4 */ - bneid r4, a_wu3_loop /* while (n) loop */ - addi r10, r10, 4 /* offset = ofset + 4 (IN DELAY SLOT) */ - - bri a_word_done - -a_word_u1: - bslli r11, r11, 8 /* h = h << 8 */ -a_wu1_loop: - lw r12, r8, r10 /* v = *(as + offset) */ - bsrli r9, r12, 24 /* t1 = v >> 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - sw r9, r5, r10 /* *(d + offset) = t1 */ - bslli r11, r12, 8 /* h = v << 8 */ - addi r4, r4,-4 /* n = n - 4 */ - bneid r4, a_wu1_loop /* while (n) loop */ - addi r10, r10, 4 /* offset = ofset + 4 (IN DELAY SLOT) */ - - bri a_word_done - -a_word_u2: - bslli r11, r11, 16 /* h = h << 16 */ -a_wu2_loop: - lw r12, r8, r10 /* v = *(as + offset) */ - bsrli r9, r12, 16 /* t1 = v >> 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - sw r9, r5, r10 /* *(d + offset) = t1 */ - bslli r11, r12, 16 /* h = v << 16 */ - addi r4, r4,-4 /* n = n - 4 */ - bneid r4, a_wu2_loop /* while (n) loop */ - addi r10, r10, 4 /* offset = ofset + 4 (IN DELAY SLOT) */ - -a_word_done: - add r5, r5, r10 /* d = d + offset */ - add r6, r6, r10 /* s = s + offset */ - rsub r7, r10, r7 /* c = c - offset */ - -a_xfer_end: -a_xfer_end_loop: - beqi r7, a_done /* while (c) */ - lbui r9, r6, 0 /* t1 = *s */ - addi r6, r6, 1 /* s++ */ - sbi r9, r5, 0 /* *d = t1 */ - addi r7, r7, -1 /* c-- */ - brid a_xfer_end_loop /* loop */ - addi r5, r5, 1 /* d++ (IN DELAY SLOT) */ - -a_done: - rtsd r15, 8 - nop - -.end memcpy -/*----------------------------------------------------------------------------*/ - .globl memmove - .ent memmove - -memmove: - cmpu r4, r5, r6 /* n = s - d */ - bgei r4,fast_memcpy_ascending - -fast_memcpy_descending: - /* move d to return register as value of function */ - addi r3, r5, 0 - - add r5, r5, r7 /* d = d + c */ - add r6, r6, r7 /* s = s + c */ - - addi r4, r0, 4 /* n = 4 */ - cmpu r4, r4, r7 /* n = c - n (unsigned) */ - blti r4,d_xfer_end /* if n < 0, less than one word to transfer */ - - /* transfer first 0~3 bytes to get aligned dest address */ - andi r4, r5, 3 /* n = d & 3 */ - /* if zero, destination already aligned */ - beqi r4,d_dalign_done - rsub r7, r4, r7 /* c = c - n adjust c */ - -d_xfer_first_loop: - /* if no bytes left to transfer, transfer the bulk */ - beqi r4,d_dalign_done - addi r6, r6, -1 /* s-- */ - addi r5, r5, -1 /* d-- */ - lbui r11, r6, 0 /* h = *s */ - sbi r11, r5, 0 /* *d = h */ - brid d_xfer_first_loop /* loop */ - addi r4, r4, -1 /* n-- (IN DELAY SLOT) */ - -d_dalign_done: - addi r4, r0, 32 /* n = 32 */ - cmpu r4, r4, r7 /* n = c - n (unsigned) */ - /* if n < 0, less than one block to transfer */ - blti r4, d_block_done - -d_block_xfer: - andi r4, r7, 0xffffffe0 /* n = c & ~31 */ - rsub r7, r4, r7 /* c = c - n */ - - andi r9, r6, 3 /* t1 = s & 3 */ - /* if temp != 0, unaligned transfers needed */ - bnei r9, d_block_unaligned - -d_block_aligned: - addi r6, r6, -32 /* s = s - 32 */ - addi r5, r5, -32 /* d = d - 32 */ - lwi r9, r6, 28 /* t1 = *(s + 28) */ - lwi r10, r6, 24 /* t2 = *(s + 24) */ - lwi r11, r6, 20 /* t3 = *(s + 20) */ - lwi r12, r6, 16 /* t4 = *(s + 16) */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - swi r10, r5, 24 /* *(d + 24) = t2 */ - swi r11, r5, 20 /* *(d + 20) = t3 */ - swi r12, r5, 16 /* *(d + 16) = t4 */ - lwi r9, r6, 12 /* t1 = *(s + 12) */ - lwi r10, r6, 8 /* t2 = *(s + 8) */ - lwi r11, r6, 4 /* t3 = *(s + 4) */ - lwi r12, r6, 0 /* t4 = *(s + 0) */ - swi r9, r5, 12 /* *(d + 12) = t1 */ - swi r10, r5, 8 /* *(d + 8) = t2 */ - swi r11, r5, 4 /* *(d + 4) = t3 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, d_block_aligned /* while (n) loop */ - swi r12, r5, 0 /* *(d + 0) = t4 (IN DELAY SLOT) */ - bri d_block_done - -d_block_unaligned: - andi r8, r6, 0xfffffffc /* as = s & ~3 */ - rsub r6, r4, r6 /* s = s - n */ - lwi r11, r8, 0 /* h = *(as + 0) */ - - addi r9, r9, -1 - beqi r9,d_block_u1 /* t1 was 1 => 1 byte offset */ - addi r9, r9, -1 - beqi r9,d_block_u2 /* t1 was 2 => 2 byte offset */ - -d_block_u3: - bsrli r11, r11, 8 /* h = h >> 8 */ -d_bu3_loop: - addi r8, r8, -32 /* as = as - 32 */ - addi r5, r5, -32 /* d = d - 32 */ - lwi r12, r8, 28 /* v = *(as + 28) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 24 /* v = *(as + 24) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 24 /* *(d + 24) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 20 /* v = *(as + 20) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 20 /* *(d + 20) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 16 /* v = *(as + 16) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 12 /* v = *(as + 12) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 12 /* *(d + 112) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 8 /* v = *(as + 8) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 8 /* *(d + 8) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 4 /* v = *(as + 4) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 4 /* *(d + 4) = t1 */ - bsrli r11, r12, 8 /* h = v >> 8 */ - lwi r12, r8, 0 /* v = *(as + 0) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, d_bu3_loop /* while (n) loop */ - bsrli r11, r12, 8 /* h = v >> 8 (IN DELAY SLOT) */ - bri d_block_done - -d_block_u1: - bsrli r11, r11, 24 /* h = h >> 24 */ -d_bu1_loop: - addi r8, r8, -32 /* as = as - 32 */ - addi r5, r5, -32 /* d = d - 32 */ - lwi r12, r8, 28 /* v = *(as + 28) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 24 /* v = *(as + 24) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 24 /* *(d + 24) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 20 /* v = *(as + 20) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 20 /* *(d + 20) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 16 /* v = *(as + 16) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 12 /* v = *(as + 12) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 12 /* *(d + 112) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 8 /* v = *(as + 8) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 8 /* *(d + 8) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 4 /* v = *(as + 4) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 4 /* *(d + 4) = t1 */ - bsrli r11, r12, 24 /* h = v >> 24 */ - lwi r12, r8, 0 /* v = *(as + 0) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, d_bu1_loop /* while (n) loop */ - bsrli r11, r12, 24 /* h = v >> 24 (IN DELAY SLOT) */ - bri d_block_done - -d_block_u2: - bsrli r11, r11, 16 /* h = h >> 16 */ -d_bu2_loop: - addi r8, r8, -32 /* as = as - 32 */ - addi r5, r5, -32 /* d = d - 32 */ - lwi r12, r8, 28 /* v = *(as + 28) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 28 /* *(d + 28) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 24 /* v = *(as + 24) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 24 /* *(d + 24) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 20 /* v = *(as + 20) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 20 /* *(d + 20) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 16 /* v = *(as + 16) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 16 /* *(d + 16) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 12 /* v = *(as + 12) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 12 /* *(d + 112) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 8 /* v = *(as + 8) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 8 /* *(d + 8) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 4 /* v = *(as + 4) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 4 /* *(d + 4) = t1 */ - bsrli r11, r12, 16 /* h = v >> 16 */ - lwi r12, r8, 0 /* v = *(as + 0) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - swi r9, r5, 0 /* *(d + 0) = t1 */ - addi r4, r4, -32 /* n = n - 32 */ - bneid r4, d_bu2_loop /* while (n) loop */ - bsrli r11, r12, 16 /* h = v >> 16 (IN DELAY SLOT) */ - -d_block_done: - addi r4, r0, 4 /* n = 4 */ - cmpu r4, r4, r7 /* n = c - n (unsigned) */ - blti r4,d_xfer_end /* if n < 0, less than one word to transfer */ - -d_word_xfer: - andi r4, r7, 0xfffffffc /* n = c & ~3 */ - rsub r5, r4, r5 /* d = d - n */ - rsub r6, r4, r6 /* s = s - n */ - rsub r7, r4, r7 /* c = c - n */ - - andi r9, r6, 3 /* t1 = s & 3 */ - /* if temp != 0, unaligned transfers needed */ - bnei r9, d_word_unaligned - -d_word_aligned: - addi r4, r4,-4 /* n-- */ - lw r9, r6, r4 /* t1 = *(s+n) */ - bneid r4, d_word_aligned /* loop */ - sw r9, r5, r4 /* *(d+n) = t1 (IN DELAY SLOT) */ - - bri d_word_done - -d_word_unaligned: - andi r8, r6, 0xfffffffc /* as = s & ~3 */ - lw r11, r8, r4 /* h = *(as + n) */ - - addi r9, r9, -1 - beqi r9,d_word_u1 /* t1 was 1 => 1 byte offset */ - addi r9, r9, -1 - beqi r9,d_word_u2 /* t1 was 2 => 2 byte offset */ - -d_word_u3: - bsrli r11, r11, 8 /* h = h >> 8 */ -d_wu3_loop: - addi r4, r4,-4 /* n = n - 4 */ - lw r12, r8, r4 /* v = *(as + n) */ - bslli r9, r12, 24 /* t1 = v << 24 */ - or r9, r11, r9 /* t1 = h | t1 */ - sw r9, r5, r4 /* *(d + n) = t1 */ - bneid r4, d_wu3_loop /* while (n) loop */ - bsrli r11, r12, 8 /* h = v >> 8 (IN DELAY SLOT) */ - - bri d_word_done - -d_word_u1: - bsrli r11, r11, 24 /* h = h >> 24 */ -d_wu1_loop: - addi r4, r4,-4 /* n = n - 4 */ - lw r12, r8, r4 /* v = *(as + n) */ - bslli r9, r12, 8 /* t1 = v << 8 */ - or r9, r11, r9 /* t1 = h | t1 */ - sw r9, r5, r4 /* *(d + n) = t1 */ - bneid r4, d_wu1_loop /* while (n) loop */ - bsrli r11, r12, 24 /* h = v >> 24 (IN DELAY SLOT) */ - - bri d_word_done - -d_word_u2: - bsrli r11, r11, 16 /* h = h >> 16 */ -d_wu2_loop: - addi r4, r4,-4 /* n = n - 4 */ - lw r12, r8, r4 /* v = *(as + n) */ - bslli r9, r12, 16 /* t1 = v << 16 */ - or r9, r11, r9 /* t1 = h | t1 */ - sw r9, r5, r4 /* *(d + n) = t1 */ - bneid r4, d_wu2_loop /* while (n) loop */ - bsrli r11, r12, 16 /* h = v >> 16 (IN DELAY SLOT) */ - -d_word_done: - -d_xfer_end: -d_xfer_end_loop: - beqi r7, a_done /* while (c) */ - addi r6, r6, -1 /* s-- */ - lbui r9, r6, 0 /* t1 = *s */ - addi r5, r5, -1 /* d-- */ - sbi r9, r5, 0 /* *d = t1 */ - brid d_xfer_end_loop /* loop */ - addi r7, r7, -1 /* c-- (IN DELAY SLOT) */ - -d_done: - rtsd r15, 8 - nop - -.end memmove diff --git a/trunk/arch/microblaze/lib/memcpy.c b/trunk/arch/microblaze/lib/memcpy.c deleted file mode 100644 index 5880119c4487..000000000000 --- a/trunk/arch/microblaze/lib/memcpy.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * Reasonably optimised generic C-code for memcpy on Microblaze - * This is generic C code to do efficient, alignment-aware memcpy. - * - * It is based on demo code originally Copyright 2001 by Intel Corp, taken from - * http://www.embedded.com/showArticle.jhtml?articleID=19205567 - * - * Attempts were made, unsuccesfully, to contact the original - * author of this code (Michael Morrow, Intel). Below is the original - * copyright notice. - * - * This software has been developed by Intel Corporation. - * Intel specifically disclaims all warranties, express or - * implied, and all liability, including consequential and - * other indirect damages, for the use of this program, including - * liability for infringement of any proprietary rights, - * and including the warranties of merchantability and fitness - * for a particular purpose. Intel does not assume any - * responsibility for and errors which may appear in this program - * not any responsibility to update it. - */ - -#include -#include -#include -#include - -#include -#include - -#ifdef __HAVE_ARCH_MEMCPY -void *memcpy(void *v_dst, const void *v_src, __kernel_size_t c) -{ - const char *src = v_src; - char *dst = v_dst; -#ifndef CONFIG_OPT_LIB_FUNCTION - /* Simple, byte oriented memcpy. */ - while (c--) - *dst++ = *src++; - - return v_dst; -#else - /* The following code tries to optimize the copy by using unsigned - * alignment. This will work fine if both source and destination are - * aligned on the same boundary. However, if they are aligned on - * different boundaries shifts will be necessary. This might result in - * bad performance on MicroBlaze systems without a barrel shifter. - */ - const uint32_t *i_src; - uint32_t *i_dst; - - if (c >= 4) { - unsigned value, buf_hold; - - /* Align the dstination to a word boundry. */ - /* This is done in an endian independant manner. */ - switch ((unsigned long)dst & 3) { - case 1: - *dst++ = *src++; - --c; - case 2: - *dst++ = *src++; - --c; - case 3: - *dst++ = *src++; - --c; - } - - i_dst = (void *)dst; - - /* Choose a copy scheme based on the source */ - /* alignment relative to dstination. */ - switch ((unsigned long)src & 3) { - case 0x0: /* Both byte offsets are aligned */ - i_src = (const void *)src; - - for (; c >= 4; c -= 4) - *i_dst++ = *i_src++; - - src = (const void *)i_src; - break; - case 0x1: /* Unaligned - Off by 1 */ - /* Word align the source */ - i_src = (const void *) ((unsigned)src & ~3); - - /* Load the holding buffer */ - buf_hold = *i_src++ << 8; - - for (; c >= 4; c -= 4) { - value = *i_src++; - *i_dst++ = buf_hold | value >> 24; - buf_hold = value << 8; - } - - /* Realign the source */ - src = (const void *)i_src; - src -= 3; - break; - case 0x2: /* Unaligned - Off by 2 */ - /* Word align the source */ - i_src = (const void *) ((unsigned)src & ~3); - - /* Load the holding buffer */ - buf_hold = *i_src++ << 16; - - for (; c >= 4; c -= 4) { - value = *i_src++; - *i_dst++ = buf_hold | value >> 16; - buf_hold = value << 16; - } - - /* Realign the source */ - src = (const void *)i_src; - src -= 2; - break; - case 0x3: /* Unaligned - Off by 3 */ - /* Word align the source */ - i_src = (const void *) ((unsigned)src & ~3); - - /* Load the holding buffer */ - buf_hold = *i_src++ << 24; - - for (; c >= 4; c -= 4) { - value = *i_src++; - *i_dst++ = buf_hold | value >> 8; - buf_hold = value << 24; - } - - /* Realign the source */ - src = (const void *)i_src; - src -= 1; - break; - } - dst = (void *)i_dst; - } - - /* Finish off any remaining bytes */ - /* simple fast copy, ... unless a cache boundry is crossed */ - switch (c) { - case 3: - *dst++ = *src++; - case 2: - *dst++ = *src++; - case 1: - *dst++ = *src++; - } - - return v_dst; -#endif -} -EXPORT_SYMBOL(memcpy); -#endif /* __HAVE_ARCH_MEMCPY */ - -void *cacheable_memcpy(void *d, const void *s, __kernel_size_t c) -{ - return memcpy(d, s, c); -} diff --git a/trunk/arch/microblaze/lib/memmove.c b/trunk/arch/microblaze/lib/memmove.c deleted file mode 100644 index d4e9f49a71f7..000000000000 --- a/trunk/arch/microblaze/lib/memmove.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * Reasonably optimised generic C-code for memcpy on Microblaze - * This is generic C code to do efficient, alignment-aware memmove. - * - * It is based on demo code originally Copyright 2001 by Intel Corp, taken from - * http://www.embedded.com/showArticle.jhtml?articleID=19205567 - * - * Attempts were made, unsuccesfully, to contact the original - * author of this code (Michael Morrow, Intel). Below is the original - * copyright notice. - * - * This software has been developed by Intel Corporation. - * Intel specifically disclaims all warranties, express or - * implied, and all liability, including consequential and - * other indirect damages, for the use of this program, including - * liability for infringement of any proprietary rights, - * and including the warranties of merchantability and fitness - * for a particular purpose. Intel does not assume any - * responsibility for and errors which may appear in this program - * not any responsibility to update it. - */ - -#include -#include -#include -#include -#include - -#ifdef __HAVE_ARCH_MEMMOVE -void *memmove(void *v_dst, const void *v_src, __kernel_size_t c) -{ - const char *src = v_src; - char *dst = v_dst; - -#ifdef CONFIG_OPT_LIB_FUNCTION - const uint32_t *i_src; - uint32_t *i_dst; -#endif - - if (!c) - return v_dst; - - /* Use memcpy when source is higher than dest */ - if (v_dst <= v_src) - return memcpy(v_dst, v_src, c); - -#ifndef CONFIG_OPT_LIB_FUNCTION - /* copy backwards, from end to beginning */ - src += c; - dst += c; - - /* Simple, byte oriented memmove. */ - while (c--) - *--dst = *--src; - - return v_dst; -#else - /* The following code tries to optimize the copy by using unsigned - * alignment. This will work fine if both source and destination are - * aligned on the same boundary. However, if they are aligned on - * different boundaries shifts will be necessary. This might result in - * bad performance on MicroBlaze systems without a barrel shifter. - */ - /* FIXME this part needs more test */ - /* Do a descending copy - this is a bit trickier! */ - dst += c; - src += c; - - if (c >= 4) { - unsigned value, buf_hold; - - /* Align the destination to a word boundry. */ - /* This is done in an endian independant manner. */ - - switch ((unsigned long)dst & 3) { - case 3: - *--dst = *--src; - --c; - case 2: - *--dst = *--src; - --c; - case 1: - *--dst = *--src; - --c; - } - - i_dst = (void *)dst; - /* Choose a copy scheme based on the source */ - /* alignment relative to dstination. */ - switch ((unsigned long)src & 3) { - case 0x0: /* Both byte offsets are aligned */ - - i_src = (const void *)src; - - for (; c >= 4; c -= 4) - *--i_dst = *--i_src; - - src = (const void *)i_src; - break; - case 0x1: /* Unaligned - Off by 1 */ - /* Word align the source */ - i_src = (const void *) (((unsigned)src + 4) & ~3); - - /* Load the holding buffer */ - buf_hold = *--i_src >> 24; - - for (; c >= 4; c -= 4) { - value = *--i_src; - *--i_dst = buf_hold << 8 | value; - buf_hold = value >> 24; - } - - /* Realign the source */ - src = (const void *)i_src; - src += 1; - break; - case 0x2: /* Unaligned - Off by 2 */ - /* Word align the source */ - i_src = (const void *) (((unsigned)src + 4) & ~3); - - /* Load the holding buffer */ - buf_hold = *--i_src >> 16; - - for (; c >= 4; c -= 4) { - value = *--i_src; - *--i_dst = buf_hold << 16 | value; - buf_hold = value >> 16; - } - - /* Realign the source */ - src = (const void *)i_src; - src += 2; - break; - case 0x3: /* Unaligned - Off by 3 */ - /* Word align the source */ - i_src = (const void *) (((unsigned)src + 4) & ~3); - - /* Load the holding buffer */ - buf_hold = *--i_src >> 8; - - for (; c >= 4; c -= 4) { - value = *--i_src; - *--i_dst = buf_hold << 24 | value; - buf_hold = value >> 8; - } - - /* Realign the source */ - src = (const void *)i_src; - src += 3; - break; - } - dst = (void *)i_dst; - } - - /* simple fast copy, ... unless a cache boundry is crossed */ - /* Finish off any remaining bytes */ - switch (c) { - case 4: - *--dst = *--src; - case 3: - *--dst = *--src; - case 2: - *--dst = *--src; - case 1: - *--dst = *--src; - } - return v_dst; -#endif -} -EXPORT_SYMBOL(memmove); -#endif /* __HAVE_ARCH_MEMMOVE */ diff --git a/trunk/arch/microblaze/lib/memset.c b/trunk/arch/microblaze/lib/memset.c deleted file mode 100644 index 941dc8f94b03..000000000000 --- a/trunk/arch/microblaze/lib/memset.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2008-2009 Michal Simek - * Copyright (C) 2008-2009 PetaLogix - * Copyright (C) 2007 John Williams - * - * Reasonably optimised generic C-code for memset on Microblaze - * This is generic C code to do efficient, alignment-aware memcpy. - * - * It is based on demo code originally Copyright 2001 by Intel Corp, taken from - * http://www.embedded.com/showArticle.jhtml?articleID=19205567 - * - * Attempts were made, unsuccesfully, to contact the original - * author of this code (Michael Morrow, Intel). Below is the original - * copyright notice. - * - * This software has been developed by Intel Corporation. - * Intel specifically disclaims all warranties, express or - * implied, and all liability, including consequential and - * other indirect damages, for the use of this program, including - * liability for infringement of any proprietary rights, - * and including the warranties of merchantability and fitness - * for a particular purpose. Intel does not assume any - * responsibility for and errors which may appear in this program - * not any responsibility to update it. - */ - -#include -#include -#include -#include -#include - -#ifdef __HAVE_ARCH_MEMSET -void *memset(void *v_src, int c, __kernel_size_t n) -{ - - char *src = v_src; -#ifdef CONFIG_OPT_LIB_FUNCTION - uint32_t *i_src; - uint32_t w32; -#endif - /* Truncate c to 8 bits */ - c = (c & 0xFF); - -#ifdef CONFIG_OPT_LIB_FUNCTION - /* Make a repeating word out of it */ - w32 = c; - w32 |= w32 << 8; - w32 |= w32 << 16; - - if (n >= 4) { - /* Align the destination to a word boundary */ - /* This is done in an endian independant manner */ - switch ((unsigned) src & 3) { - case 1: - *src++ = c; - --n; - case 2: - *src++ = c; - --n; - case 3: - *src++ = c; - --n; - } - - i_src = (void *)src; - - /* Do as many full-word copies as we can */ - for (; n >= 4; n -= 4) - *i_src++ = w32; - - src = (void *)i_src; - } -#endif - /* Simple, byte oriented memset or the rest of count. */ - while (n--) - *src++ = c; - - return v_src; -} -EXPORT_SYMBOL(memset); -#endif /* __HAVE_ARCH_MEMSET */ diff --git a/trunk/arch/microblaze/lib/uaccess.c b/trunk/arch/microblaze/lib/uaccess.c deleted file mode 100644 index 8eb9df5a26c9..000000000000 --- a/trunk/arch/microblaze/lib/uaccess.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include - -#include - -long strnlen_user(const char __user *src, long count) -{ - return strlen(src) + 1; -} - -#define __do_strncpy_from_user(dst, src, count, res) \ - do { \ - char *tmp; \ - strncpy(dst, src, count); \ - for (tmp = dst; *tmp && count > 0; tmp++, count--) \ - ; \ - res = (tmp - dst); \ - } while (0) - -long __strncpy_from_user(char *dst, const char __user *src, long count) -{ - long res; - __do_strncpy_from_user(dst, src, count, res); - return res; -} - -long strncpy_from_user(char *dst, const char __user *src, long count) -{ - long res = -EFAULT; - if (access_ok(VERIFY_READ, src, 1)) - __do_strncpy_from_user(dst, src, count, res); - return res; -} diff --git a/trunk/arch/microblaze/mm/Makefile b/trunk/arch/microblaze/mm/Makefile deleted file mode 100644 index bf9e4479a1fd..000000000000 --- a/trunk/arch/microblaze/mm/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# -# Makefile -# - -obj-y := init.o diff --git a/trunk/arch/microblaze/mm/init.c b/trunk/arch/microblaze/mm/init.c deleted file mode 100644 index b0c8213cd6cf..000000000000 --- a/trunk/arch/microblaze/mm/init.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright (C) 2007-2008 Michal Simek - * Copyright (C) 2006 Atmark Techno, Inc. - * - * 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. - */ - -#include -#include -#include -#include -#include /* mem_init */ -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -unsigned int __page_offset; -/* EXPORT_SYMBOL(__page_offset); */ - -char *klimit = _end; - -/* - * Initialize the bootmem system and give it all the memory we - * have available. - */ -unsigned int memory_start; -unsigned int memory_end; /* due to mm/nommu.c */ -unsigned int memory_size; - -/* - * paging_init() sets up the page tables - in fact we've already done this. - */ -static void __init paging_init(void) -{ - int i; - unsigned long zones_size[MAX_NR_ZONES]; - - /* - * old: we can DMA to/from any address.put all page into ZONE_DMA - * We use only ZONE_NORMAL - */ - zones_size[ZONE_NORMAL] = max_mapnr; - - /* every other zones are empty */ - for (i = 1; i < MAX_NR_ZONES; i++) - zones_size[i] = 0; - - free_area_init(zones_size); -} - -void __init setup_memory(void) -{ - int i; - unsigned long map_size; - u32 kernel_align_start, kernel_align_size; - - /* Find main memory where is the kernel */ - for (i = 0; i < lmb.memory.cnt; i++) { - memory_start = (u32) lmb.memory.region[i].base; - memory_end = (u32) lmb.memory.region[i].base - + (u32) lmb.memory.region[i].size; - if ((memory_start <= (u32)_text) && - ((u32)_text <= memory_end)) { - memory_size = memory_end - memory_start; - PAGE_OFFSET = memory_start; - printk(KERN_INFO "%s: Main mem: 0x%x-0x%x, " - "size 0x%08x\n", __func__, memory_start, - memory_end, memory_size); - break; - } - } - - if (!memory_start || !memory_end) { - panic("%s: Missing memory setting 0x%08x-0x%08x\n", - __func__, memory_start, memory_end); - } - - /* reservation of region where is the kernel */ - kernel_align_start = PAGE_DOWN((u32)_text); - /* ALIGN can be remove because _end in vmlinux.lds.S is align */ - kernel_align_size = PAGE_UP((u32)klimit) - kernel_align_start; - lmb_reserve(kernel_align_start, kernel_align_size); - printk(KERN_INFO "%s: kernel addr=0x%08x-0x%08x size=0x%08x\n", - __func__, kernel_align_start, kernel_align_start - + kernel_align_size, kernel_align_size); - - /* - * Kernel: - * start: base phys address of kernel - page align - * end: base phys address of kernel - page align - * - * min_low_pfn - the first page (mm/bootmem.c - node_boot_start) - * max_low_pfn - * max_mapnr - the first unused page (mm/bootmem.c - node_low_pfn) - * num_physpages - number of all pages - */ - - /* memory start is from the kernel end (aligned) to higher addr */ - min_low_pfn = memory_start >> PAGE_SHIFT; /* minimum for allocation */ - /* RAM is assumed contiguous */ - num_physpages = max_mapnr = memory_size >> PAGE_SHIFT; - max_pfn = max_low_pfn = memory_end >> PAGE_SHIFT; - - printk(KERN_INFO "%s: max_mapnr: %#lx\n", __func__, max_mapnr); - printk(KERN_INFO "%s: min_low_pfn: %#lx\n", __func__, min_low_pfn); - printk(KERN_INFO "%s: max_low_pfn: %#lx\n", __func__, max_low_pfn); - - /* - * Find an area to use for the bootmem bitmap. - * We look for the first area which is at least - * 128kB in length (128kB is enough for a bitmap - * for 4GB of memory, using 4kB pages), plus 1 page - * (in case the address isn't page-aligned). - */ - map_size = init_bootmem_node(NODE_DATA(0), PFN_UP(TOPHYS((u32)_end)), - min_low_pfn, max_low_pfn); - - lmb_reserve(PFN_UP(TOPHYS((u32)_end)) << PAGE_SHIFT, map_size); - - /* free bootmem is whole main memory */ - free_bootmem(memory_start, memory_size); - - /* reserve allocate blocks */ - for (i = 0; i < lmb.reserved.cnt; i++) { - pr_debug("reserved %d - 0x%08x-0x%08x\n", i, - (u32) lmb.reserved.region[i].base, - (u32) lmb_size_bytes(&lmb.reserved, i)); - reserve_bootmem(lmb.reserved.region[i].base, - lmb_size_bytes(&lmb.reserved, i) - 1, BOOTMEM_DEFAULT); - } - paging_init(); -} - -void free_init_pages(char *what, unsigned long begin, unsigned long end) -{ - unsigned long addr; - - for (addr = begin; addr < end; addr += PAGE_SIZE) { - ClearPageReserved(virt_to_page(addr)); - init_page_count(virt_to_page(addr)); - memset((void *)addr, 0xcc, PAGE_SIZE); - free_page(addr); - totalram_pages++; - } - printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10); -} - -#ifdef CONFIG_BLK_DEV_INITRD -void free_initrd_mem(unsigned long start, unsigned long end) -{ - int pages = 0; - for (; start < end; start += PAGE_SIZE) { - ClearPageReserved(virt_to_page(start)); - init_page_count(virt_to_page(start)); - free_page(start); - totalram_pages++; - pages++; - } - printk(KERN_NOTICE "Freeing initrd memory: %dk freed\n", pages); -} -#endif - -void free_initmem(void) -{ - free_init_pages("unused kernel memory", - (unsigned long)(&__init_begin), - (unsigned long)(&__init_end)); -} - -/* FIXME from arch/powerpc/mm/mem.c*/ -void show_mem(void) -{ - printk(KERN_NOTICE "%s\n", __func__); -} - -void __init mem_init(void) -{ - high_memory = (void *)__va(memory_end); - /* this will put all memory onto the freelists */ - totalram_pages += free_all_bootmem(); - - printk(KERN_INFO "Memory: %luk/%luk available\n", - (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), - num_physpages << (PAGE_SHIFT-10)); -} - -/* Check against bounds of physical memory */ -int ___range_ok(unsigned long addr, unsigned long size) -{ - return ((addr < memory_start) || - ((addr + size) > memory_end)); -} diff --git a/trunk/arch/microblaze/platform/Kconfig.platform b/trunk/arch/microblaze/platform/Kconfig.platform deleted file mode 100644 index 8e9b4752d3ff..000000000000 --- a/trunk/arch/microblaze/platform/Kconfig.platform +++ /dev/null @@ -1,85 +0,0 @@ -# For a description of the syntax of this configuration file, -# see Documentation/kbuild/kconfig-language.txt. -# -# Platform selection Kconfig menu for MicroBlaze targets -# - -menu "Platform options" -choice - prompt "Platform" - default PLATFORM_MICROBLAZE_AUTO - help - Choose which hardware board/platform you are targeting. - -config PLATFORM_GENERIC - bool "Generic" - help - Choose this option for the Generic platform. - -endchoice - -config SELFMOD - bool "Use self modified code for intc/timer" - depends on EXPERIMENTAL && NO_MMU - default n - help - This choice enables self-modified code for interrupt controller - and timer. - -config SELFMOD_INTC - bool "Use self modified code for intc" - depends on SELFMOD - default y - help - This choice enables self-modified code for interrupt controller. - -config SELFMOD_TIMER - bool "Use self modified code for timer" - depends on SELFMOD - default y - help - This choice enables self-modified code for timer. - -config OPT_LIB_FUNCTION - bool "Optimalized lib function" - default y - help - Allows turn on optimalized library function (memcpy and memmove). - They are optimized by using word alignment. This will work - fine if both source and destination are aligned on the same - boundary. However, if they are aligned on different boundaries - shifts will be necessary. This might result in bad performance - on MicroBlaze systems without a barrel shifter. - -config OPT_LIB_ASM - bool "Optimalized lib function ASM" - depends on OPT_LIB_FUNCTION - default n - help - Allows turn on optimalized library function (memcpy and memmove). - Function are written in asm code. - -# This is still a bit broken - disabling for now JW 20070504 -config ALLOW_EDIT_AUTO - bool "Permit Display/edit of Kconfig.auto platform settings" - default n - help - Allows the editing of auto-generated platform settings from - the Kconfig.auto file. Obviously this does not change the - underlying hardware, so be very careful if you go editing - these settings. - - Also, if you enable this, and edit various Kconfig.auto - settings, YOUR CHANGES WILL BE LOST if you then disable it - again. You have been warned! - - If unsure, say no. - -comment "Automatic platform settings from Kconfig.auto" - depends on ALLOW_EDIT_AUTO - -if PLATFORM_GENERIC=y - source "arch/microblaze/platform/generic/Kconfig.auto" -endif - -endmenu diff --git a/trunk/arch/microblaze/platform/Makefile b/trunk/arch/microblaze/platform/Makefile deleted file mode 100644 index ea1b75cc5775..000000000000 --- a/trunk/arch/microblaze/platform/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# -# Makefile for arch/microblaze/platform directory -# -#obj-$(CONFIG_PLATFORM_GENERIC) += generic/ - -obj-y += platform.o diff --git a/trunk/arch/microblaze/platform/generic/Kconfig.auto b/trunk/arch/microblaze/platform/generic/Kconfig.auto deleted file mode 100644 index fbca22d9c8b9..000000000000 --- a/trunk/arch/microblaze/platform/generic/Kconfig.auto +++ /dev/null @@ -1,62 +0,0 @@ -# -# (C) Copyright 2007 Michal Simek -# -# Michal SIMEK -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, -# MA 02111-1307 USA -# - -# Definitions for MICROBLAZE0 -comment "Definitions for MICROBLAZE0" - depends on ALLOW_EDIT_AUTO - -config KERNEL_BASE_ADDR - hex "Physical address where Linux Kernel is" - default "0x90000000" - help - BASE Address for kernel - -config XILINX_MICROBLAZE0_FAMILY - string "Targetted FPGA family" if ALLOW_EDIT_AUTO - default "virtex5" - -config XILINX_MICROBLAZE0_USE_MSR_INSTR - int "USE_MSR_INSTR range (0:1)" if ALLOW_EDIT_AUTO - default 1 - -config XILINX_MICROBLAZE0_USE_PCMP_INSTR - int "USE_PCMP_INSTR range (0:1)" if ALLOW_EDIT_AUTO - default 1 - -config XILINX_MICROBLAZE0_USE_BARREL - int "USE_BARREL range (0:1)" if ALLOW_EDIT_AUTO - default 1 - -config XILINX_MICROBLAZE0_USE_DIV - int "USE_DIV range (0:1)" if ALLOW_EDIT_AUTO - default 1 - -config XILINX_MICROBLAZE0_USE_HW_MUL - int "USE_HW_MUL values (0=NONE, 1=MUL32, 2=MUL64)" if ALLOW_EDIT_AUTO - default 2 - -config XILINX_MICROBLAZE0_USE_FPU - int "USE_FPU values (0=NONE, 1=BASIC, 2=EXTENDED)" if ALLOW_EDIT_AUTO - default 2 - -config XILINX_MICROBLAZE0_HW_VER - string "Core version number" if ALLOW_EDIT_AUTO - default 7.10.d diff --git a/trunk/arch/microblaze/platform/generic/Makefile b/trunk/arch/microblaze/platform/generic/Makefile deleted file mode 100644 index 9a8b1bd3fa6d..000000000000 --- a/trunk/arch/microblaze/platform/generic/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -# -# Empty Makefile to keep make clean happy -# diff --git a/trunk/arch/microblaze/platform/generic/system.dts b/trunk/arch/microblaze/platform/generic/system.dts deleted file mode 100644 index 29993f62b30a..000000000000 --- a/trunk/arch/microblaze/platform/generic/system.dts +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Device Tree Generator version: 1.1 - * - * (C) Copyright 2007-2008 Xilinx, Inc. - * (C) Copyright 2007-2009 Michal Simek - * - * Michal SIMEK - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - * CAUTION: This file is automatically generated by libgen. - * Version: Xilinx EDK 10.1.03 EDK_K_SP3.6 - * - * XPS project directory: Xilinx-ML505-ll_temac-sgdma-MMU-FDT-edk101 - */ - -/dts-v1/; -/ { - #address-cells = <1>; - #size-cells = <1>; - compatible = "xlnx,microblaze"; - model = "testing"; - DDR2_SDRAM: memory@90000000 { - device_type = "memory"; - reg = < 0x90000000 0x10000000 >; - } ; - chosen { - bootargs = "console=ttyUL0,115200 highres=on"; - linux,stdout-path = "/plb@0/serial@84000000"; - } ; - cpus { - #address-cells = <1>; - #cpus = <0x1>; - #size-cells = <0>; - microblaze_0: cpu@0 { - clock-frequency = <125000000>; - compatible = "xlnx,microblaze-7.10.d"; - d-cache-baseaddr = <0x90000000>; - d-cache-highaddr = <0x9fffffff>; - d-cache-line-size = <0x10>; - d-cache-size = <0x2000>; - device_type = "cpu"; - i-cache-baseaddr = <0x90000000>; - i-cache-highaddr = <0x9fffffff>; - i-cache-line-size = <0x10>; - i-cache-size = <0x2000>; - model = "microblaze,7.10.d"; - reg = <0>; - timebase-frequency = <125000000>; - xlnx,addr-tag-bits = <0xf>; - xlnx,allow-dcache-wr = <0x1>; - xlnx,allow-icache-wr = <0x1>; - xlnx,area-optimized = <0x0>; - xlnx,cache-byte-size = <0x2000>; - xlnx,d-lmb = <0x1>; - xlnx,d-opb = <0x0>; - xlnx,d-plb = <0x1>; - xlnx,data-size = <0x20>; - xlnx,dcache-addr-tag = <0xf>; - xlnx,dcache-always-used = <0x1>; - xlnx,dcache-byte-size = <0x2000>; - xlnx,dcache-line-len = <0x4>; - xlnx,dcache-use-fsl = <0x1>; - xlnx,debug-enabled = <0x1>; - xlnx,div-zero-exception = <0x1>; - xlnx,dopb-bus-exception = <0x0>; - xlnx,dynamic-bus-sizing = <0x1>; - xlnx,edge-is-positive = <0x1>; - xlnx,family = "virtex5"; - xlnx,fpu-exception = <0x1>; - xlnx,fsl-data-size = <0x20>; - xlnx,fsl-exception = <0x0>; - xlnx,fsl-links = <0x0>; - xlnx,i-lmb = <0x1>; - xlnx,i-opb = <0x0>; - xlnx,i-plb = <0x1>; - xlnx,icache-always-used = <0x1>; - xlnx,icache-line-len = <0x4>; - xlnx,icache-use-fsl = <0x1>; - xlnx,ill-opcode-exception = <0x1>; - xlnx,instance = "microblaze_0"; - xlnx,interconnect = <0x1>; - xlnx,interrupt-is-edge = <0x0>; - xlnx,iopb-bus-exception = <0x0>; - xlnx,mmu-dtlb-size = <0x4>; - xlnx,mmu-itlb-size = <0x2>; - xlnx,mmu-tlb-access = <0x3>; - xlnx,mmu-zones = <0x10>; - xlnx,number-of-pc-brk = <0x1>; - xlnx,number-of-rd-addr-brk = <0x0>; - xlnx,number-of-wr-addr-brk = <0x0>; - xlnx,opcode-0x0-illegal = <0x1>; - xlnx,pvr = <0x2>; - xlnx,pvr-user1 = <0x0>; - xlnx,pvr-user2 = <0x0>; - xlnx,reset-msr = <0x0>; - xlnx,sco = <0x0>; - xlnx,unaligned-exceptions = <0x1>; - xlnx,use-barrel = <0x1>; - xlnx,use-dcache = <0x1>; - xlnx,use-div = <0x1>; - xlnx,use-ext-brk = <0x1>; - xlnx,use-ext-nm-brk = <0x1>; - xlnx,use-extended-fsl-instr = <0x0>; - xlnx,use-fpu = <0x2>; - xlnx,use-hw-mul = <0x2>; - xlnx,use-icache = <0x1>; - xlnx,use-interrupt = <0x1>; - xlnx,use-mmu = <0x3>; - xlnx,use-msr-instr = <0x1>; - xlnx,use-pcmp-instr = <0x1>; - } ; - } ; - mb_plb: plb@0 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "xlnx,plb-v46-1.03.a", "simple-bus"; - ranges ; - FLASH: flash@a0000000 { - bank-width = <2>; - compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash"; - reg = < 0xa0000000 0x2000000 >; - xlnx,family = "virtex5"; - xlnx,include-datawidth-matching-0 = <0x1>; - xlnx,include-datawidth-matching-1 = <0x0>; - xlnx,include-datawidth-matching-2 = <0x0>; - xlnx,include-datawidth-matching-3 = <0x0>; - xlnx,include-negedge-ioregs = <0x0>; - xlnx,include-plb-ipif = <0x1>; - xlnx,include-wrbuf = <0x1>; - xlnx,max-mem-width = <0x10>; - xlnx,mch-native-dwidth = <0x20>; - xlnx,mch-plb-clk-period-ps = <0x1f40>; - xlnx,mch-splb-awidth = <0x20>; - xlnx,mch0-accessbuf-depth = <0x10>; - xlnx,mch0-protocol = <0x0>; - xlnx,mch0-rddatabuf-depth = <0x10>; - xlnx,mch1-accessbuf-depth = <0x10>; - xlnx,mch1-protocol = <0x0>; - xlnx,mch1-rddatabuf-depth = <0x10>; - xlnx,mch2-accessbuf-depth = <0x10>; - xlnx,mch2-protocol = <0x0>; - xlnx,mch2-rddatabuf-depth = <0x10>; - xlnx,mch3-accessbuf-depth = <0x10>; - xlnx,mch3-protocol = <0x0>; - xlnx,mch3-rddatabuf-depth = <0x10>; - xlnx,mem0-width = <0x10>; - xlnx,mem1-width = <0x20>; - xlnx,mem2-width = <0x20>; - xlnx,mem3-width = <0x20>; - xlnx,num-banks-mem = <0x1>; - xlnx,num-channels = <0x0>; - xlnx,priority-mode = <0x0>; - xlnx,synch-mem-0 = <0x0>; - xlnx,synch-mem-1 = <0x0>; - xlnx,synch-mem-2 = <0x0>; - xlnx,synch-mem-3 = <0x0>; - xlnx,synch-pipedelay-0 = <0x2>; - xlnx,synch-pipedelay-1 = <0x2>; - xlnx,synch-pipedelay-2 = <0x2>; - xlnx,synch-pipedelay-3 = <0x2>; - xlnx,tavdv-ps-mem-0 = <0x1adb0>; - xlnx,tavdv-ps-mem-1 = <0x3a98>; - xlnx,tavdv-ps-mem-2 = <0x3a98>; - xlnx,tavdv-ps-mem-3 = <0x3a98>; - xlnx,tcedv-ps-mem-0 = <0x1adb0>; - xlnx,tcedv-ps-mem-1 = <0x3a98>; - xlnx,tcedv-ps-mem-2 = <0x3a98>; - xlnx,tcedv-ps-mem-3 = <0x3a98>; - xlnx,thzce-ps-mem-0 = <0x88b8>; - xlnx,thzce-ps-mem-1 = <0x1b58>; - xlnx,thzce-ps-mem-2 = <0x1b58>; - xlnx,thzce-ps-mem-3 = <0x1b58>; - xlnx,thzoe-ps-mem-0 = <0x1b58>; - xlnx,thzoe-ps-mem-1 = <0x1b58>; - xlnx,thzoe-ps-mem-2 = <0x1b58>; - xlnx,thzoe-ps-mem-3 = <0x1b58>; - xlnx,tlzwe-ps-mem-0 = <0x88b8>; - xlnx,tlzwe-ps-mem-1 = <0x0>; - xlnx,tlzwe-ps-mem-2 = <0x0>; - xlnx,tlzwe-ps-mem-3 = <0x0>; - xlnx,twc-ps-mem-0 = <0x2af8>; - xlnx,twc-ps-mem-1 = <0x3a98>; - xlnx,twc-ps-mem-2 = <0x3a98>; - xlnx,twc-ps-mem-3 = <0x3a98>; - xlnx,twp-ps-mem-0 = <0x11170>; - xlnx,twp-ps-mem-1 = <0x2ee0>; - xlnx,twp-ps-mem-2 = <0x2ee0>; - xlnx,twp-ps-mem-3 = <0x2ee0>; - xlnx,xcl0-linesize = <0x4>; - xlnx,xcl0-writexfer = <0x1>; - xlnx,xcl1-linesize = <0x4>; - xlnx,xcl1-writexfer = <0x1>; - xlnx,xcl2-linesize = <0x4>; - xlnx,xcl2-writexfer = <0x1>; - xlnx,xcl3-linesize = <0x4>; - xlnx,xcl3-writexfer = <0x1>; - } ; - Hard_Ethernet_MAC: xps-ll-temac@81c00000 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "xlnx,compound"; - ethernet@81c00000 { - compatible = "xlnx,xps-ll-temac-1.01.b"; - device_type = "network"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 5 2 >; - llink-connected = <&PIM3>; - local-mac-address = [ 02 00 00 00 00 00 ]; - reg = < 0x81c00000 0x40 >; - xlnx,bus2core-clk-ratio = <0x1>; - xlnx,phy-type = <0x1>; - xlnx,phyaddr = <0x1>; - xlnx,rxcsum = <0x0>; - xlnx,rxfifo = <0x1000>; - xlnx,temac-type = <0x0>; - xlnx,txcsum = <0x0>; - xlnx,txfifo = <0x1000>; - } ; - } ; - IIC_EEPROM: i2c@81600000 { - compatible = "xlnx,xps-iic-2.00.a"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 6 2 >; - reg = < 0x81600000 0x10000 >; - xlnx,clk-freq = <0x7735940>; - xlnx,family = "virtex5"; - xlnx,gpo-width = <0x1>; - xlnx,iic-freq = <0x186a0>; - xlnx,scl-inertial-delay = <0x0>; - xlnx,sda-inertial-delay = <0x0>; - xlnx,ten-bit-adr = <0x0>; - } ; - LEDs_8Bit: gpio@81400000 { - compatible = "xlnx,xps-gpio-1.00.a"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 7 2 >; - reg = < 0x81400000 0x10000 >; - xlnx,all-inputs = <0x0>; - xlnx,all-inputs-2 = <0x0>; - xlnx,dout-default = <0x0>; - xlnx,dout-default-2 = <0x0>; - xlnx,family = "virtex5"; - xlnx,gpio-width = <0x8>; - xlnx,interrupt-present = <0x1>; - xlnx,is-bidir = <0x1>; - xlnx,is-bidir-2 = <0x1>; - xlnx,is-dual = <0x0>; - xlnx,tri-default = <0xffffffff>; - xlnx,tri-default-2 = <0xffffffff>; - } ; - RS232_Uart_1: serial@84000000 { - clock-frequency = <125000000>; - compatible = "xlnx,xps-uartlite-1.00.a"; - current-speed = <115200>; - device_type = "serial"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 8 0 >; - port-number = <0>; - reg = < 0x84000000 0x10000 >; - xlnx,baudrate = <0x1c200>; - xlnx,data-bits = <0x8>; - xlnx,family = "virtex5"; - xlnx,odd-parity = <0x0>; - xlnx,use-parity = <0x0>; - } ; - SysACE_CompactFlash: sysace@83600000 { - compatible = "xlnx,xps-sysace-1.00.a"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 4 2 >; - reg = < 0x83600000 0x10000 >; - xlnx,family = "virtex5"; - xlnx,mem-width = <0x10>; - } ; - debug_module: debug@84400000 { - compatible = "xlnx,mdm-1.00.d"; - reg = < 0x84400000 0x10000 >; - xlnx,family = "virtex5"; - xlnx,interconnect = <0x1>; - xlnx,jtag-chain = <0x2>; - xlnx,mb-dbg-ports = <0x1>; - xlnx,uart-width = <0x8>; - xlnx,use-uart = <0x1>; - xlnx,write-fsl-ports = <0x0>; - } ; - mpmc@90000000 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "xlnx,mpmc-4.02.a"; - PIM3: sdma@84600180 { - compatible = "xlnx,ll-dma-1.00.a"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 2 2 1 2 >; - reg = < 0x84600180 0x80 >; - } ; - } ; - xps_intc_0: interrupt-controller@81800000 { - #interrupt-cells = <0x2>; - compatible = "xlnx,xps-intc-1.00.a"; - interrupt-controller ; - reg = < 0x81800000 0x10000 >; - xlnx,kind-of-intr = <0x100>; - xlnx,num-intr-inputs = <0x9>; - } ; - xps_timer_1: timer@83c00000 { - compatible = "xlnx,xps-timer-1.00.a"; - interrupt-parent = <&xps_intc_0>; - interrupts = < 3 2 >; - reg = < 0x83c00000 0x10000 >; - xlnx,count-width = <0x20>; - xlnx,family = "virtex5"; - xlnx,gen0-assert = <0x1>; - xlnx,gen1-assert = <0x1>; - xlnx,one-timer-only = <0x0>; - xlnx,trig0-assert = <0x1>; - xlnx,trig1-assert = <0x1>; - } ; - } ; -} ; diff --git a/trunk/arch/microblaze/platform/platform.c b/trunk/arch/microblaze/platform/platform.c deleted file mode 100644 index 56e0234fa34b..000000000000 --- a/trunk/arch/microblaze/platform/platform.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2008 Michal Simek - * - * based on virtex.c file - * - * Copyright 2007 Secret Lab Technologies Ltd. - * - * This file is licensed under the terms of the GNU General Public License - * version 2. This program is licensed "as is" without any warranty of any - * kind, whether express or implied. - */ - -#include -#include -#include - -static struct of_device_id xilinx_of_bus_ids[] __initdata = { - { .compatible = "simple-bus", }, - { .compatible = "xlnx,plb-v46-1.00.a", }, - { .compatible = "xlnx,opb-v20-1.10.c", }, - { .compatible = "xlnx,opb-v20-1.10.b", }, - { .compatible = "xlnx,compound", }, - {} -}; - -static int __init microblaze_device_probe(void) -{ - of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL); - return 0; -} -device_initcall(microblaze_device_probe); diff --git a/trunk/arch/mips/include/asm/mach-rc32434/gpio.h b/trunk/arch/mips/include/asm/mach-rc32434/gpio.h index 12ee8d510160..3cb50d17b62d 100644 --- a/trunk/arch/mips/include/asm/mach-rc32434/gpio.h +++ b/trunk/arch/mips/include/asm/mach-rc32434/gpio.h @@ -80,9 +80,6 @@ struct rb532_gpio_reg { /* Compact Flash GPIO pin */ #define CF_GPIO_NUM 13 -/* S1 button GPIO (shared with UART0_SIN) */ -#define GPIO_BTN_S1 1 - extern void rb532_gpio_set_ilevel(int bit, unsigned gpio); extern void rb532_gpio_set_istat(int bit, unsigned gpio); extern void rb532_gpio_set_func(unsigned gpio); diff --git a/trunk/arch/mips/rb532/devices.c b/trunk/arch/mips/rb532/devices.c index 9f40e1ff9b4f..4a5f05b662ae 100644 --- a/trunk/arch/mips/rb532/devices.c +++ b/trunk/arch/mips/rb532/devices.c @@ -200,9 +200,26 @@ static struct platform_device rb532_led = { .id = -1, }; +static struct gpio_keys_button rb532_gpio_btn[] = { + { + .gpio = 1, + .code = BTN_0, + .desc = "S1", + .active_low = 1, + } +}; + +static struct gpio_keys_platform_data rb532_gpio_btn_data = { + .buttons = rb532_gpio_btn, + .nbuttons = ARRAY_SIZE(rb532_gpio_btn), +}; + static struct platform_device rb532_button = { - .name = "rb532-button", + .name = "gpio-keys", .id = -1, + .dev = { + .platform_data = &rb532_gpio_btn_data, + } }; static struct resource rb532_wdt_res[] = { diff --git a/trunk/arch/mn10300/Kconfig b/trunk/arch/mn10300/Kconfig index 355926730e8d..41d16822e616 100644 --- a/trunk/arch/mn10300/Kconfig +++ b/trunk/arch/mn10300/Kconfig @@ -370,3 +370,5 @@ source "security/Kconfig" source "crypto/Kconfig" source "lib/Kconfig" + +source "arch/mn10300/oprofile/Kconfig" diff --git a/trunk/arch/mn10300/Makefile b/trunk/arch/mn10300/Makefile index dd0c8ff52a68..6673a28ec07a 100644 --- a/trunk/arch/mn10300/Makefile +++ b/trunk/arch/mn10300/Makefile @@ -94,8 +94,42 @@ ifdef CONFIG_DEBUG_INFO KBUILD_AFLAGS += -Wa,--gdwarf2 endif +################################################################################################### # -# include the appropriate processor- and unit-specific headers +# juggle some symlinks in the MN10300 asm include dir # -KBUILD_CPPFLAGS += -I$(srctree)/arch/mn10300/proc-$(PROCESSOR)/include -KBUILD_CPPFLAGS += -I$(srctree)/arch/mn10300/unit-$(UNIT)/include +# Update machine proc and unit symlinks if something which affects +# them changed. We use .proc / .unit to indicate when they were +# updated last, otherwise make uses the target directory mtime. +# +################################################################################################### + +# processor specific definitions +include/asm-mn10300/.proc: $(wildcard include/config/proc/*.h) include/config/auto.conf + @echo ' SYMLINK include/asm-mn10300/proc -> include/asm-mn10300/proc-$(PROCESSOR)' +ifneq ($(KBUILD_SRC),) + $(Q)mkdir -p include/asm-mn10300 + $(Q)ln -fsn $(srctree)/include/asm-mn10300/proc-$(PROCESSOR) include/asm-mn10300/proc +else + $(Q)ln -fsn proc-$(PROCESSOR) include/asm-mn10300/proc +endif + @touch $@ + +CLEAN_FILES += include/asm-mn10300/proc include/asm-mn10300/.proc + +prepare: include/asm-mn10300/.proc + +# unit specific definitions +include/asm-mn10300/.unit: $(wildcard include/config/unit/*.h) include/config/auto.conf + @echo ' SYMLINK include/asm-mn10300/unit -> include/asm-mn10300/unit-$(UNIT)' +ifneq ($(KBUILD_SRC),) + $(Q)mkdir -p include/asm-mn10300 + $(Q)ln -fsn $(srctree)/include/asm-mn10300/unit-$(UNIT) include/asm-mn10300/unit +else + $(Q)ln -fsn unit-$(UNIT) include/asm-mn10300/unit +endif + @touch $@ + +CLEAN_FILES += include/asm-mn10300/unit include/asm-mn10300/.unit + +prepare: include/asm-mn10300/.unit diff --git a/trunk/arch/mn10300/include/asm/cputime.h b/trunk/arch/mn10300/include/asm/cputime.h deleted file mode 100644 index 6d68ad7e0ea3..000000000000 --- a/trunk/arch/mn10300/include/asm/cputime.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/emergency-restart.h b/trunk/arch/mn10300/include/asm/emergency-restart.h deleted file mode 100644 index 3711bd9d50bd..000000000000 --- a/trunk/arch/mn10300/include/asm/emergency-restart.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/errno.h b/trunk/arch/mn10300/include/asm/errno.h deleted file mode 100644 index 4c82b503d92f..000000000000 --- a/trunk/arch/mn10300/include/asm/errno.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/fcntl.h b/trunk/arch/mn10300/include/asm/fcntl.h deleted file mode 100644 index 46ab12db5739..000000000000 --- a/trunk/arch/mn10300/include/asm/fcntl.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/futex.h b/trunk/arch/mn10300/include/asm/futex.h deleted file mode 100644 index 0b745828f42b..000000000000 --- a/trunk/arch/mn10300/include/asm/futex.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/ioctl.h b/trunk/arch/mn10300/include/asm/ioctl.h deleted file mode 100644 index b279fe06dfe5..000000000000 --- a/trunk/arch/mn10300/include/asm/ioctl.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/ipc.h b/trunk/arch/mn10300/include/asm/ipc.h deleted file mode 100644 index a46e3d9c2a3f..000000000000 --- a/trunk/arch/mn10300/include/asm/ipc.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/local.h b/trunk/arch/mn10300/include/asm/local.h deleted file mode 100644 index c11c530f74d0..000000000000 --- a/trunk/arch/mn10300/include/asm/local.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/percpu.h b/trunk/arch/mn10300/include/asm/percpu.h deleted file mode 100644 index 06a959d67234..000000000000 --- a/trunk/arch/mn10300/include/asm/percpu.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/poll.h b/trunk/arch/mn10300/include/asm/poll.h deleted file mode 100644 index c98509d3149e..000000000000 --- a/trunk/arch/mn10300/include/asm/poll.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/resource.h b/trunk/arch/mn10300/include/asm/resource.h deleted file mode 100644 index 04bc4db8921b..000000000000 --- a/trunk/arch/mn10300/include/asm/resource.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/statfs.h b/trunk/arch/mn10300/include/asm/statfs.h deleted file mode 100644 index 0b91fe198c20..000000000000 --- a/trunk/arch/mn10300/include/asm/statfs.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/include/asm/xor.h b/trunk/arch/mn10300/include/asm/xor.h deleted file mode 100644 index c82eb12a5b18..000000000000 --- a/trunk/arch/mn10300/include/asm/xor.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/trunk/arch/mn10300/kernel/entry.S b/trunk/arch/mn10300/kernel/entry.S index 34ab5a293153..ceeaaaa359e2 100644 --- a/trunk/arch/mn10300/kernel/entry.S +++ b/trunk/arch/mn10300/kernel/entry.S @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/trunk/arch/mn10300/kernel/gdb-io-serial-low.S b/trunk/arch/mn10300/kernel/gdb-io-serial-low.S index 4998b24f5d3a..c68dcd052201 100644 --- a/trunk/arch/mn10300/kernel/gdb-io-serial-low.S +++ b/trunk/arch/mn10300/kernel/gdb-io-serial-low.S @@ -18,7 +18,7 @@ #include #include #include -#include +#include .text diff --git a/trunk/arch/mn10300/kernel/gdb-io-serial.c b/trunk/arch/mn10300/kernel/gdb-io-serial.c index ae663dc717e9..11584c51acd9 100644 --- a/trunk/arch/mn10300/kernel/gdb-io-serial.c +++ b/trunk/arch/mn10300/kernel/gdb-io-serial.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include /* * initialise the GDB stub diff --git a/trunk/arch/mn10300/kernel/gdb-io-ttysm-low.S b/trunk/arch/mn10300/kernel/gdb-io-ttysm-low.S index 060b7cca735d..677c7876307c 100644 --- a/trunk/arch/mn10300/kernel/gdb-io-ttysm-low.S +++ b/trunk/arch/mn10300/kernel/gdb-io-ttysm-low.S @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include "mn10300-serial.h" .text diff --git a/trunk/arch/mn10300/kernel/gdb-io-ttysm.c b/trunk/arch/mn10300/kernel/gdb-io-ttysm.c index a560bbc3137d..e94c25e8ca05 100644 --- a/trunk/arch/mn10300/kernel/gdb-io-ttysm.c +++ b/trunk/arch/mn10300/kernel/gdb-io-ttysm.c @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include "mn10300-serial.h" #if defined(CONFIG_GDBSTUB_ON_TTYSM0) diff --git a/trunk/arch/mn10300/kernel/gdb-stub.c b/trunk/arch/mn10300/kernel/gdb-stub.c index 41b11706c8ed..0ea7482c1522 100644 --- a/trunk/arch/mn10300/kernel/gdb-stub.c +++ b/trunk/arch/mn10300/kernel/gdb-stub.c @@ -136,8 +136,8 @@ #include #include #include -#include -#include +#include +#include /* define to use F7F7 rather than FF which is subverted by JTAG debugger */ #undef GDBSTUB_USE_F7F7_AS_BREAKPOINT diff --git a/trunk/arch/mn10300/kernel/head.S b/trunk/arch/mn10300/kernel/head.S index 8a8309fbe3c4..606bd8c6758d 100644 --- a/trunk/arch/mn10300/kernel/head.S +++ b/trunk/arch/mn10300/kernel/head.S @@ -17,7 +17,7 @@ #include #include #include -#include +#include .section .text.head,"ax" diff --git a/trunk/arch/mn10300/kernel/irq.c b/trunk/arch/mn10300/kernel/irq.c index 4c3c58ef5cda..50fdb5c16e0c 100644 --- a/trunk/arch/mn10300/kernel/irq.c +++ b/trunk/arch/mn10300/kernel/irq.c @@ -140,7 +140,7 @@ void __init init_IRQ(void) int irq; for (irq = 0; irq < NR_IRQS; irq++) - if (irq_desc[irq].chip == &no_irq_chip) + if (irq_desc[irq].chip == &no_irq_type) /* due to the PIC latching interrupt requests, even * when the IRQ is disabled, IRQ_PENDING is superfluous * and we can use handle_level_irq() for edge-triggered diff --git a/trunk/arch/mn10300/kernel/mn10300-serial-low.S b/trunk/arch/mn10300/kernel/mn10300-serial-low.S index 224485388228..ef3f4c1df2a4 100644 --- a/trunk/arch/mn10300/kernel/mn10300-serial-low.S +++ b/trunk/arch/mn10300/kernel/mn10300-serial-low.S @@ -18,8 +18,8 @@ #include #include #include -#include -#include +#include +#include #include "mn10300-serial.h" #define SCxCTR 0x00 diff --git a/trunk/arch/mn10300/kernel/mn10300-serial.c b/trunk/arch/mn10300/kernel/mn10300-serial.c index 2fd59664d00a..59b9c4bf9583 100644 --- a/trunk/arch/mn10300/kernel/mn10300-serial.c +++ b/trunk/arch/mn10300/kernel/mn10300-serial.c @@ -41,7 +41,7 @@ static const char serial_revdate[] = "2007-11-06"; #include #include #include -#include +#include #include "mn10300-serial.h" static inline __attribute__((format(printf, 1, 2))) diff --git a/trunk/arch/mn10300/kernel/mn10300-watchdog.c b/trunk/arch/mn10300/kernel/mn10300-watchdog.c index f362d9d138f1..2e370d88a87a 100644 --- a/trunk/arch/mn10300/kernel/mn10300-watchdog.c +++ b/trunk/arch/mn10300/kernel/mn10300-watchdog.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include static DEFINE_SPINLOCK(watchdog_print_lock); static unsigned int watchdog; diff --git a/trunk/arch/mn10300/kernel/setup.c b/trunk/arch/mn10300/kernel/setup.c index 71414e19fd16..e1d88ab51008 100644 --- a/trunk/arch/mn10300/kernel/setup.c +++ b/trunk/arch/mn10300/kernel/setup.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/trunk/arch/mn10300/kernel/traps.c b/trunk/arch/mn10300/kernel/traps.c index 681ad8c9e4fb..fcb9a03d46a8 100644 --- a/trunk/arch/mn10300/kernel/traps.c +++ b/trunk/arch/mn10300/kernel/traps.c @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/trunk/arch/mn10300/oprofile/Kconfig b/trunk/arch/mn10300/oprofile/Kconfig new file mode 100644 index 000000000000..19d37730b664 --- /dev/null +++ b/trunk/arch/mn10300/oprofile/Kconfig @@ -0,0 +1,23 @@ + +menu "Profiling support" + depends on EXPERIMENTAL + +config PROFILING + bool "Profiling support (EXPERIMENTAL)" + help + Say Y here to enable the extended profiling support mechanisms used + by profilers such as OProfile. + + +config OPROFILE + tristate "OProfile system profiling (EXPERIMENTAL)" + depends on PROFILING + help + OProfile is a profiling system capable of profiling the + whole system, include the kernel, kernel modules, libraries, + and applications. + + If unsure, say N. + +endmenu + diff --git a/trunk/arch/mn10300/unit-asb2303/leds.c b/trunk/arch/mn10300/unit-asb2303/leds.c index c03839357a14..cd4bc78ccfc8 100644 --- a/trunk/arch/mn10300/unit-asb2303/leds.c +++ b/trunk/arch/mn10300/unit-asb2303/leds.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include #if 0 static const u8 asb2303_led_hex_tbl[16] = { diff --git a/trunk/arch/mn10300/unit-asb2303/smc91111.c b/trunk/arch/mn10300/unit-asb2303/smc91111.c index 43c246439413..30875dd65631 100644 --- a/trunk/arch/mn10300/unit-asb2303/smc91111.c +++ b/trunk/arch/mn10300/unit-asb2303/smc91111.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include static struct resource smc91c111_resources[] = { [0] = { diff --git a/trunk/arch/mn10300/unit-asb2305/leds.c b/trunk/arch/mn10300/unit-asb2305/leds.c index d345ff9042d5..e99dcc9cee1a 100644 --- a/trunk/arch/mn10300/unit-asb2305/leds.c +++ b/trunk/arch/mn10300/unit-asb2305/leds.c @@ -15,7 +15,7 @@ #include #include #include -#include +#include static const u8 asb2305_led_hex_tbl[16] = { 0x80, 0xf2, 0x48, 0x60, 0x32, 0x24, 0x04, 0xf0, diff --git a/trunk/arch/mn10300/unit-asb2305/unit-init.c b/trunk/arch/mn10300/unit-asb2305/unit-init.c index 1c452cc3f6e9..72812a9439ac 100644 --- a/trunk/arch/mn10300/unit-asb2305/unit-init.c +++ b/trunk/arch/mn10300/unit-asb2305/unit-init.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include /* * initialise some of the unit hardware before gdbstub is set up diff --git a/trunk/arch/powerpc/include/asm/parport.h b/trunk/arch/powerpc/include/asm/parport.h index 94942d60ddfd..414c50e2e881 100644 --- a/trunk/arch/powerpc/include/asm/parport.h +++ b/trunk/arch/powerpc/include/asm/parport.h @@ -29,7 +29,7 @@ static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma) prop = of_get_property(np, "interrupts", NULL); if (!prop) continue; - if (parport_pc_probe_port(io1, io2, prop[0], autodma, NULL, 0) != NULL) + if (parport_pc_probe_port(io1, io2, prop[0], autodma, NULL) != NULL) count++; } return count; diff --git a/trunk/arch/s390/Kconfig b/trunk/arch/s390/Kconfig index 2eca5fe0e75b..dcb667c4375a 100644 --- a/trunk/arch/s390/Kconfig +++ b/trunk/arch/s390/Kconfig @@ -82,7 +82,6 @@ config S390 select USE_GENERIC_SMP_HELPERS if SMP select HAVE_SYSCALL_WRAPPERS select HAVE_FUNCTION_TRACER - select HAVE_DEFAULT_NO_SPIN_MUTEXES select HAVE_OPROFILE select HAVE_KPROBES select HAVE_KRETPROBES diff --git a/trunk/arch/sh/Kconfig b/trunk/arch/sh/Kconfig index e7390dd0283d..5e4babecf934 100644 --- a/trunk/arch/sh/Kconfig +++ b/trunk/arch/sh/Kconfig @@ -14,7 +14,6 @@ config SUPERH select HAVE_GENERIC_DMA_COHERENT select HAVE_IOREMAP_PROT if MMU select HAVE_ARCH_TRACEHOOK - select HAVE_DMA_API_DEBUG help The SuperH is a RISC processor targeted for use in embedded systems and consumer electronics; it was also used in the Sega Dreamcast @@ -22,7 +21,7 @@ config SUPERH . config SUPERH32 - def_bool ARCH = "sh" + def_bool !SUPERH64 select HAVE_KPROBES select HAVE_KRETPROBES select HAVE_FUNCTION_TRACER @@ -32,7 +31,7 @@ config SUPERH32 select ARCH_HIBERNATION_POSSIBLE if MMU config SUPERH64 - def_bool ARCH = "sh64" + def_bool y if CPU_SH5 config ARCH_DEFCONFIG string @@ -188,8 +187,6 @@ config ARCH_SHMOBILE bool select ARCH_SUSPEND_POSSIBLE -if SUPERH32 - choice prompt "Processor sub-type selection" @@ -411,15 +408,6 @@ config CPU_SUBTYPE_SH7366 select SYS_SUPPORTS_NUMA select SYS_SUPPORTS_CMT -endchoice - -endif - -if SUPERH64 - -choice - prompt "Processor sub-type selection" - # SH-5 Processor Support config CPU_SUBTYPE_SH5_101 @@ -432,8 +420,6 @@ config CPU_SUBTYPE_SH5_103 endchoice -endif - source "arch/sh/mm/Kconfig" source "arch/sh/Kconfig.cpu" diff --git a/trunk/arch/sh/boards/board-ap325rxa.c b/trunk/arch/sh/boards/board-ap325rxa.c index 39e46919df14..912458f666eb 100644 --- a/trunk/arch/sh/boards/board-ap325rxa.c +++ b/trunk/arch/sh/boards/board-ap325rxa.c @@ -349,7 +349,6 @@ static int ov7725_power(struct device *dev, int mode) static struct ov772x_camera_info ov7725_info = { .buswidth = SOCAM_DATAWIDTH_8, .flags = OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP, - .edgectrl = OV772X_AUTO_EDGECTRL(0xf, 0), .link = { .power = ov7725_power, }, diff --git a/trunk/arch/sh/boards/board-urquell.c b/trunk/arch/sh/boards/board-urquell.c index beb88c4da2c1..8367d1d789c3 100644 --- a/trunk/arch/sh/boards/board-urquell.c +++ b/trunk/arch/sh/boards/board-urquell.c @@ -2,8 +2,6 @@ * Renesas Technology Corp. SH7786 Urquell Support. * * Copyright (C) 2008 Kuninori Morimoto - * - * Based on board-sh7785lcr.c * Copyright (C) 2008 Yoshihiro Shimoda * * This file is subject to the terms and conditions of the GNU General Public @@ -23,32 +21,6 @@ #include #include -/* - * bit 1234 5678 - *---------------------------- - * SW1 0101 0010 -> Pck 33MHz version - * (1101 0010) Pck 66MHz version - * SW2 0x1x xxxx -> little endian - * 29bit mode - * SW47 0001 1000 -> CS0 : on-board flash - * CS1 : SRAM, registers, LAN, PCMCIA - * 38400 bps for SCIF1 - * - * Address - * 0x00000000 - 0x04000000 (CS0) Nor Flash - * 0x04000000 - 0x04200000 (CS1) SRAM - * 0x05000000 - 0x05800000 (CS1) on board register - * 0x05800000 - 0x06000000 (CS1) LAN91C111 - * 0x06000000 - 0x06400000 (CS1) PCMCIA - * 0x08000000 - 0x10000000 (CS2-CS3) DDR3 - * 0x10000000 - 0x14000000 (CS4) PCIe - * 0x14000000 - 0x14800000 (CS5) Core0 LRAM/URAM - * 0x14800000 - 0x15000000 (CS5) Core1 LRAM/URAM - * 0x18000000 - 0x1C000000 (CS6) ATA/NAND-Flash - * 0x1C000000 - (CS7) SH7786 Control register - */ - -/* HeartBeat */ static struct resource heartbeat_resources[] = { [0] = { .start = BOARDREG(SLEDR), @@ -71,7 +43,6 @@ static struct platform_device heartbeat_device = { .resource = heartbeat_resources, }; -/* LAN91C111 */ static struct smc91x_platdata smc91x_info = { .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, }; @@ -98,7 +69,6 @@ static struct platform_device smc91x_eth_device = { }, }; -/* Nor Flash */ static struct mtd_partition nor_flash_partitions[] = { { .name = "loader", diff --git a/trunk/arch/sh/drivers/pci/ops-sh7785lcr.c b/trunk/arch/sh/drivers/pci/ops-sh7785lcr.c index fb0869f0bef8..e8b7446a7c2b 100644 --- a/trunk/arch/sh/drivers/pci/ops-sh7785lcr.c +++ b/trunk/arch/sh/drivers/pci/ops-sh7785lcr.c @@ -48,13 +48,8 @@ EXPORT_SYMBOL(board_pci_channels); static struct sh4_pci_address_map sh7785_pci_map = { .window0 = { -#if defined(CONFIG_32BIT) - .base = SH7780_32BIT_DDR_BASE_ADDR, - .size = 0x40000000, -#else .base = SH7780_CS0_BASE_ADDR, .size = 0x20000000, -#endif }, .flags = SH4_PCIC_NO_RESET, diff --git a/trunk/arch/sh/drivers/pci/pci-sh7780.h b/trunk/arch/sh/drivers/pci/pci-sh7780.h index 93adc7119b79..97b2c98f05c4 100644 --- a/trunk/arch/sh/drivers/pci/pci-sh7780.h +++ b/trunk/arch/sh/drivers/pci/pci-sh7780.h @@ -104,8 +104,6 @@ #define SH7780_CS5_BASE_ADDR (SH7780_CS4_BASE_ADDR + SH7780_MEM_REGION_SIZE) #define SH7780_CS6_BASE_ADDR (SH7780_CS5_BASE_ADDR + SH7780_MEM_REGION_SIZE) -#define SH7780_32BIT_DDR_BASE_ADDR 0x40000000 - struct sh4_pci_address_map; /* arch/sh/drivers/pci/pci-sh7780.c */ diff --git a/trunk/arch/sh/drivers/pci/pci.c b/trunk/arch/sh/drivers/pci/pci.c index 0d6ac7a1db49..e36c7b870861 100644 --- a/trunk/arch/sh/drivers/pci/pci.c +++ b/trunk/arch/sh/drivers/pci/pci.c @@ -19,7 +19,6 @@ #include #include #include -#include #include static int __init pcibios_init(void) @@ -44,8 +43,6 @@ static int __init pcibios_init(void) pci_fixup_irqs(pci_common_swizzle, pcibios_map_platform_irq); - dma_debug_add_bus(&pci_bus_type); - return 0; } subsys_initcall(pcibios_init); diff --git a/trunk/arch/sh/include/asm/dma-mapping.h b/trunk/arch/sh/include/asm/dma-mapping.h index ea9d4f41c9d2..627315ecdb52 100644 --- a/trunk/arch/sh/include/asm/dma-mapping.h +++ b/trunk/arch/sh/include/asm/dma-mapping.h @@ -3,7 +3,6 @@ #include #include -#include #include #include #include @@ -39,26 +38,16 @@ static inline dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir) { - dma_addr_t addr = virt_to_phys(ptr); - #if defined(CONFIG_PCI) && !defined(CONFIG_SH_PCIDMA_NONCOHERENT) if (dev->bus == &pci_bus_type) - return addr; + return virt_to_phys(ptr); #endif dma_cache_sync(dev, ptr, size, dir); - debug_dma_map_page(dev, virt_to_page(ptr), - (unsigned long)ptr & ~PAGE_MASK, size, - dir, addr, true); - - return addr; + return virt_to_phys(ptr); } -static inline void dma_unmap_single(struct device *dev, dma_addr_t addr, - size_t size, enum dma_data_direction dir) -{ - debug_dma_unmap_page(dev, addr, size, dir, true); -} +#define dma_unmap_single(dev, addr, size, dir) do { } while (0) static inline int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir) @@ -70,19 +59,12 @@ static inline int dma_map_sg(struct device *dev, struct scatterlist *sg, dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, dir); #endif sg[i].dma_address = sg_phys(&sg[i]); - sg[i].dma_length = sg[i].length; } - debug_dma_map_sg(dev, sg, nents, i, dir); - return nents; } -static inline void dma_unmap_sg(struct device *dev, struct scatterlist *sg, - int nents, enum dma_data_direction dir) -{ - debug_dma_unmap_sg(dev, sg, nents, dir); -} +#define dma_unmap_sg(dev, sg, nents, dir) do { } while (0) static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, @@ -129,7 +111,6 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg, dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, dir); #endif sg[i].dma_address = sg_phys(&sg[i]); - sg[i].dma_length = sg[i].length; } } @@ -138,7 +119,6 @@ static inline void dma_sync_single_for_cpu(struct device *dev, enum dma_data_direction dir) { dma_sync_single(dev, dma_handle, size, dir); - debug_dma_sync_single_for_cpu(dev, dma_handle, size, dir); } static inline void dma_sync_single_for_device(struct device *dev, @@ -147,7 +127,6 @@ static inline void dma_sync_single_for_device(struct device *dev, enum dma_data_direction dir) { dma_sync_single(dev, dma_handle, size, dir); - debug_dma_sync_single_for_device(dev, dma_handle, size, dir); } static inline void dma_sync_single_range_for_cpu(struct device *dev, @@ -157,8 +136,6 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, enum dma_data_direction direction) { dma_sync_single_for_cpu(dev, dma_handle+offset, size, direction); - debug_dma_sync_single_range_for_cpu(dev, dma_handle, - offset, size, direction); } static inline void dma_sync_single_range_for_device(struct device *dev, @@ -168,8 +145,6 @@ static inline void dma_sync_single_range_for_device(struct device *dev, enum dma_data_direction direction) { dma_sync_single_for_device(dev, dma_handle+offset, size, direction); - debug_dma_sync_single_range_for_device(dev, dma_handle, - offset, size, direction); } @@ -178,7 +153,6 @@ static inline void dma_sync_sg_for_cpu(struct device *dev, enum dma_data_direction dir) { dma_sync_sg(dev, sg, nelems, dir); - debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); } static inline void dma_sync_sg_for_device(struct device *dev, @@ -186,9 +160,9 @@ static inline void dma_sync_sg_for_device(struct device *dev, enum dma_data_direction dir) { dma_sync_sg(dev, sg, nelems, dir); - debug_dma_sync_sg_for_device(dev, sg, nelems, dir); } + static inline int dma_get_cache_alignment(void) { /* diff --git a/trunk/arch/sh/include/asm/scatterlist.h b/trunk/arch/sh/include/asm/scatterlist.h index c693d268a413..2084d0373693 100644 --- a/trunk/arch/sh/include/asm/scatterlist.h +++ b/trunk/arch/sh/include/asm/scatterlist.h @@ -5,13 +5,12 @@ struct scatterlist { #ifdef CONFIG_DEBUG_SG - unsigned long sg_magic; + unsigned long sg_magic; #endif - unsigned long page_link; - unsigned int offset; /* for highmem, page offset */ - unsigned int length; - dma_addr_t dma_address; - unsigned int dma_length; + unsigned long page_link; + unsigned int offset;/* for highmem, page offset */ + dma_addr_t dma_address; + unsigned int length; }; #define ISA_DMA_THRESHOLD PHYS_ADDR_MASK diff --git a/trunk/arch/sh/include/asm/topology.h b/trunk/arch/sh/include/asm/topology.h index 8489a0905a87..a3f239545897 100644 --- a/trunk/arch/sh/include/asm/topology.h +++ b/trunk/arch/sh/include/asm/topology.h @@ -37,11 +37,8 @@ #define pcibus_to_node(bus) ((void)(bus), -1) #define pcibus_to_cpumask(bus) (pcibus_to_node(bus) == -1 ? \ CPU_MASK_ALL : \ - node_to_cpumask(pcibus_to_node(bus))) -#define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \ - CPU_MASK_ALL_PTR : \ - cpumask_of_node(pcibus_to_node(bus))) - + node_to_cpumask(pcibus_to_node(bus)) \ + ) #endif #include diff --git a/trunk/arch/sh/include/asm/unistd_32.h b/trunk/arch/sh/include/asm/unistd_32.h index 2efb819e2db3..d52c000cf924 100644 --- a/trunk/arch/sh/include/asm/unistd_32.h +++ b/trunk/arch/sh/include/asm/unistd_32.h @@ -341,10 +341,8 @@ #define __NR_dup3 330 #define __NR_pipe2 331 #define __NR_inotify_init1 332 -#define __NR_preadv 333 -#define __NR_pwritev 334 -#define NR_syscalls 335 +#define NR_syscalls 333 #ifdef __KERNEL__ diff --git a/trunk/arch/sh/include/asm/unistd_64.h b/trunk/arch/sh/include/asm/unistd_64.h index 6eb9d2934c0f..7c54e91753c1 100644 --- a/trunk/arch/sh/include/asm/unistd_64.h +++ b/trunk/arch/sh/include/asm/unistd_64.h @@ -381,12 +381,10 @@ #define __NR_dup3 358 #define __NR_pipe2 359 #define __NR_inotify_init1 360 -#define __NR_preadv 361 -#define __NR_pwritev 362 #ifdef __KERNEL__ -#define NR_syscalls 363 +#define NR_syscalls 361 #define __ARCH_WANT_IPC_PARSE_VERSION #define __ARCH_WANT_OLD_READDIR diff --git a/trunk/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/trunk/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 90e8cfff55fd..5a47e1cf442e 100644 --- a/trunk/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/trunk/arch/sh/kernel/cpu/sh4a/setup-sh7786.c @@ -143,14 +143,14 @@ static void __init sh7786_usb_setup(void) * Set the PHY and PLL enable bit */ __raw_writel(PHY_ENB | PLL_ENB, USBPCTL1); - while (i--) { - if (ACT_PLL_STATUS == (__raw_readl(USBST) & ACT_PLL_STATUS)) { - /* Set the PHY RST bit */ - __raw_writel(PHY_ENB | PLL_ENB | PHY_RST, USBPCTL1); - printk(KERN_INFO "sh7786 usb setup done\n"); - break; - } + while (i-- && + ((__raw_readl(USBST) & ACT_PLL_STATUS) != ACT_PLL_STATUS)) cpu_relax(); + + if (i) { + /* Set the PHY RST bit */ + __raw_writel(PHY_ENB | PLL_ENB | PHY_RST, USBPCTL1); + printk(KERN_INFO "sh7786 usb setup done\n"); } } diff --git a/trunk/arch/sh/kernel/syscalls_32.S b/trunk/arch/sh/kernel/syscalls_32.S index 05202edd8e21..e67c1733e1b9 100644 --- a/trunk/arch/sh/kernel/syscalls_32.S +++ b/trunk/arch/sh/kernel/syscalls_32.S @@ -349,5 +349,3 @@ ENTRY(sys_call_table) .long sys_dup3 /* 330 */ .long sys_pipe2 .long sys_inotify_init1 - .long sys_preadv - .long sys_writev diff --git a/trunk/arch/sh/kernel/syscalls_64.S b/trunk/arch/sh/kernel/syscalls_64.S index a083609f9284..557cb91f5caf 100644 --- a/trunk/arch/sh/kernel/syscalls_64.S +++ b/trunk/arch/sh/kernel/syscalls_64.S @@ -387,5 +387,3 @@ sys_call_table: .long sys_dup3 .long sys_pipe2 .long sys_inotify_init1 /* 360 */ - .long sys_preadv - .long sys_pwritev diff --git a/trunk/arch/sh/mm/consistent.c b/trunk/arch/sh/mm/consistent.c index e098ec158ddb..edcd5fbf9651 100644 --- a/trunk/arch/sh/mm/consistent.c +++ b/trunk/arch/sh/mm/consistent.c @@ -10,22 +10,11 @@ * for more details. */ #include -#include #include #include -#include -#include #include #include - -#define PREALLOC_DMA_DEBUG_ENTRIES 4096 - -static int __init dma_init(void) -{ - dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES); - return 0; -} -fs_initcall(dma_init); +#include void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp) @@ -56,9 +45,6 @@ void *dma_alloc_coherent(struct device *dev, size_t size, split_page(pfn_to_page(virt_to_phys(ret) >> PAGE_SHIFT), order); *dma_handle = virt_to_phys(ret); - - debug_dma_alloc_coherent(dev, size, *dma_handle, ret_nocache); - return ret_nocache; } EXPORT_SYMBOL(dma_alloc_coherent); @@ -70,15 +56,12 @@ void dma_free_coherent(struct device *dev, size_t size, unsigned long pfn = dma_handle >> PAGE_SHIFT; int k; - WARN_ON(irqs_disabled()); /* for portability */ - - if (dma_release_from_coherent(dev, order, vaddr)) - return; - - debug_dma_free_coherent(dev, size, vaddr, dma_handle); - for (k = 0; k < (1 << order); k++) - __free_pages(pfn_to_page(pfn + k), 0); - iounmap(vaddr); + if (!dma_release_from_coherent(dev, order, vaddr)) { + WARN_ON(irqs_disabled()); /* for portability */ + for (k = 0; k < (1 << order); k++) + __free_pages(pfn_to_page(pfn + k), 0); + iounmap(vaddr); + } } EXPORT_SYMBOL(dma_free_coherent); diff --git a/trunk/arch/sparc/include/asm/parport.h b/trunk/arch/sparc/include/asm/parport.h index ff9ead640c4a..dff3f0253aa8 100644 --- a/trunk/arch/sparc/include/asm/parport.h +++ b/trunk/arch/sparc/include/asm/parport.h @@ -117,7 +117,7 @@ static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id if (!strcmp(parent->name, "dma")) { p = parport_pc_probe_port(base, base + 0x400, op->irqs[0], PARPORT_DMA_NOFIFO, - op->dev.parent->parent, 0); + op->dev.parent->parent); if (!p) return -ENOMEM; dev_set_drvdata(&op->dev, p); @@ -168,8 +168,7 @@ static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id p = parport_pc_probe_port(base, base + 0x400, op->irqs[0], slot, - op->dev.parent, - 0); + op->dev.parent); err = -ENOMEM; if (!p) goto out_disable_irq; diff --git a/trunk/arch/x86/Kconfig b/trunk/arch/x86/Kconfig index bc25b9f5e4cd..4b3408206091 100644 --- a/trunk/arch/x86/Kconfig +++ b/trunk/arch/x86/Kconfig @@ -252,13 +252,17 @@ config SMP config X86_X2APIC bool "Support x2apic" - depends on X86_LOCAL_APIC && X86_64 && INTR_REMAP + depends on X86_LOCAL_APIC && X86_64 + select INTR_REMAP ---help--- This enables x2apic support on CPUs that have this feature. This allows 32-bit apic IDs (so it can support very large systems), and accesses the local apic via MSRs not via mmio. + ( On certain CPU models you may need to enable INTR_REMAP too, + to get functional x2apic mode. ) + If you don't know what to do here, say N. config SPARSE_IRQ diff --git a/trunk/arch/x86/boot/video-vga.c b/trunk/arch/x86/boot/video-vga.c index 9e0587a37768..95d86ce0421c 100644 --- a/trunk/arch/x86/boot/video-vga.c +++ b/trunk/arch/x86/boot/video-vga.c @@ -129,18 +129,22 @@ u16 vga_crtc(void) return (inb(0x3cc) & 1) ? 0x3d4 : 0x3b4; } -static void vga_set_480_scanlines(void) +static void vga_set_480_scanlines(int lines) { u16 crtc; /* CRTC base address */ u8 csel; /* CRTC miscellaneous output register */ + u8 ovfw; /* CRTC overflow register */ + int end = lines-1; crtc = vga_crtc(); + ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40); + out_idx(0x0c, crtc, 0x11); /* Vertical sync end, unlock CR0-7 */ out_idx(0x0b, crtc, 0x06); /* Vertical total */ - out_idx(0x3e, crtc, 0x07); /* Vertical overflow */ + out_idx(ovfw, crtc, 0x07); /* Vertical overflow */ out_idx(0xea, crtc, 0x10); /* Vertical sync start */ - out_idx(0xdf, crtc, 0x12); /* Vertical display end */ + out_idx(end, crtc, 0x12); /* Vertical display end */ out_idx(0xe7, crtc, 0x15); /* Vertical blank start */ out_idx(0x04, crtc, 0x16); /* Vertical blank end */ csel = inb(0x3cc); @@ -149,38 +153,21 @@ static void vga_set_480_scanlines(void) outb(csel, 0x3c2); } -static void vga_set_vertical_end(int lines) -{ - u16 crtc; /* CRTC base address */ - u8 ovfw; /* CRTC overflow register */ - int end = lines-1; - - crtc = vga_crtc(); - - ovfw = 0x3c | ((end >> (8-1)) & 0x02) | ((end >> (9-6)) & 0x40); - - out_idx(ovfw, crtc, 0x07); /* Vertical overflow */ - out_idx(end, crtc, 0x12); /* Vertical display end */ -} - static void vga_set_80x30(void) { - vga_set_480_scanlines(); - vga_set_vertical_end(30*16); + vga_set_480_scanlines(30*16); } static void vga_set_80x34(void) { - vga_set_480_scanlines(); vga_set_14font(); - vga_set_vertical_end(34*14); + vga_set_480_scanlines(34*14); } static void vga_set_80x60(void) { - vga_set_480_scanlines(); vga_set_8font(); - vga_set_vertical_end(60*8); + vga_set_480_scanlines(60*8); } static int vga_set_mode(struct mode_info *mode) diff --git a/trunk/arch/x86/include/asm/cpu_debug.h b/trunk/arch/x86/include/asm/cpu_debug.h old mode 100644 new mode 100755 diff --git a/trunk/arch/x86/include/asm/fixmap.h b/trunk/arch/x86/include/asm/fixmap.h index 2d81af3974a0..81937a5dc77c 100644 --- a/trunk/arch/x86/include/asm/fixmap.h +++ b/trunk/arch/x86/include/asm/fixmap.h @@ -151,11 +151,11 @@ extern pte_t *pkmap_page_table; void __native_set_fixmap(enum fixed_addresses idx, pte_t pte); void native_set_fixmap(enum fixed_addresses idx, - phys_addr_t phys, pgprot_t flags); + unsigned long phys, pgprot_t flags); #ifndef CONFIG_PARAVIRT static inline void __set_fixmap(enum fixed_addresses idx, - phys_addr_t phys, pgprot_t flags) + unsigned long phys, pgprot_t flags) { native_set_fixmap(idx, phys, flags); } diff --git a/trunk/arch/x86/include/asm/io.h b/trunk/arch/x86/include/asm/io.h index 73739322b6d0..e5383e3d2f8c 100644 --- a/trunk/arch/x86/include/asm/io.h +++ b/trunk/arch/x86/include/asm/io.h @@ -193,10 +193,8 @@ extern void __iomem *ioremap_wc(resource_size_t offset, unsigned long size); */ extern void early_ioremap_init(void); extern void early_ioremap_reset(void); -extern void __iomem *early_ioremap(resource_size_t phys_addr, - unsigned long size); -extern void __iomem *early_memremap(resource_size_t phys_addr, - unsigned long size); +extern void __iomem *early_ioremap(unsigned long offset, unsigned long size); +extern void __iomem *early_memremap(unsigned long offset, unsigned long size); extern void early_iounmap(void __iomem *addr, unsigned long size); #define IO_SPACE_LIMIT 0xffff diff --git a/trunk/arch/x86/include/asm/paravirt.h b/trunk/arch/x86/include/asm/paravirt.h index 378e3691c08c..7727aa8b7dda 100644 --- a/trunk/arch/x86/include/asm/paravirt.h +++ b/trunk/arch/x86/include/asm/paravirt.h @@ -347,7 +347,7 @@ struct pv_mmu_ops { /* Sometimes the physical address is a pfn, and sometimes its an mfn. We can tell which is which from the index. */ void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx, - phys_addr_t phys, pgprot_t flags); + unsigned long phys, pgprot_t flags); }; struct raw_spinlock; @@ -1432,7 +1432,7 @@ static inline void arch_leave_lazy_mmu_mode(void) void arch_flush_lazy_mmu_mode(void); static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, - phys_addr_t phys, pgprot_t flags) + unsigned long phys, pgprot_t flags) { pv_mmu_ops.set_fixmap(idx, phys, flags); } diff --git a/trunk/arch/x86/include/asm/processor.h b/trunk/arch/x86/include/asm/processor.h index fcf4d92e7e04..34c52370f2fe 100644 --- a/trunk/arch/x86/include/asm/processor.h +++ b/trunk/arch/x86/include/asm/processor.h @@ -352,11 +352,6 @@ struct i387_soft_struct { u32 entry_eip; }; -struct ymmh_struct { - /* 16 * 16 bytes for each YMMH-reg = 256 bytes */ - u32 ymmh_space[64]; -}; - struct xsave_hdr_struct { u64 xstate_bv; u64 reserved1[2]; @@ -366,7 +361,6 @@ struct xsave_hdr_struct { struct xsave_struct { struct i387_fxsave_struct i387; struct xsave_hdr_struct xsave_hdr; - struct ymmh_struct ymmh; /* new processor state extensions will go here */ } __attribute__ ((packed, aligned (64))); diff --git a/trunk/arch/x86/include/asm/required-features.h b/trunk/arch/x86/include/asm/required-features.h index a4737dddfd58..d5cd6c586881 100644 --- a/trunk/arch/x86/include/asm/required-features.h +++ b/trunk/arch/x86/include/asm/required-features.h @@ -50,7 +50,7 @@ #ifdef CONFIG_X86_64 #define NEED_PSE 0 #define NEED_MSR (1<<(X86_FEATURE_MSR & 31)) -#define NEED_PGE 0 +#define NEED_PGE (1<<(X86_FEATURE_PGE & 31)) #define NEED_FXSR (1<<(X86_FEATURE_FXSR & 31)) #define NEED_XMM (1<<(X86_FEATURE_XMM & 31)) #define NEED_XMM2 (1<<(X86_FEATURE_XMM2 & 31)) diff --git a/trunk/arch/x86/include/asm/sigcontext.h b/trunk/arch/x86/include/asm/sigcontext.h index 72e5a4491661..ec666491aaa4 100644 --- a/trunk/arch/x86/include/asm/sigcontext.h +++ b/trunk/arch/x86/include/asm/sigcontext.h @@ -269,11 +269,6 @@ struct _xsave_hdr { __u64 reserved2[5]; }; -struct _ymmh_state { - /* 16 * 16 bytes for each YMMH-reg */ - __u32 ymmh_space[64]; -}; - /* * Extended state pointed by the fpstate pointer in the sigcontext. * In addition to the fpstate, information encoded in the xstate_hdr @@ -283,7 +278,6 @@ struct _ymmh_state { struct _xstate { struct _fpstate fpstate; struct _xsave_hdr xstate_hdr; - struct _ymmh_state ymmh; /* new processor state extensions go here */ }; diff --git a/trunk/arch/x86/include/asm/xen/page.h b/trunk/arch/x86/include/asm/xen/page.h index 018a0a400799..1a918dde46b5 100644 --- a/trunk/arch/x86/include/asm/xen/page.h +++ b/trunk/arch/x86/include/asm/xen/page.h @@ -124,8 +124,7 @@ static inline unsigned long mfn_to_local_pfn(unsigned long mfn) /* VIRT <-> MACHINE conversion */ #define virt_to_machine(v) (phys_to_machine(XPADDR(__pa(v)))) -#define virt_to_pfn(v) (PFN_DOWN(__pa(v))) -#define virt_to_mfn(v) (pfn_to_mfn(virt_to_pfn(v))) +#define virt_to_mfn(v) (pfn_to_mfn(PFN_DOWN(__pa(v)))) #define mfn_to_virt(m) (__va(mfn_to_pfn(m) << PAGE_SHIFT)) static inline unsigned long pte_mfn(pte_t pte) diff --git a/trunk/arch/x86/include/asm/xsave.h b/trunk/arch/x86/include/asm/xsave.h index 727acc152344..08e9a1ac07a9 100644 --- a/trunk/arch/x86/include/asm/xsave.h +++ b/trunk/arch/x86/include/asm/xsave.h @@ -7,7 +7,6 @@ #define XSTATE_FP 0x1 #define XSTATE_SSE 0x2 -#define XSTATE_YMM 0x4 #define XSTATE_FPSSE (XSTATE_FP | XSTATE_SSE) @@ -16,7 +15,7 @@ /* * These are the features that the OS can handle currently. */ -#define XCNTXT_MASK (XSTATE_FP | XSTATE_SSE | XSTATE_YMM) +#define XCNTXT_MASK (XSTATE_FP | XSTATE_SSE) #ifdef CONFIG_X86_64 #define REX_PREFIX "0x48, " diff --git a/trunk/arch/x86/kernel/apic/apic_flat_64.c b/trunk/arch/x86/kernel/apic/apic_flat_64.c index 306e5e88fb6f..0014714ea97b 100644 --- a/trunk/arch/x86/kernel/apic/apic_flat_64.c +++ b/trunk/arch/x86/kernel/apic/apic_flat_64.c @@ -212,7 +212,7 @@ struct apic apic_flat = { .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .wait_for_init_deassert = NULL, .smp_callin_clear_local_apic = NULL, - .inquire_remote_apic = default_inquire_remote_apic, + .inquire_remote_apic = NULL, .read = native_apic_mem_read, .write = native_apic_mem_write, @@ -362,7 +362,7 @@ struct apic apic_physflat = { .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .wait_for_init_deassert = NULL, .smp_callin_clear_local_apic = NULL, - .inquire_remote_apic = default_inquire_remote_apic, + .inquire_remote_apic = NULL, .read = native_apic_mem_read, .write = native_apic_mem_write, diff --git a/trunk/arch/x86/kernel/apic/io_apic.c b/trunk/arch/x86/kernel/apic/io_apic.c index a2789e42e162..767fe7e46d68 100644 --- a/trunk/arch/x86/kernel/apic/io_apic.c +++ b/trunk/arch/x86/kernel/apic/io_apic.c @@ -2524,6 +2524,7 @@ static void irq_complete_move(struct irq_desc **descp) static inline void irq_complete_move(struct irq_desc **descp) {} #endif +#ifdef CONFIG_X86_X2APIC static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg) { int apic, pin; @@ -2557,7 +2558,6 @@ eoi_ioapic_irq(struct irq_desc *desc) spin_unlock_irqrestore(&ioapic_lock, flags); } -#ifdef CONFIG_X86_X2APIC static void ack_x2apic_level(unsigned int irq) { struct irq_desc *desc = irq_to_desc(irq); @@ -2634,9 +2634,6 @@ static void ack_apic_level(unsigned int irq) */ ack_APIC_irq(); - if (irq_remapped(irq)) - eoi_ioapic_irq(desc); - /* Now we can move and renable the irq */ if (unlikely(do_unmask_irq)) { /* Only migrate the irq if the ack has been received. diff --git a/trunk/arch/x86/kernel/cpu/cpu_debug.c b/trunk/arch/x86/kernel/cpu/cpu_debug.c old mode 100644 new mode 100755 diff --git a/trunk/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/trunk/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 837c2c4cc203..9d3af380c6bd 100644 --- a/trunk/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/trunk/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c @@ -153,8 +153,7 @@ struct drv_cmd { u32 val; }; -/* Called via smp_call_function_single(), on the target CPU */ -static void do_drv_read(void *_cmd) +static long do_drv_read(void *_cmd) { struct drv_cmd *cmd = _cmd; u32 h; @@ -171,10 +170,10 @@ static void do_drv_read(void *_cmd) default: break; } + return 0; } -/* Called via smp_call_function_many(), on the target CPUs */ -static void do_drv_write(void *_cmd) +static long do_drv_write(void *_cmd) { struct drv_cmd *cmd = _cmd; u32 lo, hi; @@ -193,18 +192,23 @@ static void do_drv_write(void *_cmd) default: break; } + return 0; } static void drv_read(struct drv_cmd *cmd) { cmd->val = 0; - smp_call_function_single(cpumask_any(cmd->mask), do_drv_read, cmd, 1); + work_on_cpu(cpumask_any(cmd->mask), do_drv_read, cmd); } static void drv_write(struct drv_cmd *cmd) { - smp_call_function_many(cmd->mask, do_drv_write, cmd, 1); + unsigned int i; + + for_each_cpu(i, cmd->mask) { + work_on_cpu(i, do_drv_write, cmd); + } } static u32 get_cur_val(const struct cpumask *mask) @@ -248,13 +252,15 @@ struct perf_pair { } aperf, mperf; }; -/* Called via smp_call_function_single(), on the target CPU */ -static void read_measured_perf_ctrs(void *_cur) + +static long read_measured_perf_ctrs(void *_cur) { struct perf_pair *cur = _cur; rdmsr(MSR_IA32_APERF, cur->aperf.split.lo, cur->aperf.split.hi); rdmsr(MSR_IA32_MPERF, cur->mperf.split.lo, cur->mperf.split.hi); + + return 0; } /* @@ -277,7 +283,7 @@ static unsigned int get_measured_perf(struct cpufreq_policy *policy, unsigned int perf_percent; unsigned int retval; - if (smp_call_function_single(cpu, read_measured_perf_ctrs, &readin, 1)) + if (!work_on_cpu(cpu, read_measured_perf_ctrs, &readin)) return 0; cur.aperf.whole = readin.aperf.whole - diff --git a/trunk/arch/x86/kernel/ftrace.c b/trunk/arch/x86/kernel/ftrace.c index 18dfa30795c9..70a10ca100f6 100644 --- a/trunk/arch/x86/kernel/ftrace.c +++ b/trunk/arch/x86/kernel/ftrace.c @@ -18,8 +18,6 @@ #include #include -#include - #include #include #include diff --git a/trunk/arch/x86/kernel/irq.c b/trunk/arch/x86/kernel/irq.c index c3fe010d74c8..3aaf7b9e3a8b 100644 --- a/trunk/arch/x86/kernel/irq.c +++ b/trunk/arch/x86/kernel/irq.c @@ -65,7 +65,7 @@ static int show_other_interrupts(struct seq_file *p, int prec) seq_printf(p, " Spurious interrupts\n"); #endif if (generic_interrupt_extension) { - seq_printf(p, "%*s: ", prec, "PLT"); + seq_printf(p, "PLT: "); for_each_online_cpu(j) seq_printf(p, "%10u ", irq_stats(j)->generic_irqs); seq_printf(p, " Platform interrupts\n"); diff --git a/trunk/arch/x86/kernel/mpparse.c b/trunk/arch/x86/kernel/mpparse.c index 70fd7e414c15..dce99dca6cf8 100644 --- a/trunk/arch/x86/kernel/mpparse.c +++ b/trunk/arch/x86/kernel/mpparse.c @@ -679,7 +679,7 @@ void __init get_smp_config(void) __get_smp_config(0); } -static void __init smp_reserve_bootmem(struct mpf_intel *mpf) +static void smp_reserve_bootmem(struct mpf_intel *mpf) { unsigned long size = get_mpc_size(mpf->physptr); #ifdef CONFIG_X86_32 @@ -838,7 +838,7 @@ static int __init get_MP_intsrc_index(struct mpc_intsrc *m) static struct mpc_intsrc __initdata *m_spare[SPARE_SLOT_NUM]; -static void __init check_irq_src(struct mpc_intsrc *m, int *nr_m_spare) +static void check_irq_src(struct mpc_intsrc *m, int *nr_m_spare) { int i; @@ -866,8 +866,7 @@ static void __init check_irq_src(struct mpc_intsrc *m, int *nr_m_spare) } } #else /* CONFIG_X86_IO_APIC */ -static -inline void __init check_irq_src(struct mpc_intsrc *m, int *nr_m_spare) {} +static inline void check_irq_src(struct mpc_intsrc *m, int *nr_m_spare) {} #endif /* CONFIG_X86_IO_APIC */ static int check_slot(unsigned long mpc_new_phys, unsigned long mpc_new_length, diff --git a/trunk/arch/x86/kernel/ptrace.c b/trunk/arch/x86/kernel/ptrace.c index 23b7c8f017e2..fe9345c967de 100644 --- a/trunk/arch/x86/kernel/ptrace.c +++ b/trunk/arch/x86/kernel/ptrace.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -34,8 +35,6 @@ #include #include -#include - #include "tls.h" enum x86_regset { diff --git a/trunk/arch/x86/kernel/reboot.c b/trunk/arch/x86/kernel/reboot.c index 1340dad417f4..2aef36d8aca2 100644 --- a/trunk/arch/x86/kernel/reboot.c +++ b/trunk/arch/x86/kernel/reboot.c @@ -224,14 +224,6 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Dell XPS710"), }, }, - { /* Handle problems with rebooting on Dell DXP061 */ - .callback = set_bios_reboot, - .ident = "Dell DXP061", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), - }, - }, { } }; diff --git a/trunk/arch/x86/kernel/xsave.c b/trunk/arch/x86/kernel/xsave.c index 0a5b04aa98f1..2b54fe002e94 100644 --- a/trunk/arch/x86/kernel/xsave.c +++ b/trunk/arch/x86/kernel/xsave.c @@ -324,7 +324,7 @@ void __ref xsave_cntxt_init(void) } /* - * Support only the state known to OS. + * for now OS knows only about FP/SSE */ pcntxt_mask = pcntxt_mask & XCNTXT_MASK; xsave_init(); diff --git a/trunk/arch/x86/mm/gup.c b/trunk/arch/x86/mm/gup.c index 6340cef6798a..be54176e9eb2 100644 --- a/trunk/arch/x86/mm/gup.c +++ b/trunk/arch/x86/mm/gup.c @@ -219,22 +219,6 @@ static int gup_pud_range(pgd_t pgd, unsigned long addr, unsigned long end, return 1; } -/** - * get_user_pages_fast() - pin user pages in memory - * @start: starting user address - * @nr_pages: number of pages from start to pin - * @write: whether pages will be written to - * @pages: array that receives pointers to the pages pinned. - * Should be at least nr_pages long. - * - * Attempt to pin user pages in memory without taking mm->mmap_sem. - * If not successful, it will fall back to taking the lock and - * calling get_user_pages(). - * - * Returns number of pages pinned. This may be fewer than the number - * requested. If nr_pages is 0 or negative, returns 0. If no pages - * were pinned, returns -errno. - */ int get_user_pages_fast(unsigned long start, int nr_pages, int write, struct page **pages) { diff --git a/trunk/arch/x86/mm/ioremap.c b/trunk/arch/x86/mm/ioremap.c index 09daebfdb11c..0dfa09d69e80 100644 --- a/trunk/arch/x86/mm/ioremap.c +++ b/trunk/arch/x86/mm/ioremap.c @@ -547,7 +547,7 @@ void __init early_ioremap_reset(void) } static void __init __early_set_fixmap(enum fixed_addresses idx, - phys_addr_t phys, pgprot_t flags) + unsigned long phys, pgprot_t flags) { unsigned long addr = __fix_to_virt(idx); pte_t *pte; @@ -566,7 +566,7 @@ static void __init __early_set_fixmap(enum fixed_addresses idx, } static inline void __init early_set_fixmap(enum fixed_addresses idx, - phys_addr_t phys, pgprot_t prot) + unsigned long phys, pgprot_t prot) { if (after_paging_init) __set_fixmap(idx, phys, prot); @@ -607,10 +607,9 @@ static int __init check_early_ioremap_leak(void) late_initcall(check_early_ioremap_leak); static void __init __iomem * -__early_ioremap(resource_size_t phys_addr, unsigned long size, pgprot_t prot) +__early_ioremap(unsigned long phys_addr, unsigned long size, pgprot_t prot) { - unsigned long offset; - resource_size_t last_addr; + unsigned long offset, last_addr; unsigned int nrpages; enum fixed_addresses idx0, idx; int i, slot; @@ -626,15 +625,15 @@ __early_ioremap(resource_size_t phys_addr, unsigned long size, pgprot_t prot) } if (slot < 0) { - printk(KERN_INFO "early_iomap(%08llx, %08lx) not found slot\n", - (u64)phys_addr, size); + printk(KERN_INFO "early_iomap(%08lx, %08lx) not found slot\n", + phys_addr, size); WARN_ON(1); return NULL; } if (early_ioremap_debug) { - printk(KERN_INFO "early_ioremap(%08llx, %08lx) [%d] => ", - (u64)phys_addr, size, slot); + printk(KERN_INFO "early_ioremap(%08lx, %08lx) [%d] => ", + phys_addr, size, slot); dump_stack(); } @@ -681,15 +680,13 @@ __early_ioremap(resource_size_t phys_addr, unsigned long size, pgprot_t prot) } /* Remap an IO device */ -void __init __iomem * -early_ioremap(resource_size_t phys_addr, unsigned long size) +void __init __iomem *early_ioremap(unsigned long phys_addr, unsigned long size) { return __early_ioremap(phys_addr, size, PAGE_KERNEL_IO); } /* Remap memory */ -void __init __iomem * -early_memremap(resource_size_t phys_addr, unsigned long size) +void __init __iomem *early_memremap(unsigned long phys_addr, unsigned long size) { return __early_ioremap(phys_addr, size, PAGE_KERNEL); } diff --git a/trunk/arch/x86/mm/pat.c b/trunk/arch/x86/mm/pat.c index c009a241d562..640339ee4fb2 100644 --- a/trunk/arch/x86/mm/pat.c +++ b/trunk/arch/x86/mm/pat.c @@ -31,7 +31,7 @@ #ifdef CONFIG_X86_PAT int __read_mostly pat_enabled = 1; -static inline void pat_disable(const char *reason) +void __cpuinit pat_disable(const char *reason) { pat_enabled = 0; printk(KERN_INFO "%s\n", reason); diff --git a/trunk/arch/x86/mm/pgtable.c b/trunk/arch/x86/mm/pgtable.c index 7aa03a5389f5..5b7c7c8464fe 100644 --- a/trunk/arch/x86/mm/pgtable.c +++ b/trunk/arch/x86/mm/pgtable.c @@ -345,8 +345,7 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte) fixmaps_set++; } -void native_set_fixmap(enum fixed_addresses idx, phys_addr_t phys, - pgprot_t flags) +void native_set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t flags) { __native_set_fixmap(idx, pfn_pte(phys >> PAGE_SHIFT, flags)); } diff --git a/trunk/arch/x86/xen/enlighten.c b/trunk/arch/x86/xen/enlighten.c index f09e8c36ee80..82cd39a6cbd3 100644 --- a/trunk/arch/x86/xen/enlighten.c +++ b/trunk/arch/x86/xen/enlighten.c @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include @@ -169,23 +168,21 @@ static void __init xen_banner(void) xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : ""); } -static __read_mostly unsigned int cpuid_leaf1_edx_mask = ~0; -static __read_mostly unsigned int cpuid_leaf1_ecx_mask = ~0; - static void xen_cpuid(unsigned int *ax, unsigned int *bx, unsigned int *cx, unsigned int *dx) { - unsigned maskecx = ~0; unsigned maskedx = ~0; /* * Mask out inconvenient features, to try and disable as many * unsupported kernel subsystems as possible. */ - if (*ax == 1) { - maskecx = cpuid_leaf1_ecx_mask; - maskedx = cpuid_leaf1_edx_mask; - } + if (*ax == 1) + maskedx = ~((1 << X86_FEATURE_APIC) | /* disable APIC */ + (1 << X86_FEATURE_ACPI) | /* disable ACPI */ + (1 << X86_FEATURE_MCE) | /* disable MCE */ + (1 << X86_FEATURE_MCA) | /* disable MCA */ + (1 << X86_FEATURE_ACC)); /* thermal monitoring */ asm(XEN_EMULATE_PREFIX "cpuid" : "=a" (*ax), @@ -193,43 +190,9 @@ static void xen_cpuid(unsigned int *ax, unsigned int *bx, "=c" (*cx), "=d" (*dx) : "0" (*ax), "2" (*cx)); - - *cx &= maskecx; *dx &= maskedx; } -static __init void xen_init_cpuid_mask(void) -{ - unsigned int ax, bx, cx, dx; - - cpuid_leaf1_edx_mask = - ~((1 << X86_FEATURE_MCE) | /* disable MCE */ - (1 << X86_FEATURE_MCA) | /* disable MCA */ - (1 << X86_FEATURE_ACC)); /* thermal monitoring */ - - if (!xen_initial_domain()) - cpuid_leaf1_edx_mask &= - ~((1 << X86_FEATURE_APIC) | /* disable local APIC */ - (1 << X86_FEATURE_ACPI)); /* disable ACPI */ - - ax = 1; - xen_cpuid(&ax, &bx, &cx, &dx); - - /* cpuid claims we support xsave; try enabling it to see what happens */ - if (cx & (1 << (X86_FEATURE_XSAVE % 32))) { - unsigned long cr4; - - set_in_cr4(X86_CR4_OSXSAVE); - - cr4 = read_cr4(); - - if ((cr4 & X86_CR4_OSXSAVE) == 0) - cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_XSAVE % 32)); - - clear_in_cr4(X86_CR4_OSXSAVE); - } -} - static void xen_set_debugreg(int reg, unsigned long val) { HYPERVISOR_set_debugreg(reg, val); @@ -321,11 +284,12 @@ static void xen_set_ldt(const void *addr, unsigned entries) static void xen_load_gdt(const struct desc_ptr *dtr) { + unsigned long *frames; unsigned long va = dtr->address; unsigned int size = dtr->size + 1; unsigned pages = (size + PAGE_SIZE - 1) / PAGE_SIZE; - unsigned long frames[pages]; int f; + struct multicall_space mcs; /* A GDT can be up to 64k in size, which corresponds to 8192 8-byte entries, or 16 4k pages.. */ @@ -333,26 +297,19 @@ static void xen_load_gdt(const struct desc_ptr *dtr) BUG_ON(size > 65536); BUG_ON(va & ~PAGE_MASK); - for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) { - int level; - pte_t *ptep = lookup_address(va, &level); - unsigned long pfn, mfn; - void *virt; - - BUG_ON(ptep == NULL); + mcs = xen_mc_entry(sizeof(*frames) * pages); + frames = mcs.args; - pfn = pte_pfn(*ptep); - mfn = pfn_to_mfn(pfn); - virt = __va(PFN_PHYS(pfn)); - - frames[f] = mfn; + for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) { + frames[f] = arbitrary_virt_to_mfn((void *)va); make_lowmem_page_readonly((void *)va); - make_lowmem_page_readonly(virt); + make_lowmem_page_readonly(mfn_to_virt(frames[f])); } - if (HYPERVISOR_set_gdt(frames, size / sizeof(struct desc_struct))) - BUG(); + MULTI_set_gdt(mcs.mc, frames, size / sizeof(struct desc_struct)); + + xen_mc_issue(PARAVIRT_LAZY_CPU); } static void load_TLS_descriptor(struct thread_struct *t, @@ -428,7 +385,7 @@ static void xen_write_ldt_entry(struct desc_struct *dt, int entrynum, static int cvt_gate_to_trap(int vector, const gate_desc *val, struct trap_info *info) { - if (val->type != GATE_TRAP && val->type != GATE_INTERRUPT) + if (val->type != 0xf && val->type != 0xe) return 0; info->vector = vector; @@ -436,8 +393,8 @@ static int cvt_gate_to_trap(int vector, const gate_desc *val, info->cs = gate_segment(*val); info->flags = val->dpl; /* interrupt gates clear IF */ - if (val->type == GATE_INTERRUPT) - info->flags |= 1 << 2; + if (val->type == 0xe) + info->flags |= 4; return 1; } @@ -915,6 +872,7 @@ static const struct machine_ops __initdata xen_machine_ops = { .emergency_restart = xen_emergency_restart, }; + /* First C function to be called on Xen boot */ asmlinkage void __init xen_start_kernel(void) { @@ -939,8 +897,6 @@ asmlinkage void __init xen_start_kernel(void) xen_init_irq_ops(); - xen_init_cpuid_mask(); - #ifdef CONFIG_X86_LOCAL_APIC /* * set up the basic apic ops. @@ -982,11 +938,6 @@ asmlinkage void __init xen_start_kernel(void) if (!xen_initial_domain()) __supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD); -#ifdef CONFIG_X86_64 - /* Work out if we support NX */ - check_efer(); -#endif - /* Don't do the full vcpu_info placement stuff until we have a possible map and a non-dummy shared_info. */ per_cpu(xen_vcpu, 0) = &HYPERVISOR_shared_info->vcpu_info[0]; diff --git a/trunk/arch/x86/xen/mmu.c b/trunk/arch/x86/xen/mmu.c index 9842b1212407..db3802fb7b84 100644 --- a/trunk/arch/x86/xen/mmu.c +++ b/trunk/arch/x86/xen/mmu.c @@ -184,7 +184,7 @@ static inline unsigned p2m_index(unsigned long pfn) } /* Build the parallel p2m_top_mfn structures */ -static void __init xen_build_mfn_list_list(void) +void xen_setup_mfn_list_list(void) { unsigned pfn, idx; @@ -198,10 +198,7 @@ static void __init xen_build_mfn_list_list(void) unsigned topidx = idx * P2M_ENTRIES_PER_PAGE; p2m_top_mfn_list[idx] = virt_to_mfn(&p2m_top_mfn[topidx]); } -} -void xen_setup_mfn_list_list(void) -{ BUG_ON(HYPERVISOR_shared_info == &xen_dummy_shared_info); HYPERVISOR_shared_info->arch.pfn_to_mfn_frame_list_list = @@ -221,8 +218,6 @@ void __init xen_build_dynamic_phys_to_machine(void) p2m_top[topidx] = &mfn_list[pfn]; } - - xen_build_mfn_list_list(); } unsigned long get_phys_to_machine(unsigned long pfn) @@ -238,74 +233,47 @@ unsigned long get_phys_to_machine(unsigned long pfn) } EXPORT_SYMBOL_GPL(get_phys_to_machine); -/* install a new p2m_top page */ -bool install_p2mtop_page(unsigned long pfn, unsigned long *p) +static void alloc_p2m(unsigned long **pp, unsigned long *mfnp) { - unsigned topidx = p2m_top_index(pfn); - unsigned long **pfnp, *mfnp; + unsigned long *p; unsigned i; - pfnp = &p2m_top[topidx]; - mfnp = &p2m_top_mfn[topidx]; + p = (void *)__get_free_page(GFP_KERNEL | __GFP_NOFAIL); + BUG_ON(p == NULL); for (i = 0; i < P2M_ENTRIES_PER_PAGE; i++) p[i] = INVALID_P2M_ENTRY; - if (cmpxchg(pfnp, p2m_missing, p) == p2m_missing) { - *mfnp = virt_to_mfn(p); - return true; - } - - return false; -} - -static void alloc_p2m(unsigned long pfn) -{ - unsigned long *p; - - p = (void *)__get_free_page(GFP_KERNEL | __GFP_NOFAIL); - BUG_ON(p == NULL); - - if (!install_p2mtop_page(pfn, p)) + if (cmpxchg(pp, p2m_missing, p) != p2m_missing) free_page((unsigned long)p); + else + *mfnp = virt_to_mfn(p); } -/* Try to install p2m mapping; fail if intermediate bits missing */ -bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn) +void set_phys_to_machine(unsigned long pfn, unsigned long mfn) { unsigned topidx, idx; + if (unlikely(xen_feature(XENFEAT_auto_translated_physmap))) { + BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY); + return; + } + if (unlikely(pfn >= MAX_DOMAIN_PAGES)) { BUG_ON(mfn != INVALID_P2M_ENTRY); - return true; + return; } topidx = p2m_top_index(pfn); if (p2m_top[topidx] == p2m_missing) { + /* no need to allocate a page to store an invalid entry */ if (mfn == INVALID_P2M_ENTRY) - return true; - return false; + return; + alloc_p2m(&p2m_top[topidx], &p2m_top_mfn[topidx]); } idx = p2m_index(pfn); p2m_top[topidx][idx] = mfn; - - return true; -} - -void set_phys_to_machine(unsigned long pfn, unsigned long mfn) -{ - if (unlikely(xen_feature(XENFEAT_auto_translated_physmap))) { - BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY); - return; - } - - if (unlikely(!__set_phys_to_machine(pfn, mfn))) { - alloc_p2m(pfn); - - if (!__set_phys_to_machine(pfn, mfn)) - BUG(); - } } unsigned long arbitrary_virt_to_mfn(void *vaddr) @@ -1019,7 +987,7 @@ static __init int xen_mark_pinned(struct mm_struct *mm, struct page *page, return 0; } -static void __init xen_mark_init_mm_pinned(void) +void __init xen_mark_init_mm_pinned(void) { xen_pgd_walk(&init_mm, xen_mark_pinned, FIXADDR_TOP); } @@ -1302,8 +1270,8 @@ static void xen_flush_tlb_others(const struct cpumask *cpus, } *args; struct multicall_space mcs; - if (cpumask_empty(cpus)) - return; /* nothing to do */ + BUG_ON(cpumask_empty(cpus)); + BUG_ON(!mm); mcs = xen_mc_entry(sizeof(*args)); args = mcs.args; @@ -1470,29 +1438,10 @@ static __init void xen_set_pte_init(pte_t *ptep, pte_t pte) } #endif -static void pin_pagetable_pfn(unsigned cmd, unsigned long pfn) -{ - struct mmuext_op op; - op.cmd = cmd; - op.arg1.mfn = pfn_to_mfn(pfn); - if (HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF)) - BUG(); -} - /* Early in boot, while setting up the initial pagetable, assume everything is pinned. */ static __init void xen_alloc_pte_init(struct mm_struct *mm, unsigned long pfn) { -#ifdef CONFIG_FLATMEM - BUG_ON(mem_map); /* should only be used early */ -#endif - make_lowmem_page_readonly(__va(PFN_PHYS(pfn))); - pin_pagetable_pfn(MMUEXT_PIN_L1_TABLE, pfn); -} - -/* Used for pmd and pud */ -static __init void xen_alloc_pmd_init(struct mm_struct *mm, unsigned long pfn) -{ #ifdef CONFIG_FLATMEM BUG_ON(mem_map); /* should only be used early */ #endif @@ -1501,15 +1450,18 @@ static __init void xen_alloc_pmd_init(struct mm_struct *mm, unsigned long pfn) /* Early release_pte assumes that all pts are pinned, since there's only init_mm and anything attached to that is pinned. */ -static __init void xen_release_pte_init(unsigned long pfn) +static void xen_release_pte_init(unsigned long pfn) { - pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, pfn); make_lowmem_page_readwrite(__va(PFN_PHYS(pfn))); } -static __init void xen_release_pmd_init(unsigned long pfn) +static void pin_pagetable_pfn(unsigned cmd, unsigned long pfn) { - make_lowmem_page_readwrite(__va(PFN_PHYS(pfn))); + struct mmuext_op op; + op.cmd = cmd; + op.arg1.mfn = pfn_to_mfn(pfn); + if (HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF)) + BUG(); } /* This needs to make sure the new pte page is pinned iff its being @@ -1798,7 +1750,7 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd, } #endif /* CONFIG_X86_64 */ -static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) +static void xen_set_fixmap(unsigned idx, unsigned long phys, pgprot_t prot) { pte_t pte; @@ -1821,9 +1773,6 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) #ifdef CONFIG_X86_LOCAL_APIC case FIX_APIC_BASE: /* maps dummy local APIC */ #endif - case FIX_TEXT_POKE0: - case FIX_TEXT_POKE1: - /* All local page mappings */ pte = pfn_pte(phys, prot); break; @@ -1870,6 +1819,7 @@ __init void xen_post_allocator_init(void) xen_mark_init_mm_pinned(); } + const struct pv_mmu_ops xen_mmu_ops __initdata = { .pagetable_setup_start = xen_pagetable_setup_start, .pagetable_setup_done = xen_pagetable_setup_done, @@ -1893,9 +1843,9 @@ const struct pv_mmu_ops xen_mmu_ops __initdata = { .alloc_pte = xen_alloc_pte_init, .release_pte = xen_release_pte_init, - .alloc_pmd = xen_alloc_pmd_init, + .alloc_pmd = xen_alloc_pte_init, .alloc_pmd_clone = paravirt_nop, - .release_pmd = xen_release_pmd_init, + .release_pmd = xen_release_pte_init, #ifdef CONFIG_HIGHPTE .kmap_atomic_pte = xen_kmap_atomic_pte, @@ -1933,8 +1883,8 @@ const struct pv_mmu_ops xen_mmu_ops __initdata = { .make_pud = PV_CALLEE_SAVE(xen_make_pud), .set_pgd = xen_set_pgd_hyper, - .alloc_pud = xen_alloc_pmd_init, - .release_pud = xen_release_pmd_init, + .alloc_pud = xen_alloc_pte_init, + .release_pud = xen_release_pte_init, #endif /* PAGETABLE_LEVELS == 4 */ .activate_mm = xen_activate_mm, diff --git a/trunk/arch/x86/xen/mmu.h b/trunk/arch/x86/xen/mmu.h index da7302624897..24d1b44a337d 100644 --- a/trunk/arch/x86/xen/mmu.h +++ b/trunk/arch/x86/xen/mmu.h @@ -11,9 +11,6 @@ enum pt_level { }; -bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn); -bool install_p2mtop_page(unsigned long pfn, unsigned long *p); - void set_pte_mfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags); diff --git a/trunk/arch/x86/xen/smp.c b/trunk/arch/x86/xen/smp.c index 429834ec1687..585a6e330837 100644 --- a/trunk/arch/x86/xen/smp.c +++ b/trunk/arch/x86/xen/smp.c @@ -317,7 +317,7 @@ static int __cpuinit xen_cpu_up(unsigned int cpu) BUG_ON(rc); while(per_cpu(cpu_state, cpu) != CPU_ONLINE) { - HYPERVISOR_sched_op(SCHEDOP_yield, NULL); + HYPERVISOR_sched_op(SCHEDOP_yield, 0); barrier(); } @@ -422,7 +422,7 @@ static void xen_smp_send_call_function_ipi(const struct cpumask *mask) /* Make sure other vcpus get a chance to run if they need to. */ for_each_cpu(cpu, mask) { if (xen_vcpu_stolen(cpu)) { - HYPERVISOR_sched_op(SCHEDOP_yield, NULL); + HYPERVISOR_sched_op(SCHEDOP_yield, 0); break; } } diff --git a/trunk/arch/x86/xen/xen-ops.h b/trunk/arch/x86/xen/xen-ops.h index 20139464943c..2f5ef2632ea2 100644 --- a/trunk/arch/x86/xen/xen-ops.h +++ b/trunk/arch/x86/xen/xen-ops.h @@ -57,6 +57,8 @@ irqreturn_t xen_debug_interrupt(int irq, void *dev_id); bool xen_vcpu_stolen(int vcpu); +void xen_mark_init_mm_pinned(void); + void xen_setup_vcpu_info_placement(void); #ifdef CONFIG_SMP diff --git a/trunk/drivers/acpi/battery.c b/trunk/drivers/acpi/battery.c index b0de6312919a..3c7d8942f23b 100644 --- a/trunk/drivers/acpi/battery.c +++ b/trunk/drivers/acpi/battery.c @@ -903,7 +903,7 @@ static struct acpi_driver acpi_battery_driver = { }, }; -static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie) +static void acpi_battery_init_async(void *unused, async_cookie_t cookie) { if (acpi_disabled) return; diff --git a/trunk/drivers/ata/ahci.c b/trunk/drivers/ata/ahci.c index 08186ecbaf8d..57be6bea48eb 100644 --- a/trunk/drivers/ata/ahci.c +++ b/trunk/drivers/ata/ahci.c @@ -114,7 +114,6 @@ enum { board_ahci_sb700 = 5, /* for SB700 and SB800 */ board_ahci_mcp65 = 6, board_ahci_nopmp = 7, - board_ahci_yesncq = 8, /* global controller registers */ HOST_CAP = 0x00, /* host capabilities */ @@ -470,14 +469,6 @@ static const struct ata_port_info ahci_port_info[] = { .udma_mask = ATA_UDMA6, .port_ops = &ahci_ops, }, - /* board_ahci_yesncq */ - { - AHCI_HFLAGS (AHCI_HFLAG_YES_NCQ), - .flags = AHCI_FLAG_COMMON, - .pio_mask = ATA_PIO4, - .udma_mask = ATA_UDMA6, - .port_ops = &ahci_ops, - }, }; static const struct pci_device_id ahci_pci_tbl[] = { @@ -544,30 +535,30 @@ static const struct pci_device_id ahci_pci_tbl[] = { { PCI_VDEVICE(NVIDIA, 0x045d), board_ahci_mcp65 }, /* MCP65 */ { PCI_VDEVICE(NVIDIA, 0x045e), board_ahci_mcp65 }, /* MCP65 */ { PCI_VDEVICE(NVIDIA, 0x045f), board_ahci_mcp65 }, /* MCP65 */ - { PCI_VDEVICE(NVIDIA, 0x0550), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0551), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0552), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0553), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci_yesncq }, /* MCP67 */ - { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci_yesncq }, /* MCP73 */ - { PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci_yesncq }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x0550), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0551), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0552), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0553), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0554), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0555), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0556), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0557), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0558), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x0559), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x055a), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x055b), board_ahci }, /* MCP67 */ + { PCI_VDEVICE(NVIDIA, 0x07f0), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f1), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f2), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f3), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f4), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f5), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f6), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f7), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f8), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07f9), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07fa), board_ahci }, /* MCP73 */ + { PCI_VDEVICE(NVIDIA, 0x07fb), board_ahci }, /* MCP73 */ { PCI_VDEVICE(NVIDIA, 0x0ad0), board_ahci }, /* MCP77 */ { PCI_VDEVICE(NVIDIA, 0x0ad1), board_ahci }, /* MCP77 */ { PCI_VDEVICE(NVIDIA, 0x0ad2), board_ahci }, /* MCP77 */ diff --git a/trunk/drivers/ata/libata-core.c b/trunk/drivers/ata/libata-core.c index 065507c46644..e7ea77cf6069 100644 --- a/trunk/drivers/ata/libata-core.c +++ b/trunk/drivers/ata/libata-core.c @@ -6110,11 +6110,13 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) ata_port_printk(ap, KERN_INFO, "DUMMY\n"); } - /* perform each probe asynchronously */ + /* perform each probe synchronously */ + DPRINTK("probe begin\n"); for (i = 0; i < host->n_ports; i++) { struct ata_port *ap = host->ports[i]; async_schedule(async_port_probe, ap); } + DPRINTK("probe end\n"); return 0; } diff --git a/trunk/drivers/ata/sata_via.c b/trunk/drivers/ata/sata_via.c index bdd43c7f432e..98e8c50703b3 100644 --- a/trunk/drivers/ata/sata_via.c +++ b/trunk/drivers/ata/sata_via.c @@ -566,7 +566,7 @@ static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) static int printed_version; unsigned int i; int rc; - struct ata_host *host = NULL; + struct ata_host *host; int board_id = (int) ent->driver_data; const unsigned *bar_sizes; diff --git a/trunk/drivers/atm/solos-pci.c b/trunk/drivers/atm/solos-pci.c index 9359613addc5..be204308cc1b 100644 --- a/trunk/drivers/atm/solos-pci.c +++ b/trunk/drivers/atm/solos-pci.c @@ -1059,7 +1059,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) goto out; } - err = pci_set_dma_mask(dev, DMA_BIT_MASK(32)); + err = pci_set_dma_mask(dev, DMA_32BIT_MASK); if (err) { dev_warn(&dev->dev, "Failed to set 32-bit DMA mask\n"); goto out; diff --git a/trunk/drivers/block/cciss.c b/trunk/drivers/block/cciss.c index 4d4d5e0d3fa6..0ef6f08aa6ea 100644 --- a/trunk/drivers/block/cciss.c +++ b/trunk/drivers/block/cciss.c @@ -3505,7 +3505,7 @@ static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, u /* The Inbound Post Queue only accepts 32-bit physical addresses for the CCISS commands, so they must be allocated from the lower 4GiB of memory. */ - err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); + err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); if (err) { iounmap(vaddr); return -ENOMEM; diff --git a/trunk/drivers/block/xsysace.c b/trunk/drivers/block/xsysace.c index 4aecf5dc6a93..6cccdc3f5220 100644 --- a/trunk/drivers/block/xsysace.c +++ b/trunk/drivers/block/xsysace.c @@ -563,7 +563,7 @@ static void ace_fsm_dostate(struct ace_device *ace) case ACE_FSM_STATE_IDENTIFY_PREPARE: /* Send identify command */ ace->fsm_task = ACE_TASK_IDENTIFY; - ace->data_ptr = ace->cf_id; + ace->data_ptr = &ace->cf_id; ace->data_count = ACE_BUF_PER_SECTOR; ace_out(ace, ACE_SECCNTCMD, ACE_SECCNTCMD_IDENTIFY); @@ -608,8 +608,8 @@ static void ace_fsm_dostate(struct ace_device *ace) break; case ACE_FSM_STATE_IDENTIFY_COMPLETE: - ace_fix_driveid(ace->cf_id); - ace_dump_mem(ace->cf_id, 512); /* Debug: Dump out disk ID */ + ace_fix_driveid(&ace->cf_id[0]); + ace_dump_mem(&ace->cf_id, 512); /* Debug: Dump out disk ID */ if (ace->data_result) { /* Error occured, disable the disk */ @@ -622,9 +622,9 @@ static void ace_fsm_dostate(struct ace_device *ace) /* Record disk parameters */ set_capacity(ace->gd, - ata_id_u32(ace->cf_id, ATA_ID_LBA_CAPACITY)); + ata_id_u32(&ace->cf_id, ATA_ID_LBA_CAPACITY)); dev_info(ace->dev, "capacity: %i sectors\n", - ata_id_u32(ace->cf_id, ATA_ID_LBA_CAPACITY)); + ata_id_u32(&ace->cf_id, ATA_ID_LBA_CAPACITY)); } /* We're done, drop to IDLE state and notify waiters */ @@ -923,7 +923,7 @@ static int ace_release(struct gendisk *disk, fmode_t mode) static int ace_getgeo(struct block_device *bdev, struct hd_geometry *geo) { struct ace_device *ace = bdev->bd_disk->private_data; - u16 *cf_id = ace->cf_id; + u16 *cf_id = &ace->cf_id[0]; dev_dbg(ace->dev, "ace_getgeo()\n"); diff --git a/trunk/drivers/char/agp/intel-agp.c b/trunk/drivers/char/agp/intel-agp.c index 3686912427ba..9d9490e22e07 100644 --- a/trunk/drivers/char/agp/intel-agp.c +++ b/trunk/drivers/char/agp/intel-agp.c @@ -2131,8 +2131,6 @@ static const struct intel_driver_description { { PCI_DEVICE_ID_INTEL_82845G_HB, PCI_DEVICE_ID_INTEL_82845G_IG, 0, "830M", &intel_845_driver, &intel_830_driver }, { PCI_DEVICE_ID_INTEL_82850_HB, 0, 0, "i850", &intel_850_driver, NULL }, - { PCI_DEVICE_ID_INTEL_82854_HB, PCI_DEVICE_ID_INTEL_82854_IG, 0, "854", - &intel_845_driver, &intel_830_driver }, { PCI_DEVICE_ID_INTEL_82855PM_HB, 0, 0, "855PM", &intel_845_driver, NULL }, { PCI_DEVICE_ID_INTEL_82855GM_HB, PCI_DEVICE_ID_INTEL_82855GM_IG, 0, "855GM", &intel_845_driver, &intel_830_driver }, @@ -2357,7 +2355,6 @@ static struct pci_device_id agp_intel_pci_table[] = { ID(PCI_DEVICE_ID_INTEL_82845_HB), ID(PCI_DEVICE_ID_INTEL_82845G_HB), ID(PCI_DEVICE_ID_INTEL_82850_HB), - ID(PCI_DEVICE_ID_INTEL_82854_HB), ID(PCI_DEVICE_ID_INTEL_82855PM_HB), ID(PCI_DEVICE_ID_INTEL_82855GM_HB), ID(PCI_DEVICE_ID_INTEL_82860_HB), diff --git a/trunk/drivers/char/sysrq.c b/trunk/drivers/char/sysrq.c index b0a6a3e51924..6de020d078e1 100644 --- a/trunk/drivers/char/sysrq.c +++ b/trunk/drivers/char/sysrq.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include diff --git a/trunk/drivers/edac/edac_core.h b/trunk/drivers/edac/edac_core.h index 6ad95c8d6363..28f2c3f959b5 100644 --- a/trunk/drivers/edac/edac_core.h +++ b/trunk/drivers/edac/edac_core.h @@ -767,19 +767,11 @@ static inline void pci_write_bits16(struct pci_dev *pdev, int offset, pci_write_config_word(pdev, offset, value); } -/* - * pci_write_bits32 - * - * edac local routine to do pci_write_config_dword, but adds - * a mask parameter. If mask is all ones, ignore the mask. - * Otherwise utilize the mask to isolate specified bits - * - * write all or some bits in a dword-register - */ +/* write all or some bits in a dword-register*/ static inline void pci_write_bits32(struct pci_dev *pdev, int offset, u32 value, u32 mask) { - if (mask != 0xffffffff) { + if (mask != 0xffff) { u32 buf; pci_read_config_dword(pdev, offset, &buf); diff --git a/trunk/drivers/edac/edac_device.c b/trunk/drivers/edac/edac_device.c index a7d2c717d033..ca9113e1c106 100644 --- a/trunk/drivers/edac/edac_device.c +++ b/trunk/drivers/edac/edac_device.c @@ -389,7 +389,7 @@ static void del_edac_device_from_global_list(struct edac_device_ctl_info */ static void edac_device_workq_function(struct work_struct *work_req) { - struct delayed_work *d_work = to_delayed_work(work_req); + struct delayed_work *d_work = (struct delayed_work *)work_req; struct edac_device_ctl_info *edac_dev = to_edac_device_ctl_work(d_work); mutex_lock(&device_ctls_mutex); diff --git a/trunk/drivers/edac/edac_mc.c b/trunk/drivers/edac/edac_mc.c index 335b7ebdb11c..25d66940b4fa 100644 --- a/trunk/drivers/edac/edac_mc.c +++ b/trunk/drivers/edac/edac_mc.c @@ -260,7 +260,7 @@ static int edac_mc_assert_error_check_and_clear(void) */ static void edac_mc_workq_function(struct work_struct *work_req) { - struct delayed_work *d_work = to_delayed_work(work_req); + struct delayed_work *d_work = (struct delayed_work *)work_req; struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work); mutex_lock(&mem_ctls_mutex); diff --git a/trunk/drivers/edac/edac_pci.c b/trunk/drivers/edac/edac_pci.c index 30b585b1d60b..5b150aea703a 100644 --- a/trunk/drivers/edac/edac_pci.c +++ b/trunk/drivers/edac/edac_pci.c @@ -233,7 +233,7 @@ EXPORT_SYMBOL_GPL(edac_pci_find); */ static void edac_pci_workq_function(struct work_struct *work_req) { - struct delayed_work *d_work = to_delayed_work(work_req); + struct delayed_work *d_work = (struct delayed_work *)work_req; struct edac_pci_ctl_info *pci = to_edac_pci_ctl_work(d_work); int msec; unsigned long delay; diff --git a/trunk/drivers/hwmon/Kconfig b/trunk/drivers/hwmon/Kconfig index d73f5f473e38..0e8a9185f676 100644 --- a/trunk/drivers/hwmon/Kconfig +++ b/trunk/drivers/hwmon/Kconfig @@ -692,16 +692,6 @@ config SENSORS_PCF8591 These devices are hard to detect and rarely found on mainstream hardware. If unsure, say N. -config SENSORS_SHT15 - tristate "Sensiron humidity and temperature sensors. SHT15 and compat." - depends on GENERIC_GPIO - help - If you say yes here you get support for the Sensiron SHT10, SHT11, - SHT15, SHT71, SHT75 humidity and temperature sensors. - - This driver can also be built as a module. If so, the module - will be called sht15. - config SENSORS_SIS5595 tristate "Silicon Integrated Systems Corp. SiS5595" depends on PCI diff --git a/trunk/drivers/hwmon/Makefile b/trunk/drivers/hwmon/Makefile index 0ae26984ba45..1d3757837b4f 100644 --- a/trunk/drivers/hwmon/Makefile +++ b/trunk/drivers/hwmon/Makefile @@ -76,7 +76,6 @@ obj-$(CONFIG_SENSORS_MAX6650) += max6650.o obj-$(CONFIG_SENSORS_PC87360) += pc87360.o obj-$(CONFIG_SENSORS_PC87427) += pc87427.o obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o -obj-$(CONFIG_SENSORS_SHT15) += sht15.o obj-$(CONFIG_SENSORS_SIS5595) += sis5595.o obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o diff --git a/trunk/drivers/hwmon/hp_accel.c b/trunk/drivers/hwmon/hp_accel.c index abca7e9f953b..55d3dc565be6 100644 --- a/trunk/drivers/hwmon/hp_accel.c +++ b/trunk/drivers/hwmon/hp_accel.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include diff --git a/trunk/drivers/hwmon/sht15.c b/trunk/drivers/hwmon/sht15.c deleted file mode 100644 index 6cbdc2fea734..000000000000 --- a/trunk/drivers/hwmon/sht15.c +++ /dev/null @@ -1,692 +0,0 @@ -/* - * sht15.c - support for the SHT15 Temperature and Humidity Sensor - * - * Copyright (c) 2009 Jonathan Cameron - * - * Copyright (c) 2007 Wouter Horre - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Currently ignoring checksum on readings. - * Default resolution only (14bit temp, 12bit humidity) - * Ignoring battery status. - * Heater not enabled. - * Timings are all conservative. - * - * Data sheet available (1/2009) at - * http://www.sensirion.ch/en/pdf/product_information/Datasheet-humidity-sensor-SHT1x.pdf - * - * Regulator supply name = vcc - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SHT15_MEASURE_TEMP 3 -#define SHT15_MEASURE_RH 5 - -#define SHT15_READING_NOTHING 0 -#define SHT15_READING_TEMP 1 -#define SHT15_READING_HUMID 2 - -/* Min timings in nsecs */ -#define SHT15_TSCKL 100 /* clock low */ -#define SHT15_TSCKH 100 /* clock high */ -#define SHT15_TSU 150 /* data setup time */ - -/** - * struct sht15_temppair - elements of voltage dependant temp calc - * @vdd: supply voltage in microvolts - * @d1: see data sheet - */ -struct sht15_temppair { - int vdd; /* microvolts */ - int d1; -}; - -/* Table 9 from data sheet - relates temperature calculation - * to supply voltage. - */ -static const struct sht15_temppair temppoints[] = { - { 2500000, -39400 }, - { 3000000, -39600 }, - { 3500000, -39700 }, - { 4000000, -39800 }, - { 5000000, -40100 }, -}; - -/** - * struct sht15_data - device instance specific data - * @pdata: platform data (gpio's etc) - * @read_work: bh of interrupt handler - * @wait_queue: wait queue for getting values from device - * @val_temp: last temperature value read from device - * @val_humid: last humidity value read from device - * @flag: status flag used to identify what the last request was - * @valid: are the current stored values valid (start condition) - * @last_updat: time of last update - * @read_lock: mutex to ensure only one read in progress - * at a time. - * @dev: associate device structure - * @hwmon_dev: device associated with hwmon subsystem - * @reg: associated regulator (if specified) - * @nb: notifier block to handle notifications of voltage changes - * @supply_uV: local copy of supply voltage used to allow - * use of regulator consumer if available - * @supply_uV_valid: indicates that an updated value has not yet - * been obtained from the regulator and so any calculations - * based upon it will be invalid. - * @update_supply_work: work struct that is used to update the supply_uV - * @interrupt_handled: flag used to indicate a hander has been scheduled - */ -struct sht15_data { - struct sht15_platform_data *pdata; - struct work_struct read_work; - wait_queue_head_t wait_queue; - uint16_t val_temp; - uint16_t val_humid; - u8 flag; - u8 valid; - unsigned long last_updat; - struct mutex read_lock; - struct device *dev; - struct device *hwmon_dev; - struct regulator *reg; - struct notifier_block nb; - int supply_uV; - int supply_uV_valid; - struct work_struct update_supply_work; - atomic_t interrupt_handled; -}; - -/** - * sht15_connection_reset() - reset the comms interface - * @data: sht15 specific data - * - * This implements section 3.4 of the data sheet - */ -static void sht15_connection_reset(struct sht15_data *data) -{ - int i; - gpio_direction_output(data->pdata->gpio_data, 1); - ndelay(SHT15_TSCKL); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); - for (i = 0; i < 9; ++i) { - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); - } -} -/** - * sht15_send_bit() - send an individual bit to the device - * @data: device state data - * @val: value of bit to be sent - **/ -static inline void sht15_send_bit(struct sht15_data *data, int val) -{ - - gpio_set_value(data->pdata->gpio_data, val); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); /* clock low time */ -} - -/** - * sht15_transmission_start() - specific sequence for new transmission - * - * @data: device state data - * Timings for this are not documented on the data sheet, so very - * conservative ones used in implementation. This implements - * figure 12 on the data sheet. - **/ -static void sht15_transmission_start(struct sht15_data *data) -{ - /* ensure data is high and output */ - gpio_direction_output(data->pdata->gpio_data, 1); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - gpio_set_value(data->pdata->gpio_data, 0); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - gpio_set_value(data->pdata->gpio_data, 1); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); -} -/** - * sht15_send_byte() - send a single byte to the device - * @data: device state - * @byte: value to be sent - **/ -static void sht15_send_byte(struct sht15_data *data, u8 byte) -{ - int i; - for (i = 0; i < 8; i++) { - sht15_send_bit(data, !!(byte & 0x80)); - byte <<= 1; - } -} -/** - * sht15_wait_for_response() - checks for ack from device - * @data: device state - **/ -static int sht15_wait_for_response(struct sht15_data *data) -{ - gpio_direction_input(data->pdata->gpio_data); - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - if (gpio_get_value(data->pdata->gpio_data)) { - gpio_set_value(data->pdata->gpio_sck, 0); - dev_err(data->dev, "Command not acknowledged\n"); - sht15_connection_reset(data); - return -EIO; - } - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); - return 0; -} - -/** - * sht15_send_cmd() - Sends a command to the device. - * @data: device state - * @cmd: command byte to be sent - * - * On entry, sck is output low, data is output pull high - * and the interrupt disabled. - **/ -static int sht15_send_cmd(struct sht15_data *data, u8 cmd) -{ - int ret = 0; - sht15_transmission_start(data); - sht15_send_byte(data, cmd); - ret = sht15_wait_for_response(data); - return ret; -} -/** - * sht15_update_single_val() - get a new value from device - * @data: device instance specific data - * @command: command sent to request value - * @timeout_msecs: timeout after which comms are assumed - * to have failed are reset. - **/ -static inline int sht15_update_single_val(struct sht15_data *data, - int command, - int timeout_msecs) -{ - int ret; - ret = sht15_send_cmd(data, command); - if (ret) - return ret; - - gpio_direction_input(data->pdata->gpio_data); - atomic_set(&data->interrupt_handled, 0); - - enable_irq(gpio_to_irq(data->pdata->gpio_data)); - if (gpio_get_value(data->pdata->gpio_data) == 0) { - disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); - /* Only relevant if the interrupt hasn't occured. */ - if (!atomic_read(&data->interrupt_handled)) - schedule_work(&data->read_work); - } - ret = wait_event_timeout(data->wait_queue, - (data->flag == SHT15_READING_NOTHING), - msecs_to_jiffies(timeout_msecs)); - if (ret == 0) {/* timeout occurred */ - disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data));; - sht15_connection_reset(data); - return -ETIME; - } - return 0; -} - -/** - * sht15_update_vals() - get updated readings from device if too old - * @data: device state - **/ -static int sht15_update_vals(struct sht15_data *data) -{ - int ret = 0; - int timeout = HZ; - - mutex_lock(&data->read_lock); - if (time_after(jiffies, data->last_updat + timeout) - || !data->valid) { - data->flag = SHT15_READING_HUMID; - ret = sht15_update_single_val(data, SHT15_MEASURE_RH, 160); - if (ret) - goto error_ret; - data->flag = SHT15_READING_TEMP; - ret = sht15_update_single_val(data, SHT15_MEASURE_TEMP, 400); - if (ret) - goto error_ret; - data->valid = 1; - data->last_updat = jiffies; - } -error_ret: - mutex_unlock(&data->read_lock); - - return ret; -} - -/** - * sht15_calc_temp() - convert the raw reading to a temperature - * @data: device state - * - * As per section 4.3 of the data sheet. - **/ -static inline int sht15_calc_temp(struct sht15_data *data) -{ - int d1 = 0; - int i; - - for (i = 1; i < ARRAY_SIZE(temppoints) - 1; i++) - /* Find pointer to interpolate */ - if (data->supply_uV > temppoints[i - 1].vdd) { - d1 = (data->supply_uV/1000 - temppoints[i - 1].vdd) - * (temppoints[i].d1 - temppoints[i - 1].d1) - / (temppoints[i].vdd - temppoints[i - 1].vdd) - + temppoints[i - 1].d1; - break; - } - - return data->val_temp*10 + d1; -} - -/** - * sht15_calc_humid() - using last temperature convert raw to humid - * @data: device state - * - * This is the temperature compensated version as per section 4.2 of - * the data sheet. - **/ -static inline int sht15_calc_humid(struct sht15_data *data) -{ - int RHlinear; /* milli percent */ - int temp = sht15_calc_temp(data); - - const int c1 = -4; - const int c2 = 40500; /* x 10 ^ -6 */ - const int c3 = 2800; /* x10 ^ -9 */ - - RHlinear = c1*1000 - + c2 * data->val_humid/1000 - + (data->val_humid * data->val_humid * c3)/1000000; - return (temp - 25000) * (10000 + 800 * data->val_humid) - / 1000000 + RHlinear; -} - -static ssize_t sht15_show_temp(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - int ret; - struct sht15_data *data = dev_get_drvdata(dev); - - /* Technically no need to read humidity as well */ - ret = sht15_update_vals(data); - - return ret ? ret : sprintf(buf, "%d\n", - sht15_calc_temp(data)); -} - -static ssize_t sht15_show_humidity(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - int ret; - struct sht15_data *data = dev_get_drvdata(dev); - - ret = sht15_update_vals(data); - - return ret ? ret : sprintf(buf, "%d\n", sht15_calc_humid(data)); - -}; -static ssize_t show_name(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct platform_device *pdev = to_platform_device(dev); - return sprintf(buf, "%s\n", pdev->name); -} - -static SENSOR_DEVICE_ATTR(temp1_input, - S_IRUGO, sht15_show_temp, - NULL, 0); -static SENSOR_DEVICE_ATTR(humidity1_input, - S_IRUGO, sht15_show_humidity, - NULL, 0); -static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); -static struct attribute *sht15_attrs[] = { - &sensor_dev_attr_temp1_input.dev_attr.attr, - &sensor_dev_attr_humidity1_input.dev_attr.attr, - &dev_attr_name.attr, - NULL, -}; - -static const struct attribute_group sht15_attr_group = { - .attrs = sht15_attrs, -}; - -static irqreturn_t sht15_interrupt_fired(int irq, void *d) -{ - struct sht15_data *data = d; - /* First disable the interrupt */ - disable_irq_nosync(irq); - atomic_inc(&data->interrupt_handled); - /* Then schedule a reading work struct */ - if (data->flag != SHT15_READING_NOTHING) - schedule_work(&data->read_work); - return IRQ_HANDLED; -} - -/* Each byte of data is acknowledged by pulling the data line - * low for one clock pulse. - */ -static void sht15_ack(struct sht15_data *data) -{ - gpio_direction_output(data->pdata->gpio_data, 0); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_data, 1); - - gpio_direction_input(data->pdata->gpio_data); -} -/** - * sht15_end_transmission() - notify device of end of transmission - * @data: device state - * - * This is basically a NAK. (single clock pulse, data high) - **/ -static void sht15_end_transmission(struct sht15_data *data) -{ - gpio_direction_output(data->pdata->gpio_data, 1); - ndelay(SHT15_TSU); - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); -} - -static void sht15_bh_read_data(struct work_struct *work_s) -{ - int i; - uint16_t val = 0; - struct sht15_data *data - = container_of(work_s, struct sht15_data, - read_work); - /* Firstly, verify the line is low */ - if (gpio_get_value(data->pdata->gpio_data)) { - /* If not, then start the interrupt again - care - here as could have gone low in meantime so verify - it hasn't! - */ - atomic_set(&data->interrupt_handled, 0); - enable_irq(gpio_to_irq(data->pdata->gpio_data)); - /* If still not occured or another handler has been scheduled */ - if (gpio_get_value(data->pdata->gpio_data) - || atomic_read(&data->interrupt_handled)) - return; - } - /* Read the data back from the device */ - for (i = 0; i < 16; ++i) { - val <<= 1; - gpio_set_value(data->pdata->gpio_sck, 1); - ndelay(SHT15_TSCKH); - val |= !!gpio_get_value(data->pdata->gpio_data); - gpio_set_value(data->pdata->gpio_sck, 0); - ndelay(SHT15_TSCKL); - if (i == 7) - sht15_ack(data); - } - /* Tell the device we are done */ - sht15_end_transmission(data); - - switch (data->flag) { - case SHT15_READING_TEMP: - data->val_temp = val; - break; - case SHT15_READING_HUMID: - data->val_humid = val; - break; - } - - data->flag = SHT15_READING_NOTHING; - wake_up(&data->wait_queue); -} - -static void sht15_update_voltage(struct work_struct *work_s) -{ - struct sht15_data *data - = container_of(work_s, struct sht15_data, - update_supply_work); - data->supply_uV = regulator_get_voltage(data->reg); -} - -/** - * sht15_invalidate_voltage() - mark supply voltage invalid when notified by reg - * @nb: associated notification structure - * @event: voltage regulator state change event code - * @ignored: function parameter - ignored here - * - * Note that as the notification code holds the regulator lock, we have - * to schedule an update of the supply voltage rather than getting it directly. - **/ -static int sht15_invalidate_voltage(struct notifier_block *nb, - unsigned long event, - void *ignored) -{ - struct sht15_data *data = container_of(nb, struct sht15_data, nb); - - if (event == REGULATOR_EVENT_VOLTAGE_CHANGE) - data->supply_uV_valid = false; - schedule_work(&data->update_supply_work); - - return NOTIFY_OK; -} - -static int __devinit sht15_probe(struct platform_device *pdev) -{ - int ret = 0; - struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL); - - if (!data) { - ret = -ENOMEM; - dev_err(&pdev->dev, "kzalloc failed"); - goto error_ret; - } - - INIT_WORK(&data->read_work, sht15_bh_read_data); - INIT_WORK(&data->update_supply_work, sht15_update_voltage); - platform_set_drvdata(pdev, data); - mutex_init(&data->read_lock); - data->dev = &pdev->dev; - init_waitqueue_head(&data->wait_queue); - - if (pdev->dev.platform_data == NULL) { - dev_err(&pdev->dev, "no platform data supplied"); - goto err_free_data; - } - data->pdata = pdev->dev.platform_data; - data->supply_uV = data->pdata->supply_mv*1000; - -/* If a regulator is available, query what the supply voltage actually is!*/ - data->reg = regulator_get(data->dev, "vcc"); - if (!IS_ERR(data->reg)) { - data->supply_uV = regulator_get_voltage(data->reg); - regulator_enable(data->reg); - /* setup a notifier block to update this if another device - * causes the voltage to change */ - data->nb.notifier_call = &sht15_invalidate_voltage; - ret = regulator_register_notifier(data->reg, &data->nb); - } -/* Try requesting the GPIOs */ - ret = gpio_request(data->pdata->gpio_sck, "SHT15 sck"); - if (ret) { - dev_err(&pdev->dev, "gpio request failed"); - goto err_free_data; - } - gpio_direction_output(data->pdata->gpio_sck, 0); - ret = gpio_request(data->pdata->gpio_data, "SHT15 data"); - if (ret) { - dev_err(&pdev->dev, "gpio request failed"); - goto err_release_gpio_sck; - } - ret = sysfs_create_group(&pdev->dev.kobj, &sht15_attr_group); - if (ret) { - dev_err(&pdev->dev, "sysfs create failed"); - goto err_free_data; - } - - ret = request_irq(gpio_to_irq(data->pdata->gpio_data), - sht15_interrupt_fired, - IRQF_TRIGGER_FALLING, - "sht15 data", - data); - if (ret) { - dev_err(&pdev->dev, "failed to get irq for data line"); - goto err_release_gpio_data; - } - disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); - sht15_connection_reset(data); - sht15_send_cmd(data, 0x1E); - - data->hwmon_dev = hwmon_device_register(data->dev); - if (IS_ERR(data->hwmon_dev)) { - ret = PTR_ERR(data->hwmon_dev); - goto err_release_gpio_data; - } - return 0; - -err_release_gpio_data: - gpio_free(data->pdata->gpio_data); -err_release_gpio_sck: - gpio_free(data->pdata->gpio_sck); -err_free_data: - kfree(data); -error_ret: - - return ret; -} - -static int __devexit sht15_remove(struct platform_device *pdev) -{ - struct sht15_data *data = platform_get_drvdata(pdev); - - /* Make sure any reads from the device are done and - * prevent new ones beginnning */ - mutex_lock(&data->read_lock); - hwmon_device_unregister(data->hwmon_dev); - sysfs_remove_group(&pdev->dev.kobj, &sht15_attr_group); - if (!IS_ERR(data->reg)) { - regulator_unregister_notifier(data->reg, &data->nb); - regulator_disable(data->reg); - regulator_put(data->reg); - } - - free_irq(gpio_to_irq(data->pdata->gpio_data), data); - gpio_free(data->pdata->gpio_data); - gpio_free(data->pdata->gpio_sck); - mutex_unlock(&data->read_lock); - kfree(data); - return 0; -} - - -static struct platform_driver sht_drivers[] = { - { - .driver = { - .name = "sht10", - .owner = THIS_MODULE, - }, - .probe = sht15_probe, - .remove = sht15_remove, - }, { - .driver = { - .name = "sht11", - .owner = THIS_MODULE, - }, - .probe = sht15_probe, - .remove = sht15_remove, - }, { - .driver = { - .name = "sht15", - .owner = THIS_MODULE, - }, - .probe = sht15_probe, - .remove = sht15_remove, - }, { - .driver = { - .name = "sht71", - .owner = THIS_MODULE, - }, - .probe = sht15_probe, - .remove = sht15_remove, - }, { - .driver = { - .name = "sht75", - .owner = THIS_MODULE, - }, - .probe = sht15_probe, - .remove = sht15_remove, - }, -}; - - -static int __init sht15_init(void) -{ - int ret; - int i; - - for (i = 0; i < ARRAY_SIZE(sht_drivers); i++) { - ret = platform_driver_register(&sht_drivers[i]); - if (ret) - goto error_unreg; - } - - return 0; - -error_unreg: - while (--i >= 0) - platform_driver_unregister(&sht_drivers[i]); - - return ret; -} -module_init(sht15_init); - -static void __exit sht15_exit(void) -{ - int i; - for (i = ARRAY_SIZE(sht_drivers) - 1; i >= 0; i--) - platform_driver_unregister(&sht_drivers[i]); -} -module_exit(sht15_exit); - -MODULE_LICENSE("GPL"); diff --git a/trunk/drivers/i2c/algos/i2c-algo-pca.c b/trunk/drivers/i2c/algos/i2c-algo-pca.c index 6318f7ddc1d4..f68e5f8e23ee 100644 --- a/trunk/drivers/i2c/algos/i2c-algo-pca.c +++ b/trunk/drivers/i2c/algos/i2c-algo-pca.c @@ -190,7 +190,7 @@ static int pca_xfer(struct i2c_adapter *i2c_adap, int completed = 1; unsigned long timeout = jiffies + i2c_adap->timeout; - while ((state = pca_status(adap)) != 0xf8) { + while (pca_status(adap) != 0xf8) { if (time_before(jiffies, timeout)) { msleep(10); } else { diff --git a/trunk/drivers/i2c/busses/Kconfig b/trunk/drivers/i2c/busses/Kconfig index a48c8aee0218..94eae5c3cbc7 100644 --- a/trunk/drivers/i2c/busses/Kconfig +++ b/trunk/drivers/i2c/busses/Kconfig @@ -604,14 +604,12 @@ comment "Graphics adapter I2C/DDC channel drivers" depends on PCI config I2C_VOODOO3 - tristate "Voodoo 3 (DEPRECATED)" + tristate "Voodoo 3" depends on PCI select I2C_ALGOBIT help If you say yes to this option, support will be included for the - Voodoo 3 I2C interface. This driver is deprecated and you should - use the tdfxfb driver instead, which additionally provides - framebuffer support. + Voodoo 3 I2C interface. This driver can also be built as a module. If so, the module will be called i2c-voodoo3. diff --git a/trunk/drivers/i2c/i2c-core.c b/trunk/drivers/i2c/i2c-core.c index 85e2e919d1cd..b6f3a0de6ca2 100644 --- a/trunk/drivers/i2c/i2c-core.c +++ b/trunk/drivers/i2c/i2c-core.c @@ -716,7 +716,8 @@ int i2c_register_driver(struct module *owner, struct i2c_driver *driver) /* new style driver methods can't mix with legacy ones */ if (is_newstyle_driver(driver)) { - if (driver->detach_adapter || driver->detach_client) { + if (driver->attach_adapter || driver->detach_adapter + || driver->detach_client) { printk(KERN_WARNING "i2c-core: driver [%s] is confused\n", driver->driver.name); diff --git a/trunk/drivers/ide/at91_ide.c b/trunk/drivers/ide/at91_ide.c index 403d0e4265db..8eda552326e9 100644 --- a/trunk/drivers/ide/at91_ide.c +++ b/trunk/drivers/ide/at91_ide.c @@ -20,6 +20,7 @@ * */ +#include #include #include #include @@ -174,6 +175,90 @@ static void at91_ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, leave_16bit(chipselect, mode); } +static u8 ide_mm_inb(unsigned long port) +{ + return readb((void __iomem *) port); +} + +static void ide_mm_outb(u8 value, unsigned long port) +{ + writeb(value, (void __iomem *) port); +} + +static void at91_ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + u8 HIHI = (cmd->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; + + if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) + HIHI = 0xFF; + + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) + ide_mm_outb(tf->hob_feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) + ide_mm_outb(tf->hob_nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) + ide_mm_outb(tf->hob_lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) + ide_mm_outb(tf->hob_lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) + ide_mm_outb(tf->hob_lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE) + ide_mm_outb(tf->feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT) + ide_mm_outb(tf->nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL) + ide_mm_outb(tf->lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM) + ide_mm_outb(tf->lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH) + ide_mm_outb(tf->lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) + ide_mm_outb((tf->device & HIHI) | drive->select, io_ports->device_addr); +} + +static void at91_ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + + /* be sure we're looking at the low order bits */ + ide_mm_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) + tf->error = ide_mm_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) + tf->nsect = ide_mm_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) + tf->lbal = ide_mm_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) + tf->lbam = ide_mm_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) + tf->lbah = ide_mm_inb(io_ports->lbah_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) + tf->device = ide_mm_inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + ide_mm_outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = ide_mm_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = ide_mm_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = ide_mm_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = ide_mm_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = ide_mm_inb(io_ports->lbah_addr); + } +} + static void at91_ide_set_pio_mode(ide_drive_t *drive, const u8 pio) { struct ide_timing *timing; @@ -199,8 +284,8 @@ static const struct ide_tp_ops at91_ide_tp_ops = { .write_devctl = ide_write_devctl, .dev_select = ide_dev_select, - .tf_load = ide_tf_load, - .tf_read = ide_tf_read, + .tf_load = at91_ide_tf_load, + .tf_read = at91_ide_tf_read, .input_data = at91_ide_input_data, .output_data = at91_ide_output_data, @@ -215,7 +300,7 @@ static const struct ide_port_info at91_ide_port_info __initdata = { .tp_ops = &at91_ide_tp_ops, .host_flags = IDE_HFLAG_MMIO | IDE_HFLAG_NO_DMA | IDE_HFLAG_SINGLE | IDE_HFLAG_NO_IO_32BIT | IDE_HFLAG_UNMASK_IRQS, - .pio_mask = ATA_PIO6, + .pio_mask = ATA_PIO5, }; /* diff --git a/trunk/drivers/ide/falconide.c b/trunk/drivers/ide/falconide.c index 0e2df6755ec9..afa2af9a362b 100644 --- a/trunk/drivers/ide/falconide.c +++ b/trunk/drivers/ide/falconide.c @@ -20,7 +20,6 @@ #include #include #include -#include #define DRV_NAME "falconide" @@ -68,10 +67,8 @@ static void falconide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, { unsigned long data_addr = drive->hwif->io_ports.data_addr; - if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { - __ide_mm_insw(data_addr, buf, (len + 1) / 2); - return; - } + if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) + return insw(data_addr, buf, (len + 1) / 2); raw_insw_swapw((u16 *)data_addr, buf, (len + 1) / 2); } @@ -81,10 +78,8 @@ static void falconide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, { unsigned long data_addr = drive->hwif->io_ports.data_addr; - if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { - __ide_mm_outsw(data_addr, buf, (len + 1) / 2); - return; - } + if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) + return outsw(data_addr, buf, (len + 1) / 2); raw_outsw_swapw((u16 *)data_addr, buf, (len + 1) / 2); } diff --git a/trunk/drivers/ide/ide-acpi.c b/trunk/drivers/ide/ide-acpi.c index 77f79d26b264..12f436951bff 100644 --- a/trunk/drivers/ide/ide-acpi.c +++ b/trunk/drivers/ide/ide-acpi.c @@ -318,9 +318,8 @@ static int do_drive_set_taskfiles(ide_drive_t *drive, /* convert GTF to taskfile */ memset(&cmd, 0, sizeof(cmd)); - memcpy(&cmd.tf.feature, gtf, REGS_PER_GTF); - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + memcpy(&cmd.tf_array[7], gtf, REGS_PER_GTF); + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; err = ide_no_data_taskfile(drive, &cmd); if (err) { diff --git a/trunk/drivers/ide/ide-atapi.c b/trunk/drivers/ide/ide-atapi.c index 7201b176d75b..3e43b889dd64 100644 --- a/trunk/drivers/ide/ide-atapi.c +++ b/trunk/drivers/ide/ide-atapi.c @@ -254,13 +254,16 @@ EXPORT_SYMBOL_GPL(ide_cd_get_xferlen); void ide_read_bcount_and_ireason(ide_drive_t *drive, u16 *bcount, u8 *ireason) { - struct ide_taskfile tf; + struct ide_cmd cmd; - drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT | - IDE_VALID_LBAM | IDE_VALID_LBAH); + memset(&cmd, 0, sizeof(cmd)); + cmd.tf_flags = IDE_TFLAG_IN_LBAH | IDE_TFLAG_IN_LBAM | + IDE_TFLAG_IN_NSECT; - *bcount = (tf.lbah << 8) | tf.lbam; - *ireason = tf.nsect & 3; + drive->hwif->tp_ops->tf_read(drive, &cmd); + + *bcount = (cmd.tf.lbah << 8) | cmd.tf.lbam; + *ireason = cmd.tf.nsect & 3; } EXPORT_SYMBOL_GPL(ide_read_bcount_and_ireason); @@ -436,12 +439,12 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive) return ide_started; } -static void ide_init_packet_cmd(struct ide_cmd *cmd, u8 valid_tf, +static void ide_init_packet_cmd(struct ide_cmd *cmd, u32 tf_flags, u16 bcount, u8 dma) { - cmd->protocol = dma ? ATAPI_PROT_DMA : ATAPI_PROT_PIO; - cmd->valid.out.tf = IDE_VALID_LBAH | IDE_VALID_LBAM | - IDE_VALID_FEATURE | valid_tf; + cmd->protocol = dma ? ATAPI_PROT_DMA : ATAPI_PROT_PIO; + cmd->tf_flags |= IDE_TFLAG_OUT_LBAH | IDE_TFLAG_OUT_LBAM | + IDE_TFLAG_OUT_FEATURE | tf_flags; cmd->tf.command = ATA_CMD_PACKET; cmd->tf.feature = dma; /* Use PIO/DMA */ cmd->tf.lbam = bcount & 0xff; @@ -450,11 +453,14 @@ static void ide_init_packet_cmd(struct ide_cmd *cmd, u8 valid_tf, static u8 ide_read_ireason(ide_drive_t *drive) { - struct ide_taskfile tf; + struct ide_cmd cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.tf_flags = IDE_TFLAG_IN_NSECT; - drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT); + drive->hwif->tp_ops->tf_read(drive, &cmd); - return tf.nsect & 3; + return cmd.tf.nsect & 3; } static u8 ide_wait_ireason(ide_drive_t *drive, u8 ireason) @@ -582,12 +588,12 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) ide_expiry_t *expiry = NULL; struct request *rq = hwif->rq; unsigned int timeout; + u32 tf_flags; u16 bcount; - u8 valid_tf; u8 drq_int = !!(drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT); if (dev_is_idecd(drive)) { - valid_tf = IDE_VALID_NSECT | IDE_VALID_LBAL; + tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL; bcount = ide_cd_get_xferlen(rq); expiry = ide_cd_expiry; timeout = ATAPI_WAIT_PC; @@ -601,7 +607,7 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) pc->xferred = 0; pc->cur_pos = pc->buf; - valid_tf = IDE_VALID_DEVICE; + tf_flags = IDE_TFLAG_OUT_DEVICE; bcount = ((drive->media == ide_tape) ? pc->req_xfer : min(pc->req_xfer, 63 * 1024)); @@ -621,7 +627,7 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) : WAIT_TAPE_CMD; } - ide_init_packet_cmd(cmd, valid_tf, bcount, drive->dma); + ide_init_packet_cmd(cmd, tf_flags, bcount, drive->dma); (void)do_rw_taskfile(drive, cmd); diff --git a/trunk/drivers/ide/ide-cd.c b/trunk/drivers/ide/ide-cd.c index 3aec19d1fdfc..35729a47f797 100644 --- a/trunk/drivers/ide/ide-cd.c +++ b/trunk/drivers/ide/ide-cd.c @@ -265,62 +265,35 @@ static void ide_cd_complete_failed_rq(ide_drive_t *drive, struct request *rq) cdrom_analyze_sense_data(drive, NULL, sense); } - /* - * Allow the drive 5 seconds to recover; some devices will return NOT_READY - * while flushing data from cache. - * - * returns: 0 failed (write timeout expired) - * 1 success - */ -static int ide_cd_breathe(ide_drive_t *drive, struct request *rq) -{ - - struct cdrom_info *info = drive->driver_data; - - if (!rq->errors) - info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY; - - rq->errors = 1; - - if (time_after(jiffies, info->write_timeout)) - return 0; - else { - struct request_queue *q = drive->queue; - unsigned long flags; - - /* - * take a breather relying on the unplug timer to kick us again - */ - - spin_lock_irqsave(q->queue_lock, flags); - blk_plug_device(q); - spin_unlock_irqrestore(q->queue_lock, flags); - - return 1; - } -} - -/** * Returns: * 0: if the request should be continued. * 1: if the request will be going through error recovery. * 2: if the request should be ended. */ -static int cdrom_decode_status(ide_drive_t *drive, u8 stat) +static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret) { ide_hwif_t *hwif = drive->hwif; struct request *rq = hwif->rq; - int err, sense_key, do_end_request = 0; - u8 quiet = rq->cmd_flags & REQ_QUIET; + int stat, err, sense_key; + + /* check for errors */ + stat = hwif->tp_ops->read_status(hwif); + + if (stat_ret) + *stat_ret = stat; + + if (OK_STAT(stat, good_stat, BAD_R_STAT)) + return 0; /* get the IDE error register */ err = ide_read_error(drive); sense_key = err >> 4; - ide_debug_log(IDE_DBG_RQ, "cmd: 0x%x, rq->cmd_type: 0x%x, err: 0x%x, " - "stat 0x%x", - rq->cmd[0], rq->cmd_type, err, stat); + ide_debug_log(IDE_DBG_RQ, "stat: 0x%x, good_stat: 0x%x, cmd[0]: 0x%x, " + "rq->cmd_type: 0x%x, err: 0x%x", + stat, good_stat, rq->cmd[0], rq->cmd_type, + err); if (blk_sense_request(rq)) { /* @@ -330,107 +303,150 @@ static int cdrom_decode_status(ide_drive_t *drive, u8 stat) */ rq->cmd_flags |= REQ_FAILED; return 2; - } - - /* if we have an error, pass CHECK_CONDITION as the SCSI status byte */ - if (blk_pc_request(rq) && !rq->errors) - rq->errors = SAM_STAT_CHECK_CONDITION; + } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) { + /* All other functions, except for READ. */ - if (blk_noretry_request(rq)) - do_end_request = 1; + /* + * if we have an error, pass back CHECK_CONDITION as the + * scsi status byte + */ + if (blk_pc_request(rq) && !rq->errors) + rq->errors = SAM_STAT_CHECK_CONDITION; - switch (sense_key) { - case NOT_READY: - if (blk_fs_request(rq) && rq_data_dir(rq) == WRITE) { - if (ide_cd_breathe(drive, rq)) - return 1; - } else { + /* check for tray open */ + if (sense_key == NOT_READY) { cdrom_saw_media_change(drive); - - if (blk_fs_request(rq) && !quiet) - printk(KERN_ERR PFX "%s: tray open\n", - drive->name); + } else if (sense_key == UNIT_ATTENTION) { + /* check for media change */ + cdrom_saw_media_change(drive); + return 0; + } else if (sense_key == ILLEGAL_REQUEST && + rq->cmd[0] == GPCMD_START_STOP_UNIT) { + /* + * Don't print error message for this condition-- + * SFF8090i indicates that 5/24/00 is the correct + * response to a request to close the tray if the + * drive doesn't have that capability. + * cdrom_log_sense() knows this! + */ + } else if (!(rq->cmd_flags & REQ_QUIET)) { + /* otherwise, print an error */ + ide_dump_status(drive, "packet command error", stat); } - do_end_request = 1; - break; - case UNIT_ATTENTION: - cdrom_saw_media_change(drive); - if (blk_fs_request(rq) == 0) - return 0; + rq->cmd_flags |= REQ_FAILED; /* - * Arrange to retry the request but be sure to give up if we've - * retried too many times. + * instead of playing games with moving completions around, + * remove failed request completely and end it when the + * request sense has completed */ - if (++rq->errors > ERROR_MAX) + goto end_request; + + } else if (blk_fs_request(rq)) { + int do_end_request = 0; + + /* handle errors from READ and WRITE requests */ + + if (blk_noretry_request(rq)) do_end_request = 1; - break; - case ILLEGAL_REQUEST: - /* - * Don't print error message for this condition -- SFF8090i - * indicates that 5/24/00 is the correct response to a request - * to close the tray if the drive doesn't have that capability. - * - * cdrom_log_sense() knows this! - */ - if (rq->cmd[0] == GPCMD_START_STOP_UNIT) - break; - /* fall-through */ - case DATA_PROTECT: - /* - * No point in retrying after an illegal request or data - * protect error. - */ - if (!quiet) + + if (sense_key == NOT_READY) { + /* tray open */ + if (rq_data_dir(rq) == READ) { + cdrom_saw_media_change(drive); + + /* fail the request */ + printk(KERN_ERR PFX "%s: tray open\n", + drive->name); + do_end_request = 1; + } else { + struct cdrom_info *info = drive->driver_data; + + /* + * Allow the drive 5 seconds to recover, some + * devices will return this error while flushing + * data from cache. + */ + if (!rq->errors) + info->write_timeout = jiffies + + ATAPI_WAIT_WRITE_BUSY; + rq->errors = 1; + if (time_after(jiffies, info->write_timeout)) + do_end_request = 1; + else { + struct request_queue *q = drive->queue; + unsigned long flags; + + /* + * take a breather relying on the unplug + * timer to kick us again + */ + spin_lock_irqsave(q->queue_lock, flags); + blk_plug_device(q); + spin_unlock_irqrestore(q->queue_lock, flags); + + return 1; + } + } + } else if (sense_key == UNIT_ATTENTION) { + /* media change */ + cdrom_saw_media_change(drive); + + /* + * Arrange to retry the request but be sure to give up + * if we've retried too many times. + */ + if (++rq->errors > ERROR_MAX) + do_end_request = 1; + } else if (sense_key == ILLEGAL_REQUEST || + sense_key == DATA_PROTECT) { + /* + * No point in retrying after an illegal request or data + * protect error. + */ ide_dump_status(drive, "command error", stat); - do_end_request = 1; - break; - case MEDIUM_ERROR: - /* - * No point in re-trying a zillion times on a bad sector. - * If we got here the error is not correctable. - */ - if (!quiet) - ide_dump_status(drive, "media error " - "(bad sector)", stat); - do_end_request = 1; - break; - case BLANK_CHECK: - /* disk appears blank? */ - if (!quiet) - ide_dump_status(drive, "media error (blank)", + do_end_request = 1; + } else if (sense_key == MEDIUM_ERROR) { + /* + * No point in re-trying a zillion times on a bad + * sector. If we got here the error is not correctable. + */ + ide_dump_status(drive, "media error (bad sector)", stat); - do_end_request = 1; - break; - default: - if (blk_fs_request(rq) == 0) - break; - if (err & ~ATA_ABORTED) { + do_end_request = 1; + } else if (sense_key == BLANK_CHECK) { + /* disk appears blank ?? */ + ide_dump_status(drive, "media error (blank)", stat); + do_end_request = 1; + } else if ((err & ~ATA_ABORTED) != 0) { /* go to the default handler for other errors */ ide_error(drive, "cdrom_decode_status", stat); return 1; - } else if (++rq->errors > ERROR_MAX) + } else if ((++rq->errors > ERROR_MAX)) { /* we've racked up too many retries, abort */ do_end_request = 1; - } - - if (blk_fs_request(rq) == 0) { - rq->cmd_flags |= REQ_FAILED; - do_end_request = 1; - } + } - /* - * End a request through request sense analysis when we have sense data. - * We need this in order to perform end of media processing. - */ - if (do_end_request) - goto end_request; + /* + * End a request through request sense analysis when we have + * sense data. We need this in order to perform end of media + * processing. + */ + if (do_end_request) + goto end_request; - /* if we got a CHECK_CONDITION status, queue a request sense command */ - if (stat & ATA_ERR) - cdrom_queue_request_sense(drive, NULL, NULL); - return 1; + /* + * If we got a CHECK_CONDITION status, queue + * a request sense command. + */ + if (stat & ATA_ERR) + cdrom_queue_request_sense(drive, NULL, NULL); + return 1; + } else { + blk_dump_rq_flags(rq, PFX "bad rq"); + return 2; + } end_request: if (stat & ATA_ERR) { @@ -608,14 +624,15 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) struct ide_cmd *cmd = &hwif->cmd; struct request *rq = hwif->rq; ide_expiry_t *expiry = NULL; - int dma_error = 0, dma, thislen, uptodate = 0; + int dma_error = 0, dma, stat, thislen, uptodate = 0; int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc, nsectors; int sense = blk_sense_request(rq); unsigned int timeout; u16 len; - u8 ireason, stat; + u8 ireason; - ide_debug_log(IDE_DBG_PC, "cmd: 0x%x, write: 0x%x", rq->cmd[0], write); + ide_debug_log(IDE_DBG_PC, "cmd[0]: 0x%x, write: 0x%x", + rq->cmd[0], write); /* check for errors */ dma = drive->dma; @@ -631,16 +648,11 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) } } - /* check status */ - stat = hwif->tp_ops->read_status(hwif); - - if (!OK_STAT(stat, 0, BAD_R_STAT)) { - rc = cdrom_decode_status(drive, stat); - if (rc) { - if (rc == 2) - goto out_end; - return ide_stopped; - } + rc = cdrom_decode_status(drive, 0, &stat); + if (rc) { + if (rc == 2) + goto out_end; + return ide_stopped; } /* using dma, transfer is complete now */ diff --git a/trunk/drivers/ide/ide-disk.c b/trunk/drivers/ide/ide-disk.c index a9fbe2c31210..c998cf8e971a 100644 --- a/trunk/drivers/ide/ide-disk.c +++ b/trunk/drivers/ide/ide-disk.c @@ -97,38 +97,35 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, } memset(&cmd, 0, sizeof(cmd)); - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; if (drive->dev_flags & IDE_DFLAG_LBA) { if (lba48) { pr_debug("%s: LBA=0x%012llx\n", drive->name, (unsigned long long)block); + tf->hob_nsect = (nsectors >> 8) & 0xff; + tf->hob_lbal = (u8)(block >> 24); + if (sizeof(block) != 4) { + tf->hob_lbam = (u8)((u64)block >> 32); + tf->hob_lbah = (u8)((u64)block >> 40); + } + tf->nsect = nsectors & 0xff; tf->lbal = (u8) block; tf->lbam = (u8)(block >> 8); tf->lbah = (u8)(block >> 16); - tf->device = ATA_LBA; - tf = &cmd.hob; - tf->nsect = (nsectors >> 8) & 0xff; - tf->lbal = (u8)(block >> 24); - if (sizeof(block) != 4) { - tf->lbam = (u8)((u64)block >> 32); - tf->lbah = (u8)((u64)block >> 40); - } - - cmd.valid.out.hob = IDE_VALID_OUT_HOB; - cmd.valid.in.hob = IDE_VALID_IN_HOB; - cmd.tf_flags |= IDE_TFLAG_LBA48; + cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB); } else { tf->nsect = nsectors & 0xff; tf->lbal = block; tf->lbam = block >>= 8; tf->lbah = block >>= 8; - tf->device = ((block >> 8) & 0xf) | ATA_LBA; + tf->device = (block >> 8) & 0xf; } + + tf->device |= ATA_LBA; } else { unsigned int sect, head, cyl, track; @@ -223,19 +220,15 @@ static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48) tf->command = ATA_CMD_READ_NATIVE_MAX; tf->device = ATA_LBA; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; - if (lba48) { - cmd.valid.out.hob = IDE_VALID_OUT_HOB; - cmd.valid.in.hob = IDE_VALID_IN_HOB; - cmd.tf_flags = IDE_TFLAG_LBA48; - } + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; + if (lba48) + cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB); ide_no_data_taskfile(drive, &cmd); /* if OK, compute maximum address value */ if (!(tf->status & ATA_ERR)) - addr = ide_get_lba_addr(&cmd, lba48) + 1; + addr = ide_get_lba_addr(tf, lba48) + 1; return addr; } @@ -257,9 +250,9 @@ static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48) tf->lbam = (addr_req >>= 8) & 0xff; tf->lbah = (addr_req >>= 8) & 0xff; if (lba48) { - cmd.hob.lbal = (addr_req >>= 8) & 0xff; - cmd.hob.lbam = (addr_req >>= 8) & 0xff; - cmd.hob.lbah = (addr_req >>= 8) & 0xff; + tf->hob_lbal = (addr_req >>= 8) & 0xff; + tf->hob_lbam = (addr_req >>= 8) & 0xff; + tf->hob_lbah = (addr_req >>= 8) & 0xff; tf->command = ATA_CMD_SET_MAX_EXT; } else { tf->device = (addr_req >>= 8) & 0x0f; @@ -267,19 +260,15 @@ static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48) } tf->device |= ATA_LBA; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; - if (lba48) { - cmd.valid.out.hob = IDE_VALID_OUT_HOB; - cmd.valid.in.hob = IDE_VALID_IN_HOB; - cmd.tf_flags = IDE_TFLAG_LBA48; - } + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; + if (lba48) + cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB); ide_no_data_taskfile(drive, &cmd); /* if OK, compute maximum address value */ if (!(tf->status & ATA_ERR)) - addr_set = ide_get_lba_addr(&cmd, lba48) + 1; + addr_set = ide_get_lba_addr(tf, lba48) + 1; return addr_set; } @@ -406,8 +395,8 @@ static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) cmd->tf.command = ATA_CMD_FLUSH_EXT; else cmd->tf.command = ATA_CMD_FLUSH; - cmd->valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd->tf_flags = IDE_TFLAG_DYN; + cmd->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE | + IDE_TFLAG_DYN; cmd->protocol = ATA_PROT_NODATA; rq->cmd_type = REQ_TYPE_ATA_TASKFILE; @@ -468,8 +457,7 @@ static int ide_do_setfeature(ide_drive_t *drive, u8 feature, u8 nsect) cmd.tf.feature = feature; cmd.tf.nsect = nsect; cmd.tf.command = ATA_CMD_SET_FEATURES; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; return ide_no_data_taskfile(drive, &cmd); } @@ -545,8 +533,7 @@ static int do_idedisk_flushcache(ide_drive_t *drive) cmd.tf.command = ATA_CMD_FLUSH_EXT; else cmd.tf.command = ATA_CMD_FLUSH; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; return ide_no_data_taskfile(drive, &cmd); } @@ -728,8 +715,7 @@ static int ide_disk_set_doorlock(ide_drive_t *drive, struct gendisk *disk, memset(&cmd, 0, sizeof(cmd)); cmd.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; ret = ide_no_data_taskfile(drive, &cmd); diff --git a/trunk/drivers/ide/ide-disk_proc.c b/trunk/drivers/ide/ide-disk_proc.c index 19f263bf0a9e..eaea3bef2073 100644 --- a/trunk/drivers/ide/ide-disk_proc.c +++ b/trunk/drivers/ide/ide-disk_proc.c @@ -13,8 +13,7 @@ static int smart_enable(ide_drive_t *drive) tf->lbam = ATA_SMART_LBAM_PASS; tf->lbah = ATA_SMART_LBAH_PASS; tf->command = ATA_CMD_SMART; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; return ide_no_data_taskfile(drive, &cmd); } @@ -30,8 +29,7 @@ static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd) tf->lbam = ATA_SMART_LBAM_PASS; tf->lbah = ATA_SMART_LBAH_PASS; tf->command = ATA_CMD_SMART; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; cmd.protocol = ATA_PROT_PIO; return ide_raw_taskfile(drive, &cmd, buf, 1); diff --git a/trunk/drivers/ide/ide-dma-sff.c b/trunk/drivers/ide/ide-dma-sff.c index e4cdf78cc3e9..16fc46edc32d 100644 --- a/trunk/drivers/ide/ide-dma-sff.c +++ b/trunk/drivers/ide/ide-dma-sff.c @@ -277,6 +277,8 @@ void ide_dma_start(ide_drive_t *drive) dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD); outb(dma_cmd | ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD); } + + wmb(); } EXPORT_SYMBOL_GPL(ide_dma_start); @@ -284,7 +286,7 @@ EXPORT_SYMBOL_GPL(ide_dma_start); int ide_dma_end(ide_drive_t *drive) { ide_hwif_t *hwif = drive->hwif; - u8 dma_stat = 0, dma_cmd = 0; + u8 dma_stat = 0, dma_cmd = 0, mask; /* stop DMA */ if (hwif->host_flags & IDE_HFLAG_MMIO) { @@ -302,10 +304,11 @@ int ide_dma_end(ide_drive_t *drive) /* clear INTR & ERROR bits */ ide_dma_sff_write_status(hwif, dma_stat | ATA_DMA_ERR | ATA_DMA_INTR); -#define CHECK_DMA_MASK (ATA_DMA_ACTIVE | ATA_DMA_ERR | ATA_DMA_INTR) + wmb(); /* verify good DMA status */ - if ((dma_stat & CHECK_DMA_MASK) != ATA_DMA_INTR) + mask = ATA_DMA_ACTIVE | ATA_DMA_ERR | ATA_DMA_INTR; + if ((dma_stat & mask) != ATA_DMA_INTR) return 0x10 | dma_stat; return 0; } diff --git a/trunk/drivers/ide/ide-h8300.c b/trunk/drivers/ide/ide-h8300.c index c06ebdc4a130..dac9a6d44963 100644 --- a/trunk/drivers/ide/ide-h8300.c +++ b/trunk/drivers/ide/ide-h8300.c @@ -22,6 +22,103 @@ (r); \ }) +static void mm_outw(u16 d, unsigned long a) +{ + __asm__("mov.b %w0,r2h\n\t" + "mov.b %x0,r2l\n\t" + "mov.w r2,@%1" + : + :"r"(d),"r"(a) + :"er2"); +} + +static u16 mm_inw(unsigned long a) +{ + register u16 r __asm__("er0"); + __asm__("mov.w @%1,r2\n\t" + "mov.b r2l,%x0\n\t" + "mov.b r2h,%w0" + :"=r"(r) + :"r"(a) + :"er2"); + return r; +} + +static void h8300_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + u8 HIHI = (cmd->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; + + if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) + HIHI = 0xFF; + + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) + outb(tf->hob_feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) + outb(tf->hob_nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) + outb(tf->hob_lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) + outb(tf->hob_lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) + outb(tf->hob_lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE) + outb(tf->feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT) + outb(tf->nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL) + outb(tf->lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM) + outb(tf->lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH) + outb(tf->lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) + outb((tf->device & HIHI) | drive->select, + io_ports->device_addr); +} + +static void h8300_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + + /* be sure we're looking at the low order bits */ + outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) + tf->error = inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) + tf->nsect = inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) + tf->lbal = inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) + tf->lbam = inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) + tf->lbah = inb(io_ports->lbah_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) + tf->device = inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = inb(io_ports->lbah_addr); + } +} + static void mm_outsw(unsigned long addr, void *buf, u32 len) { unsigned short *bp = (unsigned short *)buf; @@ -55,8 +152,8 @@ static const struct ide_tp_ops h8300_tp_ops = { .write_devctl = ide_write_devctl, .dev_select = ide_dev_select, - .tf_load = ide_tf_load, - .tf_read = ide_tf_read, + .tf_load = h8300_tf_load, + .tf_read = h8300_tf_read, .input_data = h8300_input_data, .output_data = h8300_output_data, diff --git a/trunk/drivers/ide/ide-io-std.c b/trunk/drivers/ide/ide-io-std.c index 46721c454518..9cac281d82c4 100644 --- a/trunk/drivers/ide/ide-io-std.c +++ b/trunk/drivers/ide/ide-io-std.c @@ -85,57 +85,98 @@ void ide_dev_select(ide_drive_t *drive) } EXPORT_SYMBOL_GPL(ide_dev_select); -void ide_tf_load(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid) +void ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) { ide_hwif_t *hwif = drive->hwif; struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; void (*tf_outb)(u8 addr, unsigned long port); u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0; + u8 HIHI = (cmd->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; if (mmio) tf_outb = ide_mm_outb; else tf_outb = ide_outb; - if (valid & IDE_VALID_FEATURE) + if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) + HIHI = 0xFF; + + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) + tf_outb(tf->hob_feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) + tf_outb(tf->hob_nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) + tf_outb(tf->hob_lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) + tf_outb(tf->hob_lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) + tf_outb(tf->hob_lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE) tf_outb(tf->feature, io_ports->feature_addr); - if (valid & IDE_VALID_NSECT) + if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT) tf_outb(tf->nsect, io_ports->nsect_addr); - if (valid & IDE_VALID_LBAL) + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL) tf_outb(tf->lbal, io_ports->lbal_addr); - if (valid & IDE_VALID_LBAM) + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM) tf_outb(tf->lbam, io_ports->lbam_addr); - if (valid & IDE_VALID_LBAH) + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH) tf_outb(tf->lbah, io_ports->lbah_addr); - if (valid & IDE_VALID_DEVICE) - tf_outb(tf->device, io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) + tf_outb((tf->device & HIHI) | drive->select, + io_ports->device_addr); } EXPORT_SYMBOL_GPL(ide_tf_load); -void ide_tf_read(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid) +void ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) { ide_hwif_t *hwif = drive->hwif; struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + void (*tf_outb)(u8 addr, unsigned long port); u8 (*tf_inb)(unsigned long port); u8 mmio = (hwif->host_flags & IDE_HFLAG_MMIO) ? 1 : 0; - if (mmio) + if (mmio) { + tf_outb = ide_mm_outb; tf_inb = ide_mm_inb; - else + } else { + tf_outb = ide_outb; tf_inb = ide_inb; + } + + /* be sure we're looking at the low order bits */ + tf_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); - if (valid & IDE_VALID_ERROR) + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) tf->error = tf_inb(io_ports->feature_addr); - if (valid & IDE_VALID_NSECT) + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) tf->nsect = tf_inb(io_ports->nsect_addr); - if (valid & IDE_VALID_LBAL) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) tf->lbal = tf_inb(io_ports->lbal_addr); - if (valid & IDE_VALID_LBAM) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) tf->lbam = tf_inb(io_ports->lbam_addr); - if (valid & IDE_VALID_LBAH) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) tf->lbah = tf_inb(io_ports->lbah_addr); - if (valid & IDE_VALID_DEVICE) + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) tf->device = tf_inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + tf_outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = tf_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = tf_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = tf_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = tf_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = tf_inb(io_ports->lbah_addr); + } } EXPORT_SYMBOL_GPL(ide_tf_read); diff --git a/trunk/drivers/ide/ide-io.c b/trunk/drivers/ide/ide-io.c index 2ae02b8d7f8e..1deb6d29b186 100644 --- a/trunk/drivers/ide/ide-io.c +++ b/trunk/drivers/ide/ide-io.c @@ -86,18 +86,18 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) tp_ops->input_data(drive, cmd, data, 2); - cmd->tf.data = data[0]; - cmd->hob.data = data[1]; + tf->data = data[0]; + tf->hob_data = data[1]; } - ide_tf_readback(drive, cmd); + tp_ops->tf_read(drive, cmd); if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) && tf_cmd == ATA_CMD_IDLEIMMEDIATE) { if (tf->lbal != 0xc4) { printk(KERN_ERR "%s: head unload failed!\n", drive->name); - ide_tf_dump(drive->name, cmd); + ide_tf_dump(drive->name, tf); } else drive->dev_flags |= IDE_DFLAG_PARKED; } @@ -205,9 +205,8 @@ static ide_startstop_t ide_disk_special(ide_drive_t *drive) return ide_stopped; } - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; - cmd.tf_flags = IDE_TFLAG_CUSTOM_HANDLER; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE | + IDE_TFLAG_CUSTOM_HANDLER; do_rw_taskfile(drive, &cmd); diff --git a/trunk/drivers/ide/ide-ioctls.c b/trunk/drivers/ide/ide-ioctls.c index c1c25ebbaa1f..770142767437 100644 --- a/trunk/drivers/ide/ide-ioctls.c +++ b/trunk/drivers/ide/ide-ioctls.c @@ -141,12 +141,11 @@ static int ide_cmd_ioctl(ide_drive_t *drive, unsigned long arg) tf->lbal = args[1]; tf->lbam = 0x4f; tf->lbah = 0xc2; - cmd.valid.out.tf = IDE_VALID_OUT_TF; - cmd.valid.in.tf = IDE_VALID_NSECT; + cmd.tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_IN_NSECT; } else { tf->nsect = args[1]; - cmd.valid.out.tf = IDE_VALID_FEATURE | IDE_VALID_NSECT; - cmd.valid.in.tf = IDE_VALID_NSECT; + cmd.tf_flags = IDE_TFLAG_OUT_FEATURE | IDE_TFLAG_OUT_NSECT | + IDE_TFLAG_IN_NSECT; } tf->command = args[0]; cmd.protocol = args[3] ? ATA_PROT_PIO : ATA_PROT_NODATA; @@ -206,15 +205,14 @@ static int ide_task_ioctl(ide_drive_t *drive, unsigned long arg) return -EFAULT; memset(&cmd, 0, sizeof(cmd)); - memcpy(&cmd.tf.feature, &args[1], 6); + memcpy(&cmd.tf_array[7], &args[1], 6); cmd.tf.command = args[0]; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; err = ide_no_data_taskfile(drive, &cmd); args[0] = cmd.tf.command; - memcpy(&args[1], &cmd.tf.feature, 6); + memcpy(&args[1], &cmd.tf_array[7], 6); if (copy_to_user(p, args, 7)) err = -EFAULT; diff --git a/trunk/drivers/ide/ide-iops.c b/trunk/drivers/ide/ide-iops.c index c19a221b1e18..27bb70ddd459 100644 --- a/trunk/drivers/ide/ide-iops.c +++ b/trunk/drivers/ide/ide-iops.c @@ -37,11 +37,14 @@ void SELECT_MASK(ide_drive_t *drive, int mask) u8 ide_read_error(ide_drive_t *drive) { - struct ide_taskfile tf; + struct ide_cmd cmd; - drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_ERROR); + memset(&cmd, 0, sizeof(cmd)); + cmd.tf_flags = IDE_TFLAG_IN_ERROR; - return tf.error; + drive->hwif->tp_ops->tf_read(drive, &cmd); + + return cmd.tf.error; } EXPORT_SYMBOL_GPL(ide_read_error); @@ -309,10 +312,10 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) { ide_hwif_t *hwif = drive->hwif; const struct ide_tp_ops *tp_ops = hwif->tp_ops; - struct ide_taskfile tf; u16 *id = drive->id, i; int error = 0; u8 stat; + struct ide_cmd cmd; #ifdef CONFIG_BLK_DEV_IDEDMA if (hwif->dma_ops) /* check if host supports DMA */ @@ -344,11 +347,12 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) udelay(1); tp_ops->write_devctl(hwif, ATA_NIEN | ATA_DEVCTL_OBS); - memset(&tf, 0, sizeof(tf)); - tf.feature = SETFEATURES_XFER; - tf.nsect = speed; + memset(&cmd, 0, sizeof(cmd)); + cmd.tf_flags = IDE_TFLAG_OUT_FEATURE | IDE_TFLAG_OUT_NSECT; + cmd.tf.feature = SETFEATURES_XFER; + cmd.tf.nsect = speed; - tp_ops->tf_load(drive, &tf, IDE_VALID_FEATURE | IDE_VALID_NSECT); + tp_ops->tf_load(drive, &cmd); tp_ops->exec_command(hwif, ATA_CMD_SET_FEATURES); diff --git a/trunk/drivers/ide/ide-lib.c b/trunk/drivers/ide/ide-lib.c index 56ff8c46c7d1..217b7fdf2b17 100644 --- a/trunk/drivers/ide/ide-lib.c +++ b/trunk/drivers/ide/ide-lib.c @@ -49,17 +49,16 @@ static void ide_dump_opcode(ide_drive_t *drive) printk(KERN_CONT "0x%02x\n", cmd->tf.command); } -u64 ide_get_lba_addr(struct ide_cmd *cmd, int lba48) +u64 ide_get_lba_addr(struct ide_taskfile *tf, int lba48) { - struct ide_taskfile *tf = &cmd->tf; u32 high, low; - low = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal; - if (lba48) { - tf = &cmd->hob; - high = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal; - } else + if (lba48) + high = (tf->hob_lbah << 16) | (tf->hob_lbam << 8) | + tf->hob_lbal; + else high = tf->device & 0xf; + low = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal; return ((u64)high << 24) | low; } @@ -72,18 +71,17 @@ static void ide_dump_sector(ide_drive_t *drive) u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48); memset(&cmd, 0, sizeof(cmd)); - if (lba48) { - cmd.valid.in.tf = IDE_VALID_LBA; - cmd.valid.in.hob = IDE_VALID_LBA; - cmd.tf_flags = IDE_TFLAG_LBA48; - } else - cmd.valid.in.tf = IDE_VALID_LBA | IDE_VALID_DEVICE; + if (lba48) + cmd.tf_flags = IDE_TFLAG_IN_LBA | IDE_TFLAG_IN_HOB_LBA | + IDE_TFLAG_LBA48; + else + cmd.tf_flags = IDE_TFLAG_IN_LBA | IDE_TFLAG_IN_DEVICE; - ide_tf_readback(drive, &cmd); + drive->hwif->tp_ops->tf_read(drive, &cmd); if (lba48 || (tf->device & ATA_LBA)) printk(KERN_CONT ", LBAsect=%llu", - (unsigned long long)ide_get_lba_addr(&cmd, lba48)); + (unsigned long long)ide_get_lba_addr(tf, lba48)); else printk(KERN_CONT ", CHS=%d/%d/%d", (tf->lbah << 8) + tf->lbam, tf->device & 0xf, tf->lbal); diff --git a/trunk/drivers/ide/ide-park.c b/trunk/drivers/ide/ide-park.c index 310d03f2b5b7..9490b446519f 100644 --- a/trunk/drivers/ide/ide-park.c +++ b/trunk/drivers/ide/ide-park.c @@ -74,8 +74,7 @@ ide_startstop_t ide_do_park_unpark(ide_drive_t *drive, struct request *rq) tf->lbal = 0x4c; tf->lbam = 0x4e; tf->lbah = 0x55; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; } else /* cmd == REQ_UNPARK_HEADS */ tf->command = ATA_CMD_CHK_POWER; diff --git a/trunk/drivers/ide/ide-pm.c b/trunk/drivers/ide/ide-pm.c index 0d8a151c0a01..bb7858ebb7d1 100644 --- a/trunk/drivers/ide/ide-pm.c +++ b/trunk/drivers/ide/ide-pm.c @@ -163,8 +163,7 @@ ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *rq) return ide_stopped; out_do_tf: - cmd->valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd->valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd->tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; cmd->protocol = ATA_PROT_NODATA; return do_rw_taskfile(drive, cmd); diff --git a/trunk/drivers/ide/ide-probe.c b/trunk/drivers/ide/ide-probe.c index 7f264ed1141b..d8c1c3e735bb 100644 --- a/trunk/drivers/ide/ide-probe.c +++ b/trunk/drivers/ide/ide-probe.c @@ -283,11 +283,13 @@ int ide_dev_read_id(ide_drive_t *drive, u8 cmd, u16 *id) * identify command to be sure of reply */ if (cmd == ATA_CMD_ID_ATAPI) { - struct ide_taskfile tf; + struct ide_cmd cmd; - memset(&tf, 0, sizeof(tf)); + memset(&cmd, 0, sizeof(cmd)); /* disable DMA & overlap */ - tp_ops->tf_load(drive, &tf, IDE_VALID_FEATURE); + cmd.tf_flags = IDE_TFLAG_OUT_FEATURE; + + tp_ops->tf_load(drive, &cmd); } /* ask drive for ID */ @@ -335,11 +337,14 @@ int ide_busy_sleep(ide_hwif_t *hwif, unsigned long timeout, int altstatus) static u8 ide_read_device(ide_drive_t *drive) { - struct ide_taskfile tf; + struct ide_cmd cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.tf_flags = IDE_TFLAG_IN_DEVICE; - drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_DEVICE); + drive->hwif->tp_ops->tf_read(drive, &cmd); - return tf.device; + return cmd.tf.device; } /** @@ -1309,7 +1314,6 @@ struct ide_host *ide_host_alloc(const struct ide_port_info *d, hw_regs_t **hws) host->get_lock = d->get_lock; host->release_lock = d->release_lock; host->host_flags = d->host_flags; - host->irq_flags = d->irq_flags; } return host; diff --git a/trunk/drivers/ide/ide-proc.c b/trunk/drivers/ide/ide-proc.c index 3242698832a4..10a88bf3eefa 100644 --- a/trunk/drivers/ide/ide-proc.c +++ b/trunk/drivers/ide/ide-proc.c @@ -204,8 +204,8 @@ static int set_xfer_rate (ide_drive_t *drive, int arg) cmd.tf.command = ATA_CMD_SET_FEATURES; cmd.tf.feature = SETFEATURES_XFER; cmd.tf.nsect = (u8)arg; - cmd.valid.out.tf = IDE_VALID_FEATURE | IDE_VALID_NSECT; - cmd.valid.in.tf = IDE_VALID_NSECT; + cmd.tf_flags = IDE_TFLAG_OUT_FEATURE | IDE_TFLAG_OUT_NSECT | + IDE_TFLAG_IN_NSECT; err = ide_no_data_taskfile(drive, &cmd); diff --git a/trunk/drivers/ide/ide-taskfile.c b/trunk/drivers/ide/ide-taskfile.c index 4aa6223c11be..243421ce40d0 100644 --- a/trunk/drivers/ide/ide-taskfile.c +++ b/trunk/drivers/ide/ide-taskfile.c @@ -23,33 +23,17 @@ #include #include -void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd) -{ - ide_hwif_t *hwif = drive->hwif; - const struct ide_tp_ops *tp_ops = hwif->tp_ops; - - /* Be sure we're looking at the low order bytes */ - tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS); - - tp_ops->tf_read(drive, &cmd->tf, cmd->valid.in.tf); - - if (cmd->tf_flags & IDE_TFLAG_LBA48) { - tp_ops->write_devctl(hwif, ATA_HOB | ATA_DEVCTL_OBS); - - tp_ops->tf_read(drive, &cmd->hob, cmd->valid.in.hob); - } -} - -void ide_tf_dump(const char *s, struct ide_cmd *cmd) +void ide_tf_dump(const char *s, struct ide_taskfile *tf) { #ifdef DEBUG printk("%s: tf: feat 0x%02x nsect 0x%02x lbal 0x%02x " "lbam 0x%02x lbah 0x%02x dev 0x%02x cmd 0x%02x\n", - s, cmd->tf.feature, cmd->tf.nsect, - cmd->tf.lbal, cmd->tf.lbam, cmd->tf.lbah, - cmd->tf.device, cmd->tf.command); - printk("%s: hob: nsect 0x%02x lbal 0x%02x lbam 0x%02x lbah 0x%02x\n", - s, cmd->hob.nsect, cmd->hob.lbal, cmd->hob.lbam, cmd->hob.lbah); + s, tf->feature, tf->nsect, tf->lbal, + tf->lbam, tf->lbah, tf->device, tf->command); + printk("%s: hob: nsect 0x%02x lbal 0x%02x " + "lbam 0x%02x lbah 0x%02x\n", + s, tf->hob_nsect, tf->hob_lbal, + tf->hob_lbam, tf->hob_lbah); #endif } @@ -63,8 +47,7 @@ int taskfile_lib_get_identify (ide_drive_t *drive, u8 *buf) cmd.tf.command = ATA_CMD_ID_ATA; else cmd.tf.command = ATA_CMD_ID_ATAPI; - cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; + cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; cmd.protocol = ATA_PROT_PIO; return ide_raw_taskfile(drive, &cmd, buf, 1); @@ -96,27 +79,16 @@ ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd) memcpy(cmd, orig_cmd, sizeof(*cmd)); if ((cmd->tf_flags & IDE_TFLAG_DMA_PIO_FALLBACK) == 0) { - ide_tf_dump(drive->name, cmd); + ide_tf_dump(drive->name, tf); tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS); SELECT_MASK(drive, 0); if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { - u8 data[2] = { cmd->tf.data, cmd->hob.data }; + u8 data[2] = { tf->data, tf->hob_data }; tp_ops->output_data(drive, cmd, data, 2); } - - if (cmd->valid.out.tf & IDE_VALID_DEVICE) { - u8 HIHI = (cmd->tf_flags & IDE_TFLAG_LBA48) ? - 0xE0 : 0xEF; - - if (!(cmd->ftf_flags & IDE_FTFLAG_FLAGGED)) - cmd->tf.device &= HIHI; - cmd->tf.device |= drive->select; - } - - tp_ops->tf_load(drive, &cmd->hob, cmd->valid.out.hob); - tp_ops->tf_load(drive, &cmd->tf, cmd->valid.out.tf); + tp_ops->tf_load(drive, cmd); } switch (cmd->protocol) { @@ -517,17 +489,16 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) memset(&cmd, 0, sizeof(cmd)); - memcpy(&cmd.hob, req_task->hob_ports, HDIO_DRIVE_HOB_HDR_SIZE - 2); - memcpy(&cmd.tf, req_task->io_ports, HDIO_DRIVE_TASK_HDR_SIZE); + memcpy(&cmd.tf_array[0], req_task->hob_ports, + HDIO_DRIVE_HOB_HDR_SIZE - 2); + memcpy(&cmd.tf_array[6], req_task->io_ports, + HDIO_DRIVE_TASK_HDR_SIZE); - cmd.valid.out.tf = IDE_VALID_DEVICE; - cmd.valid.in.tf = IDE_VALID_DEVICE | IDE_VALID_IN_TF; - cmd.tf_flags = IDE_TFLAG_IO_16BIT; + cmd.tf_flags = IDE_TFLAG_IO_16BIT | IDE_TFLAG_DEVICE | + IDE_TFLAG_IN_TF; - if (drive->dev_flags & IDE_DFLAG_LBA48) { - cmd.tf_flags |= IDE_TFLAG_LBA48; - cmd.valid.in.hob = IDE_VALID_IN_HOB; - } + if (drive->dev_flags & IDE_DFLAG_LBA48) + cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_IN_HOB); if (req_task->out_flags.all) { cmd.ftf_flags |= IDE_FTFLAG_FLAGGED; @@ -536,28 +507,28 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) cmd.ftf_flags |= IDE_FTFLAG_OUT_DATA; if (req_task->out_flags.b.nsector_hob) - cmd.valid.out.hob |= IDE_VALID_NSECT; + cmd.tf_flags |= IDE_TFLAG_OUT_HOB_NSECT; if (req_task->out_flags.b.sector_hob) - cmd.valid.out.hob |= IDE_VALID_LBAL; + cmd.tf_flags |= IDE_TFLAG_OUT_HOB_LBAL; if (req_task->out_flags.b.lcyl_hob) - cmd.valid.out.hob |= IDE_VALID_LBAM; + cmd.tf_flags |= IDE_TFLAG_OUT_HOB_LBAM; if (req_task->out_flags.b.hcyl_hob) - cmd.valid.out.hob |= IDE_VALID_LBAH; + cmd.tf_flags |= IDE_TFLAG_OUT_HOB_LBAH; if (req_task->out_flags.b.error_feature) - cmd.valid.out.tf |= IDE_VALID_FEATURE; + cmd.tf_flags |= IDE_TFLAG_OUT_FEATURE; if (req_task->out_flags.b.nsector) - cmd.valid.out.tf |= IDE_VALID_NSECT; + cmd.tf_flags |= IDE_TFLAG_OUT_NSECT; if (req_task->out_flags.b.sector) - cmd.valid.out.tf |= IDE_VALID_LBAL; + cmd.tf_flags |= IDE_TFLAG_OUT_LBAL; if (req_task->out_flags.b.lcyl) - cmd.valid.out.tf |= IDE_VALID_LBAM; + cmd.tf_flags |= IDE_TFLAG_OUT_LBAM; if (req_task->out_flags.b.hcyl) - cmd.valid.out.tf |= IDE_VALID_LBAH; + cmd.tf_flags |= IDE_TFLAG_OUT_LBAH; } else { - cmd.valid.out.tf |= IDE_VALID_OUT_TF; + cmd.tf_flags |= IDE_TFLAG_OUT_TF; if (cmd.tf_flags & IDE_TFLAG_LBA48) - cmd.valid.out.hob |= IDE_VALID_OUT_HOB; + cmd.tf_flags |= IDE_TFLAG_OUT_HOB; } if (req_task->in_flags.b.data) @@ -623,7 +594,7 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) if (req_task->req_cmd == IDE_DRIVE_TASK_NO_DATA) nsect = 0; else if (!nsect) { - nsect = (cmd.hob.nsect << 8) | cmd.tf.nsect; + nsect = (cmd.tf.hob_nsect << 8) | cmd.tf.nsect; if (!nsect) { printk(KERN_ERR "%s: in/out command without data\n", @@ -635,8 +606,10 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) err = ide_raw_taskfile(drive, &cmd, data_buf, nsect); - memcpy(req_task->hob_ports, &cmd.hob, HDIO_DRIVE_HOB_HDR_SIZE - 2); - memcpy(req_task->io_ports, &cmd.tf, HDIO_DRIVE_TASK_HDR_SIZE); + memcpy(req_task->hob_ports, &cmd.tf_array[0], + HDIO_DRIVE_HOB_HDR_SIZE - 2); + memcpy(req_task->io_ports, &cmd.tf_array[6], + HDIO_DRIVE_TASK_HDR_SIZE); if ((cmd.ftf_flags & IDE_FTFLAG_SET_IN_FLAGS) && req_task->in_flags.all == 0) { diff --git a/trunk/drivers/ide/ns87415.c b/trunk/drivers/ide/ns87415.c index 95327a2c2422..71a39fb3856f 100644 --- a/trunk/drivers/ide/ns87415.c +++ b/trunk/drivers/ide/ns87415.c @@ -61,23 +61,41 @@ static u8 superio_dma_sff_read_status(ide_hwif_t *hwif) return superio_ide_inb(hwif->dma_base + ATA_DMA_STATUS); } -static void superio_tf_read(ide_drive_t *drive, struct ide_taskfile *tf, - u8 valid) +static void superio_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) { struct ide_io_ports *io_ports = &drive->hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; - if (valid & IDE_VALID_ERROR) + /* be sure we're looking at the low order bits */ + outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) tf->error = inb(io_ports->feature_addr); - if (valid & IDE_VALID_NSECT) + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) tf->nsect = inb(io_ports->nsect_addr); - if (valid & IDE_VALID_LBAL) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) tf->lbal = inb(io_ports->lbal_addr); - if (valid & IDE_VALID_LBAM) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) tf->lbam = inb(io_ports->lbam_addr); - if (valid & IDE_VALID_LBAH) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) tf->lbah = inb(io_ports->lbah_addr); - if (valid & IDE_VALID_DEVICE) + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) tf->device = superio_ide_inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = inb(io_ports->lbah_addr); + } } static void ns87415_dev_select(ide_drive_t *drive); diff --git a/trunk/drivers/ide/q40ide.c b/trunk/drivers/ide/q40ide.c index c79346679244..d007e7f66598 100644 --- a/trunk/drivers/ide/q40ide.c +++ b/trunk/drivers/ide/q40ide.c @@ -16,8 +16,6 @@ #include #include -#include - /* * Bases of the IDE interfaces */ @@ -79,10 +77,8 @@ static void q40ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, { unsigned long data_addr = drive->hwif->io_ports.data_addr; - if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { - __ide_mm_insw(data_addr, buf, (len + 1) / 2); - return; - } + if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) + return insw(data_addr, buf, (len + 1) / 2); raw_insw_swapw((u16 *)data_addr, buf, (len + 1) / 2); } @@ -92,10 +88,8 @@ static void q40ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, { unsigned long data_addr = drive->hwif->io_ports.data_addr; - if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { - __ide_mm_outsw(data_addr, buf, (len + 1) / 2); - return; - } + if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) + return outsw(data_addr, buf, (len + 1) / 2); raw_outsw_swapw((u16 *)data_addr, buf, (len + 1) / 2); } diff --git a/trunk/drivers/ide/scc_pata.c b/trunk/drivers/ide/scc_pata.c index 5be41f25204f..6d8dbd9c10bc 100644 --- a/trunk/drivers/ide/scc_pata.c +++ b/trunk/drivers/ide/scc_pata.c @@ -337,6 +337,7 @@ static void scc_dma_start(ide_drive_t *drive) /* start DMA */ scc_ide_outb(dma_cmd | 1, hwif->dma_base); + wmb(); } static int __scc_dma_end(ide_drive_t *drive) @@ -353,6 +354,7 @@ static int __scc_dma_end(ide_drive_t *drive) /* clear the INTR & ERROR bits */ scc_ide_outb(dma_stat | 6, hwif->dma_base + 4); /* verify good DMA status */ + wmb(); return (dma_stat & 7) != 4 ? (0x10 | dma_stat) : 0; } @@ -645,40 +647,77 @@ static int __devinit init_setup_scc(struct pci_dev *dev, return rc; } -static void scc_tf_load(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid) +static void scc_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) { struct ide_io_ports *io_ports = &drive->hwif->io_ports; - - if (valid & IDE_VALID_FEATURE) + struct ide_taskfile *tf = &cmd->tf; + u8 HIHI = (cmd->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; + + if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) + HIHI = 0xFF; + + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) + scc_ide_outb(tf->hob_feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) + scc_ide_outb(tf->hob_nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) + scc_ide_outb(tf->hob_lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) + scc_ide_outb(tf->hob_lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) + scc_ide_outb(tf->hob_lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE) scc_ide_outb(tf->feature, io_ports->feature_addr); - if (valid & IDE_VALID_NSECT) + if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT) scc_ide_outb(tf->nsect, io_ports->nsect_addr); - if (valid & IDE_VALID_LBAL) + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL) scc_ide_outb(tf->lbal, io_ports->lbal_addr); - if (valid & IDE_VALID_LBAM) + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM) scc_ide_outb(tf->lbam, io_ports->lbam_addr); - if (valid & IDE_VALID_LBAH) + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH) scc_ide_outb(tf->lbah, io_ports->lbah_addr); - if (valid & IDE_VALID_DEVICE) - scc_ide_outb(tf->device, io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) + scc_ide_outb((tf->device & HIHI) | drive->select, + io_ports->device_addr); } -static void scc_tf_read(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid) +static void scc_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) { struct ide_io_ports *io_ports = &drive->hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + + /* be sure we're looking at the low order bits */ + scc_ide_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); - if (valid & IDE_VALID_ERROR) + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) tf->error = scc_ide_inb(io_ports->feature_addr); - if (valid & IDE_VALID_NSECT) + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) tf->nsect = scc_ide_inb(io_ports->nsect_addr); - if (valid & IDE_VALID_LBAL) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) tf->lbal = scc_ide_inb(io_ports->lbal_addr); - if (valid & IDE_VALID_LBAM) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) tf->lbam = scc_ide_inb(io_ports->lbam_addr); - if (valid & IDE_VALID_LBAH) + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) tf->lbah = scc_ide_inb(io_ports->lbah_addr); - if (valid & IDE_VALID_DEVICE) + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) tf->device = scc_ide_inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + scc_ide_outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = scc_ide_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = scc_ide_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = scc_ide_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = scc_ide_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = scc_ide_inb(io_ports->lbah_addr); + } } static void scc_input_data(ide_drive_t *drive, struct ide_cmd *cmd, diff --git a/trunk/drivers/ide/tx4938ide.c b/trunk/drivers/ide/tx4938ide.c index e33d764e2945..4cb79c4c2604 100644 --- a/trunk/drivers/ide/tx4938ide.c +++ b/trunk/drivers/ide/tx4938ide.c @@ -72,6 +72,91 @@ static void tx4938ide_set_pio_mode(ide_drive_t *drive, const u8 pio) #ifdef __BIG_ENDIAN /* custom iops (independent from SWAP_IO_SPACE) */ +static u8 tx4938ide_inb(unsigned long port) +{ + return __raw_readb((void __iomem *)port); +} + +static void tx4938ide_outb(u8 value, unsigned long port) +{ + __raw_writeb(value, (void __iomem *)port); +} + +static void tx4938ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + u8 HIHI = cmd->tf_flags & IDE_TFLAG_LBA48 ? 0xE0 : 0xEF; + + if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) + HIHI = 0xFF; + + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) + tx4938ide_outb(tf->hob_feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) + tx4938ide_outb(tf->hob_nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) + tx4938ide_outb(tf->hob_lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) + tx4938ide_outb(tf->hob_lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) + tx4938ide_outb(tf->hob_lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE) + tx4938ide_outb(tf->feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT) + tx4938ide_outb(tf->nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL) + tx4938ide_outb(tf->lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM) + tx4938ide_outb(tf->lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH) + tx4938ide_outb(tf->lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) + tx4938ide_outb((tf->device & HIHI) | drive->select, + io_ports->device_addr); +} + +static void tx4938ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + + /* be sure we're looking at the low order bits */ + tx4938ide_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) + tf->error = tx4938ide_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) + tf->nsect = tx4938ide_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) + tf->lbal = tx4938ide_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) + tf->lbam = tx4938ide_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) + tf->lbah = tx4938ide_inb(io_ports->lbah_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) + tf->device = tx4938ide_inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + tx4938ide_outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = tx4938ide_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = tx4938ide_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = tx4938ide_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = tx4938ide_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = tx4938ide_inb(io_ports->lbah_addr); + } +} + static void tx4938ide_input_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, void *buf, unsigned int len) { @@ -105,8 +190,8 @@ static const struct ide_tp_ops tx4938ide_tp_ops = { .write_devctl = ide_write_devctl, .dev_select = ide_dev_select, - .tf_load = ide_tf_load, - .tf_read = ide_tf_read, + .tf_load = tx4938ide_tf_load, + .tf_read = tx4938ide_tf_read, .input_data = tx4938ide_input_data_swap, .output_data = tx4938ide_output_data_swap, diff --git a/trunk/drivers/ide/tx4939ide.c b/trunk/drivers/ide/tx4939ide.c index 564422d23976..0040a9a3e26e 100644 --- a/trunk/drivers/ide/tx4939ide.c +++ b/trunk/drivers/ide/tx4939ide.c @@ -327,15 +327,15 @@ static int tx4939ide_dma_end(ide_drive_t *drive) /* read and clear the INTR & ERROR bits */ dma_stat = tx4939ide_clear_dma_status(base); -#define CHECK_DMA_MASK (ATA_DMA_ACTIVE | ATA_DMA_ERR | ATA_DMA_INTR) + wmb(); /* verify good DMA status */ - if ((dma_stat & CHECK_DMA_MASK) == 0 && + if ((dma_stat & (ATA_DMA_INTR | ATA_DMA_ERR | ATA_DMA_ACTIVE)) == 0 && (ctl & (TX4939IDE_INT_XFEREND | TX4939IDE_INT_HOST)) == (TX4939IDE_INT_XFEREND | TX4939IDE_INT_HOST)) /* INT_IDE lost... bug? */ return 0; - return ((dma_stat & CHECK_DMA_MASK) != + return ((dma_stat & (ATA_DMA_INTR | ATA_DMA_ERR | ATA_DMA_ACTIVE)) != ATA_DMA_INTR) ? 0x10 | dma_stat : 0; } @@ -434,19 +434,97 @@ static void tx4939ide_tf_load_fixup(ide_drive_t *drive) tx4939ide_writew(sysctl, base, TX4939IDE_Sys_Ctl); } -static void tx4939ide_tf_load(ide_drive_t *drive, struct ide_taskfile *tf, - u8 valid) +#ifdef __BIG_ENDIAN + +/* custom iops (independent from SWAP_IO_SPACE) */ +static u8 tx4939ide_inb(unsigned long port) { - ide_tf_load(drive, tf, valid); + return __raw_readb((void __iomem *)port); +} - if (valid & IDE_VALID_DEVICE) +static void tx4939ide_outb(u8 value, unsigned long port) +{ + __raw_writeb(value, (void __iomem *)port); +} + +static void tx4939ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + u8 HIHI = cmd->tf_flags & IDE_TFLAG_LBA48 ? 0xE0 : 0xEF; + + if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) + HIHI = 0xFF; + + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) + tx4939ide_outb(tf->hob_feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) + tx4939ide_outb(tf->hob_nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) + tx4939ide_outb(tf->hob_lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) + tx4939ide_outb(tf->hob_lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) + tx4939ide_outb(tf->hob_lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_FEATURE) + tx4939ide_outb(tf->feature, io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_NSECT) + tx4939ide_outb(tf->nsect, io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAL) + tx4939ide_outb(tf->lbal, io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAM) + tx4939ide_outb(tf->lbam, io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_OUT_LBAH) + tx4939ide_outb(tf->lbah, io_ports->lbah_addr); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) { + tx4939ide_outb((tf->device & HIHI) | drive->select, + io_ports->device_addr); tx4939ide_tf_load_fixup(drive); + } } -#ifdef __BIG_ENDIAN +static void tx4939ide_tf_read(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_hwif_t *hwif = drive->hwif; + struct ide_io_ports *io_ports = &hwif->io_ports; + struct ide_taskfile *tf = &cmd->tf; + + /* be sure we're looking at the low order bits */ + tx4939ide_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_ERROR) + tf->error = tx4939ide_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_NSECT) + tf->nsect = tx4939ide_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAL) + tf->lbal = tx4939ide_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAM) + tf->lbam = tx4939ide_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_LBAH) + tf->lbah = tx4939ide_inb(io_ports->lbah_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_DEVICE) + tf->device = tx4939ide_inb(io_ports->device_addr); + + if (cmd->tf_flags & IDE_TFLAG_LBA48) { + tx4939ide_outb(ATA_HOB | ATA_DEVCTL_OBS, io_ports->ctl_addr); + + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_ERROR) + tf->hob_error = tx4939ide_inb(io_ports->feature_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_NSECT) + tf->hob_nsect = tx4939ide_inb(io_ports->nsect_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAL) + tf->hob_lbal = tx4939ide_inb(io_ports->lbal_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAM) + tf->hob_lbam = tx4939ide_inb(io_ports->lbam_addr); + if (cmd->tf_flags & IDE_TFLAG_IN_HOB_LBAH) + tf->hob_lbah = tx4939ide_inb(io_ports->lbah_addr); + } +} -/* custom iops (independent from SWAP_IO_SPACE) */ -static void tx4939ide_input_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, +static void tx4939ide_input_data_swap(ide_drive_t *drive, struct request *rq, void *buf, unsigned int len) { unsigned long port = drive->hwif->io_ports.data_addr; @@ -458,7 +536,7 @@ static void tx4939ide_input_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, __ide_flush_dcache_range((unsigned long)buf, roundup(len, 2)); } -static void tx4939ide_output_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, +static void tx4939ide_output_data_swap(ide_drive_t *drive, struct request *rq, void *buf, unsigned int len) { unsigned long port = drive->hwif->io_ports.data_addr; @@ -480,7 +558,7 @@ static const struct ide_tp_ops tx4939ide_tp_ops = { .dev_select = ide_dev_select, .tf_load = tx4939ide_tf_load, - .tf_read = ide_tf_read, + .tf_read = tx4939ide_tf_read, .input_data = tx4939ide_input_data_swap, .output_data = tx4939ide_output_data_swap, @@ -488,6 +566,14 @@ static const struct ide_tp_ops tx4939ide_tp_ops = { #else /* __LITTLE_ENDIAN */ +static void tx4939ide_tf_load(ide_drive_t *drive, struct ide_cmd *cmd) +{ + ide_tf_load(drive, cmd); + + if (cmd->tf_flags & IDE_TFLAG_OUT_DEVICE) + tx4939ide_tf_load_fixup(drive); +} + static const struct ide_tp_ops tx4939ide_tp_ops = { .exec_command = ide_exec_command, .read_status = ide_read_status, diff --git a/trunk/drivers/infiniband/core/cma.c b/trunk/drivers/infiniband/core/cma.c index 851de83ff455..2a2e50871b40 100644 --- a/trunk/drivers/infiniband/core/cma.c +++ b/trunk/drivers/infiniband/core/cma.c @@ -297,25 +297,21 @@ static void cma_detach_from_dev(struct rdma_id_private *id_priv) id_priv->cma_dev = NULL; } -static int cma_set_qkey(struct rdma_id_private *id_priv) +static int cma_set_qkey(struct ib_device *device, u8 port_num, + enum rdma_port_space ps, + struct rdma_dev_addr *dev_addr, u32 *qkey) { struct ib_sa_mcmember_rec rec; int ret = 0; - if (id_priv->qkey) - return 0; - - switch (id_priv->id.ps) { + switch (ps) { case RDMA_PS_UDP: - id_priv->qkey = RDMA_UDP_QKEY; + *qkey = RDMA_UDP_QKEY; break; case RDMA_PS_IPOIB: - ib_addr_get_mgid(&id_priv->id.route.addr.dev_addr, &rec.mgid); - ret = ib_sa_get_mcmember_rec(id_priv->id.device, - id_priv->id.port_num, &rec.mgid, - &rec); - if (!ret) - id_priv->qkey = be32_to_cpu(rec.qkey); + ib_addr_get_mgid(dev_addr, &rec.mgid); + ret = ib_sa_get_mcmember_rec(device, port_num, &rec.mgid, &rec); + *qkey = be32_to_cpu(rec.qkey); break; default: break; @@ -345,7 +341,12 @@ static int cma_acquire_dev(struct rdma_id_private *id_priv) ret = ib_find_cached_gid(cma_dev->device, &gid, &id_priv->id.port_num, NULL); if (!ret) { - cma_attach_to_dev(id_priv, cma_dev); + ret = cma_set_qkey(cma_dev->device, + id_priv->id.port_num, + id_priv->id.ps, dev_addr, + &id_priv->qkey); + if (!ret) + cma_attach_to_dev(id_priv, cma_dev); break; } } @@ -577,10 +578,6 @@ static int cma_ib_init_qp_attr(struct rdma_id_private *id_priv, *qp_attr_mask = IB_QP_STATE | IB_QP_PKEY_INDEX | IB_QP_PORT; if (cma_is_ud_ps(id_priv->id.ps)) { - ret = cma_set_qkey(id_priv); - if (ret) - return ret; - qp_attr->qkey = id_priv->qkey; *qp_attr_mask |= IB_QP_QKEY; } else { @@ -2204,12 +2201,6 @@ static int cma_sidr_rep_handler(struct ib_cm_id *cm_id, event.status = ib_event->param.sidr_rep_rcvd.status; break; } - ret = cma_set_qkey(id_priv); - if (ret) { - event.event = RDMA_CM_EVENT_ADDR_ERROR; - event.status = -EINVAL; - break; - } if (id_priv->qkey != rep->qkey) { event.event = RDMA_CM_EVENT_UNREACHABLE; event.status = -EINVAL; @@ -2489,14 +2480,10 @@ static int cma_send_sidr_rep(struct rdma_id_private *id_priv, const void *private_data, int private_data_len) { struct ib_cm_sidr_rep_param rep; - int ret; memset(&rep, 0, sizeof rep); rep.status = status; if (status == IB_SIDR_SUCCESS) { - ret = cma_set_qkey(id_priv); - if (ret) - return ret; rep.qp_num = id_priv->qp_num; rep.qkey = id_priv->qkey; } @@ -2726,10 +2713,6 @@ static int cma_join_ib_multicast(struct rdma_id_private *id_priv, IB_SA_MCMEMBER_REC_FLOW_LABEL | IB_SA_MCMEMBER_REC_TRAFFIC_CLASS; - if (id_priv->id.ps == RDMA_PS_IPOIB) - comp_mask |= IB_SA_MCMEMBER_REC_RATE | - IB_SA_MCMEMBER_REC_RATE_SELECTOR; - mc->multicast.ib = ib_sa_join_multicast(&sa_client, id_priv->id.device, id_priv->id.port_num, &rec, comp_mask, GFP_KERNEL, diff --git a/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.c b/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.c index 8d71086f5a1c..a4a82bff7100 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.c +++ b/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.c @@ -152,7 +152,7 @@ static int cxio_hal_clear_qp_ctx(struct cxio_rdev *rdev_p, u32 qpid) sge_cmd = qpid << 8 | 3; wqe->sge_cmd = cpu_to_be64(sge_cmd); skb->priority = CPL_PRIORITY_CONTROL; - return iwch_cxgb3_ofld_send(rdev_p->t3cdev_p, skb); + return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb)); } int cxio_create_cq(struct cxio_rdev *rdev_p, struct t3_cq *cq) @@ -571,7 +571,7 @@ static int cxio_hal_init_ctrl_qp(struct cxio_rdev *rdev_p) (unsigned long long) rdev_p->ctrl_qp.dma_addr, rdev_p->ctrl_qp.workq, 1 << T3_CTRL_QP_SIZE_LOG2); skb->priority = CPL_PRIORITY_CONTROL; - return iwch_cxgb3_ofld_send(rdev_p->t3cdev_p, skb); + return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb)); err: kfree_skb(skb); return err; @@ -701,7 +701,7 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry, u32 stag_idx; u32 wptr; - if (cxio_fatal_error(rdev_p)) + if (rdev_p->flags) return -EIO; stag_state = stag_state > 0; @@ -858,7 +858,7 @@ int cxio_rdma_init(struct cxio_rdev *rdev_p, struct t3_rdma_init_attr *attr) wqe->qp_dma_size = cpu_to_be32(attr->qp_dma_size); wqe->irs = cpu_to_be32(attr->irs); skb->priority = 0; /* 0=>ToeQ; 1=>CtrlQ */ - return iwch_cxgb3_ofld_send(rdev_p->t3cdev_p, skb); + return (cxgb3_ofld_send(rdev_p->t3cdev_p, skb)); } void cxio_register_ev_cb(cxio_hal_ev_callback_func_t ev_cb) @@ -1041,9 +1041,9 @@ void cxio_rdev_close(struct cxio_rdev *rdev_p) cxio_hal_pblpool_destroy(rdev_p); cxio_hal_rqtpool_destroy(rdev_p); list_del(&rdev_p->entry); + rdev_p->t3cdev_p->ulp = NULL; cxio_hal_destroy_ctrl_qp(rdev_p); cxio_hal_destroy_resource(rdev_p->rscp); - rdev_p->t3cdev_p->ulp = NULL; } } diff --git a/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.h b/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.h index bfd03bf8be54..094a66d1480c 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.h +++ b/trunk/drivers/infiniband/hw/cxgb3/cxio_hal.h @@ -115,11 +115,6 @@ struct cxio_rdev { #define CXIO_ERROR_FATAL 1 }; -static inline int cxio_fatal_error(struct cxio_rdev *rdev_p) -{ - return rdev_p->flags & CXIO_ERROR_FATAL; -} - static inline int cxio_num_stags(struct cxio_rdev *rdev_p) { return min((int)T3_MAX_NUM_STAG, (int)((rdev_p->rnic_info.tpt_top - rdev_p->rnic_info.tpt_base) >> 5)); @@ -193,7 +188,6 @@ void cxio_count_scqes(struct t3_cq *cq, struct t3_wq *wq, int *count); void cxio_flush_hw_cq(struct t3_cq *cq); int cxio_poll_cq(struct t3_wq *wq, struct t3_cq *cq, struct t3_cqe *cqe, u8 *cqe_flushed, u64 *cookie, u32 *credit); -int iwch_cxgb3_ofld_send(struct t3cdev *tdev, struct sk_buff *skb); #define MOD "iw_cxgb3: " #define PDBG(fmt, args...) pr_debug(MOD fmt, ## args) diff --git a/trunk/drivers/infiniband/hw/cxgb3/iwch.c b/trunk/drivers/infiniband/hw/cxgb3/iwch.c index 26fc0a4eaa74..37a4fc264a07 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/iwch.c +++ b/trunk/drivers/infiniband/hw/cxgb3/iwch.c @@ -165,19 +165,12 @@ static void close_rnic_dev(struct t3cdev *tdev) static void iwch_err_handler(struct t3cdev *tdev, u32 status, u32 error) { struct cxio_rdev *rdev = tdev->ulp; - struct iwch_dev *rnicp = rdev_to_iwch_dev(rdev); - struct ib_event event; - if (status == OFFLOAD_STATUS_DOWN) { + if (status == OFFLOAD_STATUS_DOWN) rdev->flags = CXIO_ERROR_FATAL; - event.device = &rnicp->ibdev; - event.event = IB_EVENT_DEVICE_FATAL; - event.element.port_num = 0; - ib_dispatch_event(&event); - } - return; + } static int __init iwch_init_module(void) diff --git a/trunk/drivers/infiniband/hw/cxgb3/iwch.h b/trunk/drivers/infiniband/hw/cxgb3/iwch.h index 84735506333f..3773453b2cf0 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/iwch.h +++ b/trunk/drivers/infiniband/hw/cxgb3/iwch.h @@ -117,11 +117,6 @@ static inline struct iwch_dev *to_iwch_dev(struct ib_device *ibdev) return container_of(ibdev, struct iwch_dev, ibdev); } -static inline struct iwch_dev *rdev_to_iwch_dev(struct cxio_rdev *rdev) -{ - return container_of(rdev, struct iwch_dev, rdev); -} - static inline int t3b_device(const struct iwch_dev *rhp) { return rhp->rdev.t3cdev_p->type == T3B; diff --git a/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.c b/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.c index fef3f1ae7225..8699947aaf6c 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.c +++ b/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.c @@ -139,38 +139,6 @@ static void stop_ep_timer(struct iwch_ep *ep) put_ep(&ep->com); } -int iwch_l2t_send(struct t3cdev *tdev, struct sk_buff *skb, struct l2t_entry *l2e) -{ - int error = 0; - struct cxio_rdev *rdev; - - rdev = (struct cxio_rdev *)tdev->ulp; - if (cxio_fatal_error(rdev)) { - kfree_skb(skb); - return -EIO; - } - error = l2t_send(tdev, skb, l2e); - if (error) - kfree_skb(skb); - return error; -} - -int iwch_cxgb3_ofld_send(struct t3cdev *tdev, struct sk_buff *skb) -{ - int error = 0; - struct cxio_rdev *rdev; - - rdev = (struct cxio_rdev *)tdev->ulp; - if (cxio_fatal_error(rdev)) { - kfree_skb(skb); - return -EIO; - } - error = cxgb3_ofld_send(tdev, skb); - if (error) - kfree_skb(skb); - return error; -} - static void release_tid(struct t3cdev *tdev, u32 hwtid, struct sk_buff *skb) { struct cpl_tid_release *req; @@ -182,7 +150,7 @@ static void release_tid(struct t3cdev *tdev, u32 hwtid, struct sk_buff *skb) req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_TID_RELEASE, hwtid)); skb->priority = CPL_PRIORITY_SETUP; - iwch_cxgb3_ofld_send(tdev, skb); + cxgb3_ofld_send(tdev, skb); return; } @@ -204,7 +172,8 @@ int iwch_quiesce_tid(struct iwch_ep *ep) req->val = cpu_to_be64(1 << S_TCB_RX_QUIESCE); skb->priority = CPL_PRIORITY_DATA; - return iwch_cxgb3_ofld_send(ep->com.tdev, skb); + cxgb3_ofld_send(ep->com.tdev, skb); + return 0; } int iwch_resume_tid(struct iwch_ep *ep) @@ -225,7 +194,8 @@ int iwch_resume_tid(struct iwch_ep *ep) req->val = 0; skb->priority = CPL_PRIORITY_DATA; - return iwch_cxgb3_ofld_send(ep->com.tdev, skb); + cxgb3_ofld_send(ep->com.tdev, skb); + return 0; } static void set_emss(struct iwch_ep *ep, u16 opt) @@ -282,22 +252,18 @@ static void *alloc_ep(int size, gfp_t gfp) void __free_ep(struct kref *kref) { - struct iwch_ep *ep; - ep = container_of(container_of(kref, struct iwch_ep_common, kref), - struct iwch_ep, com); - PDBG("%s ep %p state %s\n", __func__, ep, states[state_read(&ep->com)]); - if (ep->com.flags & RELEASE_RESOURCES) { - cxgb3_remove_tid(ep->com.tdev, (void *)ep, ep->hwtid); - dst_release(ep->dst); - l2t_release(L2DATA(ep->com.tdev), ep->l2t); - } - kfree(ep); + struct iwch_ep_common *epc; + epc = container_of(kref, struct iwch_ep_common, kref); + PDBG("%s ep %p state %s\n", __func__, epc, states[state_read(epc)]); + kfree(epc); } static void release_ep_resources(struct iwch_ep *ep) { PDBG("%s ep %p tid %d\n", __func__, ep, ep->hwtid); - ep->com.flags |= RELEASE_RESOURCES; + cxgb3_remove_tid(ep->com.tdev, (void *)ep, ep->hwtid); + dst_release(ep->dst); + l2t_release(L2DATA(ep->com.tdev), ep->l2t); put_ep(&ep->com); } @@ -416,7 +382,7 @@ static void abort_arp_failure(struct t3cdev *dev, struct sk_buff *skb) PDBG("%s t3cdev %p\n", __func__, dev); req->cmd = CPL_ABORT_NO_RST; - iwch_cxgb3_ofld_send(dev, skb); + cxgb3_ofld_send(dev, skb); } static int send_halfclose(struct iwch_ep *ep, gfp_t gfp) @@ -436,7 +402,8 @@ static int send_halfclose(struct iwch_ep *ep, gfp_t gfp) req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_CLOSE_CON)); req->wr.wr_lo = htonl(V_WR_TID(ep->hwtid)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_CON_REQ, ep->hwtid)); - return iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); + return 0; } static int send_abort(struct iwch_ep *ep, struct sk_buff *skb, gfp_t gfp) @@ -457,7 +424,8 @@ static int send_abort(struct iwch_ep *ep, struct sk_buff *skb, gfp_t gfp) req->wr.wr_lo = htonl(V_WR_TID(ep->hwtid)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_ABORT_REQ, ep->hwtid)); req->cmd = CPL_ABORT_SEND_RST; - return iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); + return 0; } static int send_connect(struct iwch_ep *ep) @@ -501,7 +469,8 @@ static int send_connect(struct iwch_ep *ep) req->opt0l = htonl(opt0l); req->params = 0; req->opt2 = htonl(opt2); - return iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); + return 0; } static void send_mpa_req(struct iwch_ep *ep, struct sk_buff *skb) @@ -558,7 +527,7 @@ static void send_mpa_req(struct iwch_ep *ep, struct sk_buff *skb) req->sndseq = htonl(ep->snd_seq); BUG_ON(ep->mpa_skb); ep->mpa_skb = skb; - iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); start_ep_timer(ep); state_set(&ep->com, MPA_REQ_SENT); return; @@ -609,7 +578,8 @@ static int send_mpa_reject(struct iwch_ep *ep, const void *pdata, u8 plen) req->sndseq = htonl(ep->snd_seq); BUG_ON(ep->mpa_skb); ep->mpa_skb = skb; - return iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); + return 0; } static int send_mpa_reply(struct iwch_ep *ep, const void *pdata, u8 plen) @@ -660,7 +630,8 @@ static int send_mpa_reply(struct iwch_ep *ep, const void *pdata, u8 plen) req->sndseq = htonl(ep->snd_seq); ep->mpa_skb = skb; state_set(&ep->com, MPA_REP_SENT); - return iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); + return 0; } static int act_establish(struct t3cdev *tdev, struct sk_buff *skb, void *ctx) @@ -824,7 +795,7 @@ static int update_rx_credits(struct iwch_ep *ep, u32 credits) OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_RX_DATA_ACK, ep->hwtid)); req->credit_dack = htonl(V_RX_CREDITS(credits) | V_RX_FORCE_ACK(1)); skb->priority = CPL_PRIORITY_ACK; - iwch_cxgb3_ofld_send(ep->com.tdev, skb); + cxgb3_ofld_send(ep->com.tdev, skb); return credits; } @@ -1156,8 +1127,8 @@ static int abort_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx) * We get 2 abort replies from the HW. The first one must * be ignored except for scribbling that we need one more. */ - if (!(ep->com.flags & ABORT_REQ_IN_PROGRESS)) { - ep->com.flags |= ABORT_REQ_IN_PROGRESS; + if (!(ep->flags & ABORT_REQ_IN_PROGRESS)) { + ep->flags |= ABORT_REQ_IN_PROGRESS; return CPL_RET_BUF_DONE; } @@ -1232,7 +1203,8 @@ static int listen_start(struct iwch_listen_ep *ep) req->opt1 = htonl(V_CONN_POLICY(CPL_CONN_POLICY_ASK)); skb->priority = 1; - return iwch_cxgb3_ofld_send(ep->com.tdev, skb); + cxgb3_ofld_send(ep->com.tdev, skb); + return 0; } static int pass_open_rpl(struct t3cdev *tdev, struct sk_buff *skb, void *ctx) @@ -1265,7 +1237,8 @@ static int listen_stop(struct iwch_listen_ep *ep) req->cpu_idx = 0; OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_CLOSE_LISTSRV_REQ, ep->stid)); skb->priority = 1; - return iwch_cxgb3_ofld_send(ep->com.tdev, skb); + cxgb3_ofld_send(ep->com.tdev, skb); + return 0; } static int close_listsrv_rpl(struct t3cdev *tdev, struct sk_buff *skb, @@ -1313,7 +1286,7 @@ static void accept_cr(struct iwch_ep *ep, __be32 peer_ip, struct sk_buff *skb) rpl->opt2 = htonl(opt2); rpl->rsvd = rpl->opt2; /* workaround for HW bug */ skb->priority = CPL_PRIORITY_SETUP; - iwch_l2t_send(ep->com.tdev, skb, ep->l2t); + l2t_send(ep->com.tdev, skb, ep->l2t); return; } @@ -1342,7 +1315,7 @@ static void reject_cr(struct t3cdev *tdev, u32 hwtid, __be32 peer_ip, rpl->opt0l_status = htonl(CPL_PASS_OPEN_REJECT); rpl->opt2 = 0; rpl->rsvd = rpl->opt2; - iwch_cxgb3_ofld_send(tdev, skb); + cxgb3_ofld_send(tdev, skb); } } @@ -1561,8 +1534,8 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx) * We get 2 peer aborts from the HW. The first one must * be ignored except for scribbling that we need one more. */ - if (!(ep->com.flags & PEER_ABORT_IN_PROGRESS)) { - ep->com.flags |= PEER_ABORT_IN_PROGRESS; + if (!(ep->flags & PEER_ABORT_IN_PROGRESS)) { + ep->flags |= PEER_ABORT_IN_PROGRESS; return CPL_RET_BUF_DONE; } @@ -1640,7 +1613,7 @@ static int peer_abort(struct t3cdev *tdev, struct sk_buff *skb, void *ctx) rpl->wr.wr_lo = htonl(V_WR_TID(ep->hwtid)); OPCODE_TID(rpl) = htonl(MK_OPCODE_TID(CPL_ABORT_RPL, ep->hwtid)); rpl->cmd = CPL_ABORT_NO_RST; - iwch_cxgb3_ofld_send(ep->com.tdev, rpl_skb); + cxgb3_ofld_send(ep->com.tdev, rpl_skb); out: if (release) release_ep_resources(ep); @@ -2044,11 +2017,8 @@ int iwch_destroy_listen(struct iw_cm_id *cm_id) ep->com.rpl_done = 0; ep->com.rpl_err = 0; err = listen_stop(ep); - if (err) - goto done; wait_event(ep->com.waitq, ep->com.rpl_done); cxgb3_free_stid(ep->com.tdev, ep->stid); -done: err = ep->com.rpl_err; cm_id->rem_ref(cm_id); put_ep(&ep->com); @@ -2060,22 +2030,12 @@ int iwch_ep_disconnect(struct iwch_ep *ep, int abrupt, gfp_t gfp) int ret=0; unsigned long flags; int close = 0; - int fatal = 0; - struct t3cdev *tdev; - struct cxio_rdev *rdev; spin_lock_irqsave(&ep->com.lock, flags); PDBG("%s ep %p state %s, abrupt %d\n", __func__, ep, states[ep->com.state], abrupt); - tdev = (struct t3cdev *)ep->com.tdev; - rdev = (struct cxio_rdev *)tdev->ulp; - if (cxio_fatal_error(rdev)) { - fatal = 1; - close_complete_upcall(ep); - ep->com.state = DEAD; - } switch (ep->com.state) { case MPA_REQ_WAIT: case MPA_REQ_SENT: @@ -2115,11 +2075,7 @@ int iwch_ep_disconnect(struct iwch_ep *ep, int abrupt, gfp_t gfp) ret = send_abort(ep, NULL, gfp); else ret = send_halfclose(ep, gfp); - if (ret) - fatal = 1; } - if (fatal) - release_ep_resources(ep); return ret; } diff --git a/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.h b/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.h index 43c0aea7eadc..d7c7e09f0996 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.h +++ b/trunk/drivers/infiniband/hw/cxgb3/iwch_cm.h @@ -147,7 +147,6 @@ enum iwch_ep_state { enum iwch_ep_flags { PEER_ABORT_IN_PROGRESS = (1 << 0), ABORT_REQ_IN_PROGRESS = (1 << 1), - RELEASE_RESOURCES = (1 << 2), }; struct iwch_ep_common { @@ -162,7 +161,6 @@ struct iwch_ep_common { wait_queue_head_t waitq; int rpl_done; int rpl_err; - u32 flags; }; struct iwch_listen_ep { @@ -190,6 +188,7 @@ struct iwch_ep { u16 plen; u32 ird; u32 ord; + u32 flags; }; static inline struct iwch_ep *to_ep(struct iw_cm_id *cm_id) diff --git a/trunk/drivers/infiniband/hw/cxgb3/iwch_qp.c b/trunk/drivers/infiniband/hw/cxgb3/iwch_qp.c index 2f546a625330..c758fbd58478 100644 --- a/trunk/drivers/infiniband/hw/cxgb3/iwch_qp.c +++ b/trunk/drivers/infiniband/hw/cxgb3/iwch_qp.c @@ -751,7 +751,7 @@ int iwch_post_zb_read(struct iwch_qp *qhp) wqe->send.wrh.gen_tid_len = cpu_to_be32(V_FW_RIWR_TID(qhp->ep->hwtid)| V_FW_RIWR_LEN(flit_cnt)); skb->priority = CPL_PRIORITY_DATA; - return iwch_cxgb3_ofld_send(qhp->rhp->rdev.t3cdev_p, skb); + return cxgb3_ofld_send(qhp->rhp->rdev.t3cdev_p, skb); } /* @@ -783,7 +783,7 @@ int iwch_post_terminate(struct iwch_qp *qhp, struct respQ_msg_t *rsp_msg) V_FW_RIWR_FLAGS(T3_COMPLETION_FLAG | T3_NOTIFY_FLAG)); wqe->send.wrh.gen_tid_len = cpu_to_be32(V_FW_RIWR_TID(qhp->ep->hwtid)); skb->priority = CPL_PRIORITY_DATA; - return iwch_cxgb3_ofld_send(qhp->rhp->rdev.t3cdev_p, skb); + return cxgb3_ofld_send(qhp->rhp->rdev.t3cdev_p, skb); } /* diff --git a/trunk/drivers/infiniband/hw/mlx4/main.c b/trunk/drivers/infiniband/hw/mlx4/main.c index ae3d7590346e..2ccb9d31771f 100644 --- a/trunk/drivers/infiniband/hw/mlx4/main.c +++ b/trunk/drivers/infiniband/hw/mlx4/main.c @@ -394,7 +394,8 @@ static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) PAGE_SIZE, vma->vm_page_prot)) return -EAGAIN; } else if (vma->vm_pgoff == 1 && dev->dev->caps.bf_reg_size != 0) { - vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + /* FIXME want pgprot_writecombine() for BlueFlame pages */ + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); if (io_remap_pfn_range(vma, vma->vm_start, to_mucontext(context)->uar.pfn + diff --git a/trunk/drivers/infiniband/hw/nes/nes.h b/trunk/drivers/infiniband/hw/nes/nes.h index 17621de54a9f..04b12ad23390 100644 --- a/trunk/drivers/infiniband/hw/nes/nes.h +++ b/trunk/drivers/infiniband/hw/nes/nes.h @@ -289,8 +289,8 @@ static inline __le32 get_crc_value(struct nes_v4_quad *nes_quad) static inline void set_wqe_64bit_value(__le32 *wqe_words, u32 index, u64 value) { - wqe_words[index] = cpu_to_le32((u32) value); - wqe_words[index + 1] = cpu_to_le32(upper_32_bits(value)); + wqe_words[index] = cpu_to_le32((u32) ((unsigned long)value)); + wqe_words[index + 1] = cpu_to_le32((u32)(upper_32_bits((unsigned long)value))); } static inline void diff --git a/trunk/drivers/infiniband/hw/nes/nes_cm.c b/trunk/drivers/infiniband/hw/nes/nes_cm.c index dbd9a75474e3..52425154acd4 100644 --- a/trunk/drivers/infiniband/hw/nes/nes_cm.c +++ b/trunk/drivers/infiniband/hw/nes/nes_cm.c @@ -426,7 +426,6 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, if (type == NES_TIMER_TYPE_CLOSE) { new_send->timetosend += (HZ/10); if (cm_node->recv_entry) { - kfree(new_send); WARN_ON(1); return -EINVAL; } @@ -446,8 +445,8 @@ int schedule_nes_timer(struct nes_cm_node *cm_node, struct sk_buff *skb, if (ret != NETDEV_TX_OK) { nes_debug(NES_DBG_CM, "Error sending packet %p " "(jiffies = %lu)\n", new_send, jiffies); + atomic_dec(&new_send->skb->users); new_send->timetosend = jiffies; - ret = NETDEV_TX_OK; } else { cm_packets_sent++; if (!send_retrans) { @@ -631,6 +630,7 @@ static void nes_cm_timer_tick(unsigned long pass) nes_debug(NES_DBG_CM, "rexmit failed for " "node=%p\n", cm_node); cm_packets_bounced++; + atomic_dec(&send_entry->skb->users); send_entry->retrycount--; nexttimeout = jiffies + NES_SHORT_TIME; settimer = 1; @@ -666,6 +666,11 @@ static void nes_cm_timer_tick(unsigned long pass) spin_unlock_irqrestore(&cm_node->retrans_list_lock, flags); rem_ref_cm_node(cm_node->cm_core, cm_node); + if (ret != NETDEV_TX_OK) { + nes_debug(NES_DBG_CM, "rexmit failed for cm_node=%p\n", + cm_node); + break; + } } if (settimer) { @@ -1257,6 +1262,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core, cm_node->nesqp = NULL; } + cm_node->freed = 1; kfree(cm_node); return 0; } @@ -1993,17 +1999,13 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core, if (loopbackremotelistener == NULL) { create_event(cm_node, NES_CM_EVENT_ABORTED); } else { + atomic_inc(&cm_loopbacks); loopback_cm_info = *cm_info; loopback_cm_info.loc_port = cm_info->rem_port; loopback_cm_info.rem_port = cm_info->loc_port; loopback_cm_info.cm_id = loopbackremotelistener->cm_id; loopbackremotenode = make_cm_node(cm_core, nesvnic, &loopback_cm_info, loopbackremotelistener); - if (!loopbackremotenode) { - rem_ref_cm_node(cm_node->cm_core, cm_node); - return NULL; - } - atomic_inc(&cm_loopbacks); loopbackremotenode->loopbackpartner = cm_node; loopbackremotenode->tcp_cntxt.rcv_wscale = NES_CM_DEFAULT_RCV_WND_SCALE; @@ -2688,7 +2690,6 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) struct ib_mr *ibmr = NULL; struct ib_phys_buf ibphysbuf; struct nes_pd *nespd; - u64 tagged_offset; @@ -2754,11 +2755,10 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) ibphysbuf.addr = nesqp->ietf_frame_pbase; ibphysbuf.size = conn_param->private_data_len + sizeof(struct ietf_mpa_frame); - tagged_offset = (u64)(unsigned long)nesqp->ietf_frame; ibmr = nesibdev->ibdev.reg_phys_mr((struct ib_pd *)nespd, &ibphysbuf, 1, IB_ACCESS_LOCAL_WRITE, - &tagged_offset); + (u64 *)&nesqp->ietf_frame); if (!ibmr) { nes_debug(NES_DBG_CM, "Unable to register memory region" "for lSMM for cm_node = %p \n", @@ -2782,7 +2782,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) sizeof(struct ietf_mpa_frame)); set_wqe_64bit_value(wqe->wqe_words, NES_IWARP_SQ_WQE_FRAG0_LOW_IDX, - (u64)(unsigned long)nesqp->ietf_frame); + (u64)nesqp->ietf_frame); wqe->wqe_words[NES_IWARP_SQ_WQE_LENGTH0_IDX] = cpu_to_le32(conn_param->private_data_len + sizeof(struct ietf_mpa_frame)); diff --git a/trunk/drivers/infiniband/hw/nes/nes_cm.h b/trunk/drivers/infiniband/hw/nes/nes_cm.h index 80bba1892571..d5f778202eb7 100644 --- a/trunk/drivers/infiniband/hw/nes/nes_cm.h +++ b/trunk/drivers/infiniband/hw/nes/nes_cm.h @@ -298,6 +298,7 @@ struct nes_cm_node { struct nes_vnic *nesvnic; int apbvt_set; int accept_pend; + int freed; struct list_head timer_entry; struct list_head reset_entry; struct nes_qp *nesqp; diff --git a/trunk/drivers/infiniband/hw/nes/nes_hw.c b/trunk/drivers/infiniband/hw/nes/nes_hw.c index d6fc9ae44062..52e734042b8e 100644 --- a/trunk/drivers/infiniband/hw/nes/nes_hw.c +++ b/trunk/drivers/infiniband/hw/nes/nes_hw.c @@ -46,10 +46,6 @@ static unsigned int nes_lro_max_aggr = NES_LRO_MAX_AGGR; module_param(nes_lro_max_aggr, uint, 0444); MODULE_PARM_DESC(nes_lro_max_aggr, "NIC LRO max packet aggregation"); -static int wide_ppm_offset; -module_param(wide_ppm_offset, int, 0644); -MODULE_PARM_DESC(wide_ppm_offset, "Increase CX4 interface clock ppm offset, 0=100ppm (default), 1=300ppm"); - static u32 crit_err_count; u32 int_mod_timer_init; u32 int_mod_cq_depth_256; @@ -550,11 +546,8 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { msleep(1); } if (int_cnt > 1) { - u32 sds; spin_lock_irqsave(&nesadapter->phy_lock, flags); - sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); - sds |= 0x00000040; - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); + nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, 0x0000F088); mh_detected++; reset_value = nes_read32(nesdev->regs+NES_SOFTWARE_RESET); reset_value |= 0x0000003d; @@ -743,49 +736,39 @@ static int nes_init_serdes(struct nes_device *nesdev, u8 hw_rev, u8 port_count, { int i; u32 u32temp; - u32 sds; + u32 serdes_common_control; if (hw_rev != NE020_REV) { /* init serdes 0 */ - if (wide_ppm_offset && (nesadapter->phy_type[0] == NES_PHY_TYPE_CX4)) - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL0, 0x000FFFAA); - else - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL0, 0x000000FF); + nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL0, 0x000000FF); if (nesadapter->phy_type[0] == NES_PHY_TYPE_PUMA_1G) { - sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0); - sds |= 0x00000100; - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, sds); - } - if (!OneG_Mode) + serdes_common_control = nes_read_indexed(nesdev, + NES_IDX_ETH_SERDES_COMMON_CONTROL0); + serdes_common_control |= 0x000000100; + nes_write_indexed(nesdev, + NES_IDX_ETH_SERDES_COMMON_CONTROL0, + serdes_common_control); + } else if (!OneG_Mode) { nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE0, 0x11110000); - - if (port_count < 2) - return 0; - - /* init serdes 1 */ - switch (nesadapter->phy_type[1]) { - case NES_PHY_TYPE_ARGUS: - case NES_PHY_TYPE_SFP_D: - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_EMP0, 0x00000000); - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_EMP1, 0x00000000); - break; - case NES_PHY_TYPE_CX4: - sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); - sds &= 0xFFFFFFBF; - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); - if (wide_ppm_offset) - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000FFFAA); - else - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000000FF); - break; - case NES_PHY_TYPE_PUMA_1G: - sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1); - sds |= 0x000000100; - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL1, sds); } - if (!OneG_Mode) - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE1, 0x11110000); + if (((port_count > 1) && + (nesadapter->phy_type[0] != NES_PHY_TYPE_PUMA_1G)) || + ((port_count > 2) && + (nesadapter->phy_type[0] == NES_PHY_TYPE_PUMA_1G))) { + /* init serdes 1 */ + nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_CDR_CONTROL1, 0x000000FF); + if (nesadapter->phy_type[0] == NES_PHY_TYPE_PUMA_1G) { + serdes_common_control = nes_read_indexed(nesdev, + NES_IDX_ETH_SERDES_COMMON_CONTROL1); + serdes_common_control |= 0x000000100; + nes_write_indexed(nesdev, + NES_IDX_ETH_SERDES_COMMON_CONTROL1, + serdes_common_control); + } else if (!OneG_Mode) { + nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_TX_HIGHZ_LANE_MODE1, 0x11110000); + } + } } else { /* init serdes 0 */ nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, 0x00000008); @@ -1276,162 +1259,203 @@ int nes_init_phy(struct nes_device *nesdev) { struct nes_adapter *nesadapter = nesdev->nesadapter; u32 counter = 0; - u32 sds; + u32 sds_common_control0; u32 mac_index = nesdev->mac_index; u32 tx_config = 0; u16 phy_data; u32 temp_phy_data = 0; u32 temp_phy_data2 = 0; - u8 phy_type = nesadapter->phy_type[mac_index]; - u8 phy_index = nesadapter->phy_index[mac_index]; + u32 i = 0; if ((nesadapter->OneG_Mode) && - (phy_type != NES_PHY_TYPE_PUMA_1G)) { + (nesadapter->phy_type[mac_index] != NES_PHY_TYPE_PUMA_1G)) { nes_debug(NES_DBG_PHY, "1G PHY, mac_index = %d.\n", mac_index); - if (phy_type == NES_PHY_TYPE_1G) { + if (nesadapter->phy_type[mac_index] == NES_PHY_TYPE_1G) { + printk(PFX "%s: Programming mdc config for 1G\n", __func__); tx_config = nes_read_indexed(nesdev, NES_IDX_MAC_TX_CONFIG); tx_config &= 0xFFFFFFE3; tx_config |= 0x04; nes_write_indexed(nesdev, NES_IDX_MAC_TX_CONFIG, tx_config); } - nes_read_1G_phy_reg(nesdev, 1, phy_index, &phy_data); - nes_write_1G_phy_reg(nesdev, 23, phy_index, 0xb000); + nes_read_1G_phy_reg(nesdev, 1, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 1 phy address %u = 0x%X.\n", + nesadapter->phy_index[mac_index], phy_data); + nes_write_1G_phy_reg(nesdev, 23, nesadapter->phy_index[mac_index], 0xb000); /* Reset the PHY */ - nes_write_1G_phy_reg(nesdev, 0, phy_index, 0x8000); + nes_write_1G_phy_reg(nesdev, 0, nesadapter->phy_index[mac_index], 0x8000); udelay(100); counter = 0; do { - nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); - if (counter++ > 100) - break; + nes_read_1G_phy_reg(nesdev, 0, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0 = 0x%X.\n", phy_data); + if (counter++ > 100) break; } while (phy_data & 0x8000); /* Setting no phy loopback */ phy_data &= 0xbfff; phy_data |= 0x1140; - nes_write_1G_phy_reg(nesdev, 0, phy_index, phy_data); - nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); - nes_read_1G_phy_reg(nesdev, 0x17, phy_index, &phy_data); - nes_read_1G_phy_reg(nesdev, 0x1e, phy_index, &phy_data); + nes_write_1G_phy_reg(nesdev, 0, nesadapter->phy_index[mac_index], phy_data); + nes_read_1G_phy_reg(nesdev, 0, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0 = 0x%X.\n", phy_data); + + nes_read_1G_phy_reg(nesdev, 0x17, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x17 = 0x%X.\n", phy_data); + + nes_read_1G_phy_reg(nesdev, 0x1e, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x1e = 0x%X.\n", phy_data); /* Setting the interrupt mask */ - nes_read_1G_phy_reg(nesdev, 0x19, phy_index, &phy_data); - nes_write_1G_phy_reg(nesdev, 0x19, phy_index, 0xffee); - nes_read_1G_phy_reg(nesdev, 0x19, phy_index, &phy_data); + nes_read_1G_phy_reg(nesdev, 0x19, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x19 = 0x%X.\n", phy_data); + nes_write_1G_phy_reg(nesdev, 0x19, nesadapter->phy_index[mac_index], 0xffee); - /* turning on flow control */ - nes_read_1G_phy_reg(nesdev, 4, phy_index, &phy_data); - nes_write_1G_phy_reg(nesdev, 4, phy_index, (phy_data & ~(0x03E0)) | 0xc00); - nes_read_1G_phy_reg(nesdev, 4, phy_index, &phy_data); + nes_read_1G_phy_reg(nesdev, 0x19, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x19 = 0x%X.\n", phy_data); + /* turning on flow control */ + nes_read_1G_phy_reg(nesdev, 4, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x4 = 0x%X.\n", phy_data); + nes_write_1G_phy_reg(nesdev, 4, nesadapter->phy_index[mac_index], + (phy_data & ~(0x03E0)) | 0xc00); + /* nes_write_1G_phy_reg(nesdev, 4, nesadapter->phy_index[mac_index], + phy_data | 0xc00); */ + nes_read_1G_phy_reg(nesdev, 4, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x4 = 0x%X.\n", phy_data); + + nes_read_1G_phy_reg(nesdev, 9, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x9 = 0x%X.\n", phy_data); /* Clear Half duplex */ - nes_read_1G_phy_reg(nesdev, 9, phy_index, &phy_data); - nes_write_1G_phy_reg(nesdev, 9, phy_index, phy_data & ~(0x0100)); - nes_read_1G_phy_reg(nesdev, 9, phy_index, &phy_data); + nes_write_1G_phy_reg(nesdev, 9, nesadapter->phy_index[mac_index], + phy_data & ~(0x0100)); + nes_read_1G_phy_reg(nesdev, 9, nesadapter->phy_index[mac_index], &phy_data); + nes_debug(NES_DBG_PHY, "Phy data from register 0x9 = 0x%X.\n", phy_data); - nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); - nes_write_1G_phy_reg(nesdev, 0, phy_index, phy_data | 0x0300); + nes_read_1G_phy_reg(nesdev, 0, nesadapter->phy_index[mac_index], &phy_data); + nes_write_1G_phy_reg(nesdev, 0, nesadapter->phy_index[mac_index], phy_data | 0x0300); + } else { + if ((nesadapter->phy_type[mac_index] == NES_PHY_TYPE_IRIS) || + (nesadapter->phy_type[mac_index] == NES_PHY_TYPE_ARGUS)) { + /* setup 10G MDIO operation */ + tx_config = nes_read_indexed(nesdev, NES_IDX_MAC_TX_CONFIG); + tx_config &= 0xFFFFFFE3; + tx_config |= 0x15; + nes_write_indexed(nesdev, NES_IDX_MAC_TX_CONFIG, tx_config); + } + if ((nesadapter->phy_type[mac_index] == NES_PHY_TYPE_ARGUS)) { + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0xd7ee); - return 0; - } + temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); + mdelay(10); + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0xd7ee); + temp_phy_data2 = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - if ((phy_type == NES_PHY_TYPE_IRIS) || - (phy_type == NES_PHY_TYPE_ARGUS) || - (phy_type == NES_PHY_TYPE_SFP_D)) { - /* setup 10G MDIO operation */ - tx_config = nes_read_indexed(nesdev, NES_IDX_MAC_TX_CONFIG); - tx_config &= 0xFFFFFFE3; - tx_config |= 0x15; - nes_write_indexed(nesdev, NES_IDX_MAC_TX_CONFIG, tx_config); - } - if ((phy_type == NES_PHY_TYPE_ARGUS) || - (phy_type == NES_PHY_TYPE_SFP_D)) { - /* Check firmware heartbeat */ - nes_read_10G_phy_reg(nesdev, phy_index, 0x3, 0xd7ee); - temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - udelay(1500); - nes_read_10G_phy_reg(nesdev, phy_index, 0x3, 0xd7ee); - temp_phy_data2 = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - - if (temp_phy_data != temp_phy_data2) - return 0; + /* + * if firmware is already running (like from a + * driver un-load/load, don't do anything. + */ + if (temp_phy_data == temp_phy_data2) { + /* configure QT2505 AMCC PHY */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0x0000, 0x8000); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc300, 0x0000); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc302, 0x0044); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc318, 0x0052); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc319, 0x0008); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc31a, 0x0098); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0x0026, 0x0E00); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0x0027, 0x0001); + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0x0028, 0xA528); - /* no heartbeat, configure the PHY */ - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0x0000, 0x8000); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc300, 0x0000); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc316, 0x000A); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc318, 0x0052); - if (phy_type == NES_PHY_TYPE_ARGUS) { - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x000C); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0008); - } else { - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc302, 0x0004); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc319, 0x0038); - } - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc31a, 0x0098); - nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0026, 0x0E00); - nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0027, 0x0001); + /* + * remove micro from reset; chip boots from ROM, + * uploads EEPROM f/w image, uC executes f/w + */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc300, 0x0002); - /* setup LEDs */ - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd006, 0x0007); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd007, 0x000A); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd008, 0x0009); + /* + * wait for heart beat to start to + * know loading is done + */ + counter = 0; + do { + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0xd7ee); + temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); + if (counter++ > 1000) { + nes_debug(NES_DBG_PHY, "AMCC PHY- breaking from heartbeat check \n"); + break; + } + mdelay(100); + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0xd7ee); + temp_phy_data2 = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); + } while ((temp_phy_data2 == temp_phy_data)); - nes_write_10G_phy_reg(nesdev, phy_index, 0x3, 0x0028, 0xA528); + /* + * wait for tracking to start to know + * f/w is good to go + */ + counter = 0; + do { + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x3, 0xd7fd); + temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); + if (counter++ > 1000) { + nes_debug(NES_DBG_PHY, "AMCC PHY- breaking from status check \n"); + break; + } + mdelay(1000); + /* + * nes_debug(NES_DBG_PHY, "AMCC PHY- phy_status not ready yet = 0x%02X\n", + * temp_phy_data); + */ + } while (((temp_phy_data & 0xff) != 0x50) && ((temp_phy_data & 0xff) != 0x70)); + + /* set LOS Control invert RXLOSB_I_PADINV */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xd003, 0x0000); + /* set LOS Control to mask of RXLOSB_I */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xc314, 0x0042); + /* set LED1 to input mode (LED1 and LED2 share same LED) */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xd006, 0x0007); + /* set LED2 to RX link_status and activity */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xd007, 0x000A); + /* set LED3 to RX link_status */ + nes_write_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 0x1, 0xd008, 0x0009); - /* Bring PHY out of reset */ - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc300, 0x0002); + /* + * reset the res-calibration on t2 + * serdes; ensures it is stable after + * the amcc phy is stable + */ - /* Check for heartbeat */ - counter = 0; - mdelay(690); - nes_read_10G_phy_reg(nesdev, phy_index, 0x3, 0xd7ee); - temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - do { - if (counter++ > 150) { - nes_debug(NES_DBG_PHY, "No PHY heartbeat\n"); - break; - } - mdelay(1); - nes_read_10G_phy_reg(nesdev, phy_index, 0x3, 0xd7ee); - temp_phy_data2 = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - } while ((temp_phy_data2 == temp_phy_data)); + sds_common_control0 = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0); + sds_common_control0 |= 0x1; + nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, sds_common_control0); - /* wait for tracking */ - counter = 0; - do { - nes_read_10G_phy_reg(nesdev, phy_index, 0x3, 0xd7fd); - temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - if (counter++ > 300) { - nes_debug(NES_DBG_PHY, "PHY did not track\n"); - break; - } - mdelay(10); - } while (((temp_phy_data & 0xff) != 0x50) && ((temp_phy_data & 0xff) != 0x70)); - - /* setup signal integrity */ - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xd003, 0x0000); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xF00D, 0x00FE); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xF00E, 0x0032); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xF00F, 0x0002); - nes_write_10G_phy_reg(nesdev, phy_index, 0x1, 0xc314, 0x0063); - - /* reset serdes */ - sds = nes_read_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0 + - mac_index * 0x200); - sds |= 0x1; - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0 + - mac_index * 0x200, sds); - sds &= 0xfffffffe; - nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0 + - mac_index * 0x200, sds); + /* release the res-calibration reset */ + sds_common_control0 &= 0xfffffffe; + nes_write_indexed(nesdev, NES_IDX_ETH_SERDES_COMMON_CONTROL0, sds_common_control0); - counter = 0; - while (((nes_read32(nesdev->regs + NES_SOFTWARE_RESET) & 0x00000040) != 0x00000040) - && (counter++ < 5000)) - ; + i = 0; + while (((nes_read32(nesdev->regs + NES_SOFTWARE_RESET) & 0x00000040) != 0x00000040) + && (i++ < 5000)) { + /* mdelay(1); */ + } + + /* + * wait for link train done before moving on, + * or will get an interupt storm + */ + counter = 0; + do { + temp_phy_data = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + + (0x200 * (nesdev->mac_index & 1))); + if (counter++ > 1000) { + nes_debug(NES_DBG_PHY, "AMCC PHY- breaking from link train wait \n"); + break; + } + mdelay(1); + } while (((temp_phy_data & 0x0f1f0000) != 0x0f0f0000)); + } + } } return 0; } @@ -2335,7 +2359,6 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number) u16 temp_phy_data; u32 pcs_val = 0x0f0f0000; u32 pcs_mask = 0x0f1f0000; - u32 cdr_ctrl; spin_lock_irqsave(&nesadapter->phy_lock, flags); if (nesadapter->mac_sw_state[mac_number] != NES_MAC_SW_IDLE) { @@ -2450,7 +2473,6 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number) break; case NES_PHY_TYPE_ARGUS: - case NES_PHY_TYPE_SFP_D: /* clear the alarms */ nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 4, 0x0008); nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 4, 0xc001); @@ -2461,18 +2483,19 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number) nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 1, 0x9004); nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 1, 0x9005); /* check link status */ - nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 1, 0x9003); + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 1, 1); temp_phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); + u32temp = 100; + do { + nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 1, 1); - nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 3, 0x0021); - nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - nes_read_10G_phy_reg(nesdev, nesadapter->phy_index[mac_index], 3, 0x0021); - phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); - - phy_data = (!temp_phy_data && (phy_data == 0x8000)) ? 0x4 : 0x0; - + phy_data = (u16)nes_read_indexed(nesdev, NES_IDX_MAC_MDIO_CONTROL); + if ((phy_data == temp_phy_data) || (!(--u32temp))) + break; + temp_phy_data = phy_data; + } while (1); nes_debug(NES_DBG_PHY, "%s: Phy data = 0x%04X, link was %s.\n", - __func__, phy_data, nesadapter->mac_link_down[mac_index] ? "DOWN" : "UP"); + __func__, phy_data, nesadapter->mac_link_down ? "DOWN" : "UP"); break; case NES_PHY_TYPE_PUMA_1G: @@ -2488,17 +2511,6 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number) } if (phy_data & 0x0004) { - if (wide_ppm_offset && - (nesadapter->phy_type[mac_index] == NES_PHY_TYPE_CX4) && - (nesadapter->hw_rev != NE020_REV)) { - cdr_ctrl = nes_read_indexed(nesdev, - NES_IDX_ETH_SERDES_CDR_CONTROL0 + - mac_index * 0x200); - nes_write_indexed(nesdev, - NES_IDX_ETH_SERDES_CDR_CONTROL0 + - mac_index * 0x200, - cdr_ctrl | 0x000F0000); - } nesadapter->mac_link_down[mac_index] = 0; list_for_each_entry(nesvnic, &nesadapter->nesvnic_list[mac_index], list) { nes_debug(NES_DBG_PHY, "The Link is UP!!. linkup was %d\n", @@ -2513,17 +2525,6 @@ static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number) } } } else { - if (wide_ppm_offset && - (nesadapter->phy_type[mac_index] == NES_PHY_TYPE_CX4) && - (nesadapter->hw_rev != NE020_REV)) { - cdr_ctrl = nes_read_indexed(nesdev, - NES_IDX_ETH_SERDES_CDR_CONTROL0 + - mac_index * 0x200); - nes_write_indexed(nesdev, - NES_IDX_ETH_SERDES_CDR_CONTROL0 + - mac_index * 0x200, - cdr_ctrl & 0xFFF0FFFF); - } nesadapter->mac_link_down[mac_index] = 1; list_for_each_entry(nesvnic, &nesadapter->nesvnic_list[mac_index], list) { nes_debug(NES_DBG_PHY, "The Link is Down!!. linkup was %d\n", diff --git a/trunk/drivers/infiniband/hw/nes/nes_hw.h b/trunk/drivers/infiniband/hw/nes/nes_hw.h index c3654c6383fe..f41a8710d2a8 100644 --- a/trunk/drivers/infiniband/hw/nes/nes_hw.h +++ b/trunk/drivers/infiniband/hw/nes/nes_hw.h @@ -35,14 +35,12 @@ #include -#define NES_PHY_TYPE_CX4 1 #define NES_PHY_TYPE_1G 2 #define NES_PHY_TYPE_IRIS 3 #define NES_PHY_TYPE_ARGUS 4 #define NES_PHY_TYPE_PUMA_1G 5 #define NES_PHY_TYPE_PUMA_10G 6 #define NES_PHY_TYPE_GLADIUS 7 -#define NES_PHY_TYPE_SFP_D 8 #define NES_MULTICAST_PF_MAX 8 diff --git a/trunk/drivers/infiniband/hw/nes/nes_nic.c b/trunk/drivers/infiniband/hw/nes/nes_nic.c index c6e6611d3016..ecb1f6fd6276 100644 --- a/trunk/drivers/infiniband/hw/nes/nes_nic.c +++ b/trunk/drivers/infiniband/hw/nes/nes_nic.c @@ -1426,55 +1426,49 @@ static int nes_netdev_get_settings(struct net_device *netdev, struct ethtool_cmd struct nes_vnic *nesvnic = netdev_priv(netdev); struct nes_device *nesdev = nesvnic->nesdev; struct nes_adapter *nesadapter = nesdev->nesadapter; - u32 mac_index = nesdev->mac_index; - u8 phy_type = nesadapter->phy_type[mac_index]; - u8 phy_index = nesadapter->phy_index[mac_index]; u16 phy_data; et_cmd->duplex = DUPLEX_FULL; et_cmd->port = PORT_MII; - et_cmd->maxtxpkt = 511; - et_cmd->maxrxpkt = 511; if (nesadapter->OneG_Mode) { et_cmd->speed = SPEED_1000; - if (phy_type == NES_PHY_TYPE_PUMA_1G) { + if (nesadapter->phy_type[nesdev->mac_index] == NES_PHY_TYPE_PUMA_1G) { et_cmd->supported = SUPPORTED_1000baseT_Full; et_cmd->advertising = ADVERTISED_1000baseT_Full; et_cmd->autoneg = AUTONEG_DISABLE; et_cmd->transceiver = XCVR_INTERNAL; - et_cmd->phy_address = mac_index; + et_cmd->phy_address = nesdev->mac_index; } else { - et_cmd->supported = SUPPORTED_1000baseT_Full - | SUPPORTED_Autoneg; - et_cmd->advertising = ADVERTISED_1000baseT_Full - | ADVERTISED_Autoneg; - nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); + et_cmd->supported = SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg; + et_cmd->advertising = ADVERTISED_1000baseT_Full | ADVERTISED_Autoneg; + nes_read_1G_phy_reg(nesdev, 0, nesadapter->phy_index[nesdev->mac_index], &phy_data); if (phy_data & 0x1000) et_cmd->autoneg = AUTONEG_ENABLE; else et_cmd->autoneg = AUTONEG_DISABLE; et_cmd->transceiver = XCVR_EXTERNAL; - et_cmd->phy_address = phy_index; + et_cmd->phy_address = nesadapter->phy_index[nesdev->mac_index]; } - return 0; - } - if ((phy_type == NES_PHY_TYPE_IRIS) || - (phy_type == NES_PHY_TYPE_ARGUS) || - (phy_type == NES_PHY_TYPE_SFP_D)) { - et_cmd->transceiver = XCVR_EXTERNAL; - et_cmd->port = PORT_FIBRE; - et_cmd->supported = SUPPORTED_FIBRE; - et_cmd->advertising = ADVERTISED_FIBRE; - et_cmd->phy_address = phy_index; } else { - et_cmd->transceiver = XCVR_INTERNAL; - et_cmd->supported = SUPPORTED_10000baseT_Full; - et_cmd->advertising = ADVERTISED_10000baseT_Full; - et_cmd->phy_address = mac_index; + if ((nesadapter->phy_type[nesdev->mac_index] == NES_PHY_TYPE_IRIS) || + (nesadapter->phy_type[nesdev->mac_index] == NES_PHY_TYPE_ARGUS)) { + et_cmd->transceiver = XCVR_EXTERNAL; + et_cmd->port = PORT_FIBRE; + et_cmd->supported = SUPPORTED_FIBRE; + et_cmd->advertising = ADVERTISED_FIBRE; + et_cmd->phy_address = nesadapter->phy_index[nesdev->mac_index]; + } else { + et_cmd->transceiver = XCVR_INTERNAL; + et_cmd->supported = SUPPORTED_10000baseT_Full; + et_cmd->advertising = ADVERTISED_10000baseT_Full; + et_cmd->phy_address = nesdev->mac_index; + } + et_cmd->speed = SPEED_10000; + et_cmd->autoneg = AUTONEG_DISABLE; } - et_cmd->speed = SPEED_10000; - et_cmd->autoneg = AUTONEG_DISABLE; + et_cmd->maxtxpkt = 511; + et_cmd->maxrxpkt = 511; return 0; } diff --git a/trunk/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/trunk/drivers/infiniband/ulp/ipoib/ipoib_vlan.c index 4c57f329dd50..5a76a5510350 100644 --- a/trunk/drivers/infiniband/ulp/ipoib/ipoib_vlan.c +++ b/trunk/drivers/infiniband/ulp/ipoib/ipoib_vlan.c @@ -70,14 +70,12 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey) */ if (ppriv->pkey == pkey) { result = -ENOTUNIQ; - priv = NULL; goto err; } list_for_each_entry(priv, &ppriv->child_intfs, list) { if (priv->pkey == pkey) { result = -ENOTUNIQ; - priv = NULL; goto err; } } @@ -98,7 +96,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey) result = ipoib_set_dev_features(priv, ppriv->ca); if (result) - goto err; + goto device_init_failed; priv->pkey = pkey; @@ -111,7 +109,7 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey) ipoib_warn(ppriv, "failed to initialize subinterface: " "device %s, port %d", ppriv->ca->name, ppriv->port); - goto err; + goto device_init_failed; } result = register_netdevice(priv->dev); @@ -148,19 +146,19 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey) register_failed: ipoib_dev_cleanup(priv->dev); +device_init_failed: + free_netdev(priv->dev); + err: mutex_unlock(&ppriv->vlan_mutex); rtnl_unlock(); - if (priv) - free_netdev(priv->dev); - return result; } int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey) { struct ipoib_dev_priv *ppriv, *priv, *tpriv; - struct net_device *dev = NULL; + int ret = -ENOENT; if (!capable(CAP_NET_ADMIN)) return -EPERM; @@ -174,17 +172,14 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey) unregister_netdevice(priv->dev); ipoib_dev_cleanup(priv->dev); list_del(&priv->list); - dev = priv->dev; + free_netdev(priv->dev); + + ret = 0; break; } } mutex_unlock(&ppriv->vlan_mutex); rtnl_unlock(); - if (dev) { - free_netdev(dev); - return 0; - } - - return -ENODEV; + return ret; } diff --git a/trunk/drivers/input/input.c b/trunk/drivers/input/input.c index d44065d2e662..ec3db3ade118 100644 --- a/trunk/drivers/input/input.c +++ b/trunk/drivers/input/input.c @@ -132,11 +132,6 @@ static void input_start_autorepeat(struct input_dev *dev, int code) } } -static void input_stop_autorepeat(struct input_dev *dev) -{ - del_timer(&dev->timer); -} - #define INPUT_IGNORE_EVENT 0 #define INPUT_PASS_TO_HANDLERS 1 #define INPUT_PASS_TO_DEVICE 2 @@ -172,8 +167,6 @@ static void input_handle_event(struct input_dev *dev, __change_bit(code, dev->key); if (value) input_start_autorepeat(dev, code); - else - input_stop_autorepeat(dev); } disposition = INPUT_PASS_TO_HANDLERS; @@ -744,11 +737,11 @@ static inline void input_wakeup_procfs_readers(void) static unsigned int input_proc_devices_poll(struct file *file, poll_table *wait) { + int state = input_devices_state; + poll_wait(file, &input_devices_poll_wait, wait); - if (file->f_version != input_devices_state) { - file->f_version = input_devices_state; + if (state != input_devices_state) return POLLIN | POLLRDNORM; - } return 0; } diff --git a/trunk/drivers/input/keyboard/atkbd.c b/trunk/drivers/input/keyboard/atkbd.c index f999dc60c3b8..45470f18d7e9 100644 --- a/trunk/drivers/input/keyboard/atkbd.c +++ b/trunk/drivers/input/keyboard/atkbd.c @@ -229,8 +229,7 @@ struct atkbd { /* * System-specific ketymap fixup routine */ -static void (*atkbd_platform_fixup)(struct atkbd *, const void *data); -static void *atkbd_platform_fixup_data; +static void (*atkbd_platform_fixup)(struct atkbd *); static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf, ssize_t (*handler)(struct atkbd *, char *)); @@ -835,64 +834,87 @@ static void atkbd_disconnect(struct serio *serio) } /* - * generate release events for the keycodes given in data + * Most special keys (Fn+F?) on Dell laptops do not generate release + * events so we have to do it ourselves. */ -static void atkbd_apply_forced_release_keylist(struct atkbd* atkbd, - const void *data) +static void atkbd_dell_laptop_keymap_fixup(struct atkbd *atkbd) { - const unsigned int *keys = data; - unsigned int i; + static const unsigned int forced_release_keys[] = { + 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, + }; + int i; if (atkbd->set == 2) - for (i = 0; keys[i] != -1U; i++) - __set_bit(keys[i], atkbd->force_release_mask); + for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) + __set_bit(forced_release_keys[i], + atkbd->force_release_mask); } -/* - * Most special keys (Fn+F?) on Dell laptops do not generate release - * events so we have to do it ourselves. - */ -static unsigned int atkbd_dell_laptop_forced_release_keys[] = { - 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8f, 0x93, -1U -}; - /* * Perform fixup for HP system that doesn't generate release * for its video switch */ -static unsigned int atkbd_hp_forced_release_keys[] = { - 0x94, -1U -}; +static void atkbd_hp_keymap_fixup(struct atkbd *atkbd) +{ + static const unsigned int forced_release_keys[] = { + 0x94, + }; + int i; + + if (atkbd->set == 2) + for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) + __set_bit(forced_release_keys[i], + atkbd->force_release_mask); +} /* * Inventec system with broken key release on volume keys */ -static unsigned int atkbd_inventec_forced_release_keys[] = { - 0xae, 0xb0, -1U -}; +static void atkbd_inventec_keymap_fixup(struct atkbd *atkbd) +{ + const unsigned int forced_release_keys[] = { + 0xae, 0xb0, + }; + int i; + + if (atkbd->set == 2) + for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) + __set_bit(forced_release_keys[i], + atkbd->force_release_mask); +} /* * Perform fixup for HP Pavilion ZV6100 laptop that doesn't generate release * for its volume buttons */ -static unsigned int atkbd_hp_zv6100_forced_release_keys[] = { - 0xae, 0xb0, -1U -}; +static void atkbd_hp_zv6100_keymap_fixup(struct atkbd *atkbd) +{ + const unsigned int forced_release_keys[] = { + 0xae, 0xb0, + }; + int i; + + if (atkbd->set == 2) + for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) + __set_bit(forced_release_keys[i], + atkbd->force_release_mask); +} /* * Samsung NC10 with Fn+F? key release not working */ -static unsigned int atkbd_samsung_forced_release_keys[] = { - 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, -1U -}; +static void atkbd_samsung_keymap_fixup(struct atkbd *atkbd) +{ + const unsigned int forced_release_keys[] = { + 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, + }; + int i; -/* - * The volume up and volume down special keys on a Fujitsu Amilo PA 1510 laptop - * do not generate release events so we have to do it ourselves. - */ -static unsigned int atkbd_amilo_pa1510_forced_release_keys[] = { - 0xb0, 0xae, -1U -}; + if (atkbd->set == 2) + for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) + __set_bit(forced_release_keys[i], + atkbd->force_release_mask); +} /* * atkbd_set_keycode_table() initializes keyboard's keycode table @@ -945,7 +967,7 @@ static void atkbd_set_keycode_table(struct atkbd *atkbd) * Perform additional fixups */ if (atkbd_platform_fixup) - atkbd_platform_fixup(atkbd, atkbd_platform_fixup_data); + atkbd_platform_fixup(atkbd); } /* @@ -1470,11 +1492,9 @@ static ssize_t atkbd_show_err_count(struct atkbd *atkbd, char *buf) return sprintf(buf, "%lu\n", atkbd->err_count); } -static int __init atkbd_setup_forced_release(const struct dmi_system_id *id) +static int __init atkbd_setup_fixup(const struct dmi_system_id *id) { - atkbd_platform_fixup = atkbd_apply_forced_release_keylist; - atkbd_platform_fixup_data = id->driver_data; - + atkbd_platform_fixup = id->driver_data; return 0; } @@ -1485,8 +1505,8 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_dell_laptop_forced_release_keys, + .callback = atkbd_setup_fixup, + .driver_data = atkbd_dell_laptop_keymap_fixup, }, { .ident = "Dell Laptop", @@ -1494,8 +1514,8 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_dell_laptop_forced_release_keys, + .callback = atkbd_setup_fixup, + .driver_data = atkbd_dell_laptop_keymap_fixup, }, { .ident = "HP 2133", @@ -1503,8 +1523,8 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_PRODUCT_NAME, "HP 2133"), }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_hp_forced_release_keys, + .callback = atkbd_setup_fixup, + .driver_data = atkbd_hp_keymap_fixup, }, { .ident = "HP Pavilion ZV6100", @@ -1512,8 +1532,8 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ZV6100"), }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_hp_zv6100_forced_release_keys, + .callback = atkbd_setup_fixup, + .driver_data = atkbd_hp_zv6100_keymap_fixup, }, { .ident = "Inventec Symphony", @@ -1521,8 +1541,8 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"), DMI_MATCH(DMI_PRODUCT_NAME, "SYMPHONY 6.0/7.0"), }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_inventec_forced_release_keys, + .callback = atkbd_setup_fixup, + .driver_data = atkbd_inventec_keymap_fixup, }, { .ident = "Samsung NC10", @@ -1530,17 +1550,8 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), DMI_MATCH(DMI_PRODUCT_NAME, "NC10"), }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_samsung_forced_release_keys, - }, - { - .ident = "Fujitsu Amilo PA 1510", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), - DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 1510"), - }, - .callback = atkbd_setup_forced_release, - .driver_data = atkbd_amilo_pa1510_forced_release_keys, + .callback = atkbd_setup_fixup, + .driver_data = atkbd_samsung_keymap_fixup, }, { } }; diff --git a/trunk/drivers/input/keyboard/bf54x-keys.c b/trunk/drivers/input/keyboard/bf54x-keys.c index e94b7d735aca..ee855c5202e8 100644 --- a/trunk/drivers/input/keyboard/bf54x-keys.c +++ b/trunk/drivers/input/keyboard/bf54x-keys.c @@ -211,8 +211,8 @@ static int __devinit bfin_kpad_probe(struct platform_device *pdev) if (!pdata->debounce_time || pdata->debounce_time > MAX_MULT || !pdata->coldrive_time || pdata->coldrive_time > MAX_MULT) { - printk(KERN_WARNING DRV_NAME - ": Invalid Debounce/Columndrive Time in platform data\n"); + printk(KERN_ERR DRV_NAME + ": Invalid Debounce/Columdrive Time from pdata\n"); bfin_write_KPAD_MSEL(0xFF0); /* Default MSEL */ } else { bfin_write_KPAD_MSEL( diff --git a/trunk/drivers/input/keyboard/hilkbd.c b/trunk/drivers/input/keyboard/hilkbd.c index e9d639ec283d..aacf71f3cd44 100644 --- a/trunk/drivers/input/keyboard/hilkbd.c +++ b/trunk/drivers/input/keyboard/hilkbd.c @@ -198,28 +198,45 @@ static void hil_do(unsigned char cmd, unsigned char *data, unsigned int len) } -/* initialize HIL */ -static int __devinit hil_keyb_init(void) +/* initialise HIL */ +static int __init +hil_keyb_init(void) { unsigned char c; unsigned int i, kbid; wait_queue_head_t hil_wait; int err; - if (hil_dev.dev) + if (hil_dev.dev) { return -ENODEV; /* already initialized */ + } - init_waitqueue_head(&hil_wait); spin_lock_init(&hil_dev.lock); - hil_dev.dev = input_allocate_device(); if (!hil_dev.dev) return -ENOMEM; +#if defined(CONFIG_HP300) + if (!MACH_IS_HP300) { + err = -ENODEV; + goto err1; + } + if (!hwreg_present((void *)(HILBASE + HIL_DATA))) { + printk(KERN_ERR "HIL: hardware register was not found\n"); + err = -ENODEV; + goto err1; + } + if (!request_region(HILBASE + HIL_DATA, 2, "hil")) { + printk(KERN_ERR "HIL: IOPORT region already used\n"); + err = -EIO; + goto err1; + } +#endif + err = request_irq(HIL_IRQ, hil_interrupt, 0, "hil", hil_dev.dev_id); if (err) { printk(KERN_ERR "HIL: Can't get IRQ\n"); - goto err1; + goto err2; } /* Turn on interrupts */ @@ -229,9 +246,11 @@ static int __devinit hil_keyb_init(void) hil_dev.valid = 0; /* clear any pending data */ hil_do(HIL_READKBDSADR, NULL, 0); - wait_event_interruptible_timeout(hil_wait, hil_dev.valid, 3 * HZ); - if (!hil_dev.valid) + init_waitqueue_head(&hil_wait); + wait_event_interruptible_timeout(hil_wait, hil_dev.valid, 3*HZ); + if (!hil_dev.valid) { printk(KERN_WARNING "HIL: timed out, assuming no keyboard present\n"); + } c = hil_dev.c; hil_dev.valid = 0; @@ -249,7 +268,7 @@ static int __devinit hil_keyb_init(void) for (i = 0; i < HIL_KEYCODES_SET1_TBLSIZE; i++) if (hphilkeyb_keycode[i] != KEY_RESERVED) - __set_bit(hphilkeyb_keycode[i], hil_dev.dev->keybit); + set_bit(hphilkeyb_keycode[i], hil_dev.dev->keybit); hil_dev.dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); hil_dev.dev->ledbit[0] = BIT_MASK(LED_NUML) | BIT_MASK(LED_CAPSL) | @@ -268,45 +287,34 @@ static int __devinit hil_keyb_init(void) err = input_register_device(hil_dev.dev); if (err) { printk(KERN_ERR "HIL: Can't register device\n"); - goto err2; + goto err3; } - printk(KERN_INFO "input: %s, ID %d at 0x%08lx (irq %d) found and attached\n", hil_dev.dev->name, kbid, HILBASE, HIL_IRQ); return 0; -err2: +err3: hil_do(HIL_INTOFF, NULL, 0); + disable_irq(HIL_IRQ); free_irq(HIL_IRQ, hil_dev.dev_id); +err2: +#if defined(CONFIG_HP300) + release_region(HILBASE + HIL_DATA, 2); err1: +#endif input_free_device(hil_dev.dev); hil_dev.dev = NULL; return err; } -static void __devexit hil_keyb_exit(void) -{ - if (HIL_IRQ) - free_irq(HIL_IRQ, hil_dev.dev_id); - - /* Turn off interrupts */ - hil_do(HIL_INTOFF, NULL, 0); - - input_unregister_device(hil_dev.dev); - hil_dev.dev = NULL; -} #if defined(CONFIG_PARISC) -static int __devinit hil_probe_chip(struct parisc_device *dev) +static int __init +hil_init_chip(struct parisc_device *dev) { - /* Only allow one HIL keyboard */ - if (hil_dev.dev) - return -ENODEV; - if (!dev->irq) { - printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%p\n", - (void *)dev->hpa.start); + printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa.start); return -ENODEV; } @@ -319,79 +327,51 @@ static int __devinit hil_probe_chip(struct parisc_device *dev) return hil_keyb_init(); } -static int __devexit hil_remove_chip(struct parisc_device *dev) -{ - hil_keyb_exit(); - - return 0; -} - static struct parisc_device_id hil_tbl[] = { { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00073 }, { 0, } }; -#if 0 -/* Disabled to avoid conflicts with the HP SDC HIL drivers */ MODULE_DEVICE_TABLE(parisc, hil_tbl); -#endif static struct parisc_driver hil_driver = { - .name = "hil", - .id_table = hil_tbl, - .probe = hil_probe_chip, - .remove = __devexit_p(hil_remove_chip), + .name = "hil", + .id_table = hil_tbl, + .probe = hil_init_chip, }; +#endif /* CONFIG_PARISC */ + static int __init hil_init(void) { +#if defined(CONFIG_PARISC) return register_parisc_driver(&hil_driver); +#else + return hil_keyb_init(); +#endif } -static void __exit hil_exit(void) -{ - unregister_parisc_driver(&hil_driver); -} - -#else /* !CONFIG_PARISC */ -static int __init hil_init(void) +static void __exit hil_exit(void) { - int error; - - /* Only allow one HIL keyboard */ - if (hil_dev.dev) - return -EBUSY; - - if (!MACH_IS_HP300) - return -ENODEV; - - if (!hwreg_present((void *)(HILBASE + HIL_DATA))) { - printk(KERN_ERR "HIL: hardware register was not found\n"); - return -ENODEV; + if (HIL_IRQ) { + disable_irq(HIL_IRQ); + free_irq(HIL_IRQ, hil_dev.dev_id); } - if (!request_region(HILBASE + HIL_DATA, 2, "hil")) { - printk(KERN_ERR "HIL: IOPORT region already used\n"); - return -EIO; - } + /* Turn off interrupts */ + hil_do(HIL_INTOFF, NULL, 0); - error = hil_keyb_init(); - if (error) { - release_region(HILBASE + HIL_DATA, 2); - return error; - } + input_unregister_device(hil_dev.dev); - return 0; -} + hil_dev.dev = NULL; -static void __exit hil_exit(void) -{ - hil_keyb_exit(); - release_region(HILBASE + HIL_DATA, 2); +#if defined(CONFIG_PARISC) + unregister_parisc_driver(&hil_driver); +#else + release_region(HILBASE+HIL_DATA, 2); +#endif } -#endif /* CONFIG_PARISC */ - module_init(hil_init); module_exit(hil_exit); diff --git a/trunk/drivers/input/misc/Kconfig b/trunk/drivers/input/misc/Kconfig index 203abac1e23e..67e5553f699a 100644 --- a/trunk/drivers/input/misc/Kconfig +++ b/trunk/drivers/input/misc/Kconfig @@ -227,27 +227,4 @@ config INPUT_PCF50633_PMU Say Y to include support for delivering PMU events via input layer on NXP PCF50633. -config INPUT_GPIO_ROTARY_ENCODER - tristate "Rotary encoders connected to GPIO pins" - depends on GPIOLIB && GENERIC_GPIO - help - Say Y here to add support for rotary encoders connected to GPIO lines. - Check file:Documentation/incput/rotary_encoder.txt for more - information. - - To compile this driver as a module, choose M here: the - module will be called rotary_encoder. - -config INPUT_RB532_BUTTON - tristate "Mikrotik Routerboard 532 button interface" - depends on MIKROTIK_RB532 - depends on GPIOLIB && GENERIC_GPIO - select INPUT_POLLDEV - help - Say Y here if you want support for the S1 button built into - Mikrotik's Routerboard 532. - - To compile this driver as a module, choose M here: the - module will be called rb532_button. - endif diff --git a/trunk/drivers/input/misc/Makefile b/trunk/drivers/input/misc/Makefile index eb3f407baedf..bb62e6efacf3 100644 --- a/trunk/drivers/input/misc/Makefile +++ b/trunk/drivers/input/misc/Makefile @@ -4,23 +4,21 @@ # Each configuration option enables a list of files. -obj-$(CONFIG_INPUT_APANEL) += apanel.o +obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o +obj-$(CONFIG_INPUT_PCSPKR) += pcspkr.o +obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o +obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o +obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o +obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o +obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o obj-$(CONFIG_INPUT_ATI_REMOTE) += ati_remote.o obj-$(CONFIG_INPUT_ATI_REMOTE2) += ati_remote2.o -obj-$(CONFIG_INPUT_ATLAS_BTNS) += atlas_btns.o -obj-$(CONFIG_INPUT_CM109) += cm109.o -obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o -obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o -obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o -obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o -obj-$(CONFIG_INPUT_PCF50633_PMU) += pcf50633-input.o -obj-$(CONFIG_INPUT_PCSPKR) += pcspkr.o obj-$(CONFIG_INPUT_POWERMATE) += powermate.o -obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o -obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER) += rotary_encoder.o -obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o -obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o -obj-$(CONFIG_INPUT_UINPUT) += uinput.o -obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o obj-$(CONFIG_INPUT_YEALINK) += yealink.o +obj-$(CONFIG_INPUT_CM109) += cm109.o +obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o +obj-$(CONFIG_INPUT_UINPUT) += uinput.o +obj-$(CONFIG_INPUT_APANEL) += apanel.o +obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o +obj-$(CONFIG_INPUT_PCF50633_PMU) += pcf50633-input.o diff --git a/trunk/drivers/input/misc/ati_remote2.c b/trunk/drivers/input/misc/ati_remote2.c index 922c05141585..3c9988dc0e9f 100644 --- a/trunk/drivers/input/misc/ati_remote2.c +++ b/trunk/drivers/input/misc/ati_remote2.c @@ -31,73 +31,12 @@ MODULE_LICENSE("GPL"); * newly configured "channel". */ -enum { - ATI_REMOTE2_MAX_CHANNEL_MASK = 0xFFFF, - ATI_REMOTE2_MAX_MODE_MASK = 0x1F, -}; - -static int ati_remote2_set_mask(const char *val, - struct kernel_param *kp, unsigned int max) -{ - unsigned long mask; - int ret; - - if (!val) - return -EINVAL; - - ret = strict_strtoul(val, 0, &mask); - if (ret) - return ret; - - if (mask & ~max) - return -EINVAL; - - *(unsigned int *)kp->arg = mask; - - return 0; -} - -static int ati_remote2_set_channel_mask(const char *val, - struct kernel_param *kp) -{ - pr_debug("%s()\n", __func__); - - return ati_remote2_set_mask(val, kp, ATI_REMOTE2_MAX_CHANNEL_MASK); -} - -static int ati_remote2_get_channel_mask(char *buffer, struct kernel_param *kp) -{ - pr_debug("%s()\n", __func__); - - return sprintf(buffer, "0x%04x", *(unsigned int *)kp->arg); -} - -static int ati_remote2_set_mode_mask(const char *val, struct kernel_param *kp) -{ - pr_debug("%s()\n", __func__); - - return ati_remote2_set_mask(val, kp, ATI_REMOTE2_MAX_MODE_MASK); -} - -static int ati_remote2_get_mode_mask(char *buffer, struct kernel_param *kp) -{ - pr_debug("%s()\n", __func__); - - return sprintf(buffer, "0x%02x", *(unsigned int *)kp->arg); -} - -static unsigned int channel_mask = ATI_REMOTE2_MAX_CHANNEL_MASK; -#define param_check_channel_mask(name, p) __param_check(name, p, unsigned int) -#define param_set_channel_mask ati_remote2_set_channel_mask -#define param_get_channel_mask ati_remote2_get_channel_mask -module_param(channel_mask, channel_mask, 0644); +static unsigned int channel_mask = 0xFFFF; +module_param(channel_mask, uint, 0644); MODULE_PARM_DESC(channel_mask, "Bitmask of channels to accept <15:Channel16>...<1:Channel2><0:Channel1>"); -static unsigned int mode_mask = ATI_REMOTE2_MAX_MODE_MASK; -#define param_check_mode_mask(name, p) __param_check(name, p, unsigned int) -#define param_set_mode_mask ati_remote2_set_mode_mask -#define param_get_mode_mask ati_remote2_get_mode_mask -module_param(mode_mask, mode_mask, 0644); +static unsigned int mode_mask = 0x1F; +module_param(mode_mask, uint, 0644); MODULE_PARM_DESC(mode_mask, "Bitmask of modes to accept <4:PC><3:AUX4><2:AUX3><1:AUX2><0:AUX1>"); static struct usb_device_id ati_remote2_id_table[] = { @@ -194,18 +133,12 @@ struct ati_remote2 { u16 keycode[ATI_REMOTE2_MODES][ARRAY_SIZE(ati_remote2_key_table)]; unsigned int flags; - - unsigned int channel_mask; - unsigned int mode_mask; }; static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id); static void ati_remote2_disconnect(struct usb_interface *interface); static int ati_remote2_suspend(struct usb_interface *interface, pm_message_t message); static int ati_remote2_resume(struct usb_interface *interface); -static int ati_remote2_reset_resume(struct usb_interface *interface); -static int ati_remote2_pre_reset(struct usb_interface *interface); -static int ati_remote2_post_reset(struct usb_interface *interface); static struct usb_driver ati_remote2_driver = { .name = "ati_remote2", @@ -214,9 +147,6 @@ static struct usb_driver ati_remote2_driver = { .id_table = ati_remote2_id_table, .suspend = ati_remote2_suspend, .resume = ati_remote2_resume, - .reset_resume = ati_remote2_reset_resume, - .pre_reset = ati_remote2_pre_reset, - .post_reset = ati_remote2_post_reset, .supports_autosuspend = 1, }; @@ -308,7 +238,7 @@ static void ati_remote2_input_mouse(struct ati_remote2 *ar2) channel = data[0] >> 4; - if (!((1 << channel) & ar2->channel_mask)) + if (!((1 << channel) & channel_mask)) return; mode = data[0] & 0x0F; @@ -320,7 +250,7 @@ static void ati_remote2_input_mouse(struct ati_remote2 *ar2) return; } - if (!((1 << mode) & ar2->mode_mask)) + if (!((1 << mode) & mode_mask)) return; input_event(idev, EV_REL, REL_X, (s8) data[1]); @@ -347,7 +277,7 @@ static void ati_remote2_input_key(struct ati_remote2 *ar2) channel = data[0] >> 4; - if (!((1 << channel) & ar2->channel_mask)) + if (!((1 << channel) & channel_mask)) return; mode = data[0] & 0x0F; @@ -375,7 +305,7 @@ static void ati_remote2_input_key(struct ati_remote2 *ar2) ar2->mode = mode; } - if (!((1 << mode) & ar2->mode_mask)) + if (!((1 << mode) & mode_mask)) return; index = ati_remote2_lookup(hw_code); @@ -480,7 +410,7 @@ static int ati_remote2_getkeycode(struct input_dev *idev, int index, mode; mode = scancode >> 8; - if (mode > ATI_REMOTE2_PC || !((1 << mode) & ar2->mode_mask)) + if (mode > ATI_REMOTE2_PC || !((1 << mode) & mode_mask)) return -EINVAL; index = ati_remote2_lookup(scancode & 0xFF); @@ -497,7 +427,7 @@ static int ati_remote2_setkeycode(struct input_dev *idev, int scancode, int keyc int index, mode, old_keycode; mode = scancode >> 8; - if (mode > ATI_REMOTE2_PC || !((1 << mode) & ar2->mode_mask)) + if (mode > ATI_REMOTE2_PC || !((1 << mode) & mode_mask)) return -EINVAL; index = ati_remote2_lookup(scancode & 0xFF); @@ -620,7 +550,7 @@ static void ati_remote2_urb_cleanup(struct ati_remote2 *ar2) } } -static int ati_remote2_setup(struct ati_remote2 *ar2, unsigned int ch_mask) +static int ati_remote2_setup(struct ati_remote2 *ar2) { int r, i, channel; @@ -635,8 +565,8 @@ static int ati_remote2_setup(struct ati_remote2 *ar2, unsigned int ch_mask) channel = 0; for (i = 0; i < 16; i++) { - if ((1 << i) & ch_mask) { - if (!(~(1 << i) & ch_mask)) + if ((1 << i) & channel_mask) { + if (!(~(1 << i) & 0xFFFF & channel_mask)) channel = i + 1; break; } @@ -655,99 +585,6 @@ static int ati_remote2_setup(struct ati_remote2 *ar2, unsigned int ch_mask) return 0; } -static ssize_t ati_remote2_show_channel_mask(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct usb_device *udev = to_usb_device(dev); - struct usb_interface *intf = usb_ifnum_to_if(udev, 0); - struct ati_remote2 *ar2 = usb_get_intfdata(intf); - - return sprintf(buf, "0x%04x\n", ar2->channel_mask); -} - -static ssize_t ati_remote2_store_channel_mask(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct usb_device *udev = to_usb_device(dev); - struct usb_interface *intf = usb_ifnum_to_if(udev, 0); - struct ati_remote2 *ar2 = usb_get_intfdata(intf); - unsigned long mask; - int r; - - if (strict_strtoul(buf, 0, &mask)) - return -EINVAL; - - if (mask & ~ATI_REMOTE2_MAX_CHANNEL_MASK) - return -EINVAL; - - r = usb_autopm_get_interface(ar2->intf[0]); - if (r) { - dev_err(&ar2->intf[0]->dev, - "%s(): usb_autopm_get_interface() = %d\n", __func__, r); - return r; - } - - mutex_lock(&ati_remote2_mutex); - - if (mask != ar2->channel_mask && !ati_remote2_setup(ar2, mask)) - ar2->channel_mask = mask; - - mutex_unlock(&ati_remote2_mutex); - - usb_autopm_put_interface(ar2->intf[0]); - - return count; -} - -static ssize_t ati_remote2_show_mode_mask(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct usb_device *udev = to_usb_device(dev); - struct usb_interface *intf = usb_ifnum_to_if(udev, 0); - struct ati_remote2 *ar2 = usb_get_intfdata(intf); - - return sprintf(buf, "0x%02x\n", ar2->mode_mask); -} - -static ssize_t ati_remote2_store_mode_mask(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct usb_device *udev = to_usb_device(dev); - struct usb_interface *intf = usb_ifnum_to_if(udev, 0); - struct ati_remote2 *ar2 = usb_get_intfdata(intf); - unsigned long mask; - - if (strict_strtoul(buf, 0, &mask)) - return -EINVAL; - - if (mask & ~ATI_REMOTE2_MAX_MODE_MASK) - return -EINVAL; - - ar2->mode_mask = mask; - - return count; -} - -static DEVICE_ATTR(channel_mask, 0644, ati_remote2_show_channel_mask, - ati_remote2_store_channel_mask); - -static DEVICE_ATTR(mode_mask, 0644, ati_remote2_show_mode_mask, - ati_remote2_store_mode_mask); - -static struct attribute *ati_remote2_attrs[] = { - &dev_attr_channel_mask.attr, - &dev_attr_mode_mask.attr, - NULL, -}; - -static struct attribute_group ati_remote2_attr_group = { - .attrs = ati_remote2_attrs, -}; - static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id) { struct usb_device *udev = interface_to_usbdev(interface); @@ -778,10 +615,7 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d if (r) goto fail2; - ar2->channel_mask = channel_mask; - ar2->mode_mask = mode_mask; - - r = ati_remote2_setup(ar2, ar2->channel_mask); + r = ati_remote2_setup(ar2); if (r) goto fail2; @@ -790,13 +624,9 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d strlcat(ar2->name, "ATI Remote Wonder II", sizeof(ar2->name)); - r = sysfs_create_group(&udev->dev.kobj, &ati_remote2_attr_group); - if (r) - goto fail2; - r = ati_remote2_input_init(ar2); if (r) - goto fail3; + goto fail2; usb_set_intfdata(interface, ar2); @@ -804,10 +634,9 @@ static int ati_remote2_probe(struct usb_interface *interface, const struct usb_d return 0; - fail3: - sysfs_remove_group(&udev->dev.kobj, &ati_remote2_attr_group); fail2: ati_remote2_urb_cleanup(ar2); + usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); fail1: kfree(ar2); @@ -828,8 +657,6 @@ static void ati_remote2_disconnect(struct usb_interface *interface) input_unregister_device(ar2->idev); - sysfs_remove_group(&ar2->udev->dev.kobj, &ati_remote2_attr_group); - ati_remote2_urb_cleanup(ar2); usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); @@ -888,78 +715,6 @@ static int ati_remote2_resume(struct usb_interface *interface) return r; } -static int ati_remote2_reset_resume(struct usb_interface *interface) -{ - struct ati_remote2 *ar2; - struct usb_host_interface *alt = interface->cur_altsetting; - int r = 0; - - if (alt->desc.bInterfaceNumber) - return 0; - - ar2 = usb_get_intfdata(interface); - - dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); - - mutex_lock(&ati_remote2_mutex); - - r = ati_remote2_setup(ar2, ar2->channel_mask); - if (r) - goto out; - - if (ar2->flags & ATI_REMOTE2_OPENED) - r = ati_remote2_submit_urbs(ar2); - - if (!r) - ar2->flags &= ~ATI_REMOTE2_SUSPENDED; - - out: - mutex_unlock(&ati_remote2_mutex); - - return r; -} - -static int ati_remote2_pre_reset(struct usb_interface *interface) -{ - struct ati_remote2 *ar2; - struct usb_host_interface *alt = interface->cur_altsetting; - - if (alt->desc.bInterfaceNumber) - return 0; - - ar2 = usb_get_intfdata(interface); - - dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); - - mutex_lock(&ati_remote2_mutex); - - if (ar2->flags == ATI_REMOTE2_OPENED) - ati_remote2_kill_urbs(ar2); - - return 0; -} - -static int ati_remote2_post_reset(struct usb_interface *interface) -{ - struct ati_remote2 *ar2; - struct usb_host_interface *alt = interface->cur_altsetting; - int r = 0; - - if (alt->desc.bInterfaceNumber) - return 0; - - ar2 = usb_get_intfdata(interface); - - dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); - - if (ar2->flags == ATI_REMOTE2_OPENED) - r = ati_remote2_submit_urbs(ar2); - - mutex_unlock(&ati_remote2_mutex); - - return r; -} - static int __init ati_remote2_init(void) { int r; diff --git a/trunk/drivers/input/misc/rb532_button.c b/trunk/drivers/input/misc/rb532_button.c deleted file mode 100644 index e2c7f622a0b5..000000000000 --- a/trunk/drivers/input/misc/rb532_button.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Support for the S1 button on Routerboard 532 - * - * Copyright (C) 2009 Phil Sutter - */ - -#include -#include -#include - -#include -#include - -#define DRV_NAME "rb532-button" - -#define RB532_BTN_RATE 100 /* msec */ -#define RB532_BTN_KSYM BTN_0 - -/* The S1 button state is provided by GPIO pin 1. But as this - * pin is also used for uart input as alternate function, the - * operational modes must be switched first: - * 1) disable uart using set_latch_u5() - * 2) turn off alternate function implicitly through - * gpio_direction_input() - * 3) read the GPIO's current value - * 4) undo step 2 by enabling alternate function (in this - * mode the GPIO direction is fixed, so no change needed) - * 5) turn on uart again - * The GPIO value occurs to be inverted, so pin high means - * button is not pressed. - */ -static bool rb532_button_pressed(void) -{ - int val; - - set_latch_u5(0, LO_FOFF); - gpio_direction_input(GPIO_BTN_S1); - - val = gpio_get_value(GPIO_BTN_S1); - - rb532_gpio_set_func(GPIO_BTN_S1); - set_latch_u5(LO_FOFF, 0); - - return !val; -} - -static void rb532_button_poll(struct input_polled_dev *poll_dev) -{ - input_report_key(poll_dev->input, RB532_BTN_KSYM, - rb532_button_pressed()); - input_sync(poll_dev->input); -} - -static int __devinit rb532_button_probe(struct platform_device *pdev) -{ - struct input_polled_dev *poll_dev; - int error; - - poll_dev = input_allocate_polled_device(); - if (!poll_dev) - return -ENOMEM; - - poll_dev->poll = rb532_button_poll; - poll_dev->poll_interval = RB532_BTN_RATE; - - poll_dev->input->name = "rb532 button"; - poll_dev->input->phys = "rb532/button0"; - poll_dev->input->id.bustype = BUS_HOST; - poll_dev->input->dev.parent = &pdev->dev; - - dev_set_drvdata(&pdev->dev, poll_dev); - - input_set_capability(poll_dev->input, EV_KEY, RB532_BTN_KSYM); - - error = input_register_polled_device(poll_dev); - if (error) { - input_free_polled_device(poll_dev); - return error; - } - - return 0; -} - -static int __devexit rb532_button_remove(struct platform_device *pdev) -{ - struct input_polled_dev *poll_dev = dev_get_drvdata(&pdev->dev); - - input_unregister_polled_device(poll_dev); - input_free_polled_device(poll_dev); - dev_set_drvdata(&pdev->dev, NULL); - - return 0; -} - -static struct platform_driver rb532_button_driver = { - .probe = rb532_button_probe, - .remove = __devexit_p(rb532_button_remove), - .driver = { - .name = DRV_NAME, - .owner = THIS_MODULE, - }, -}; - -static int __init rb532_button_init(void) -{ - return platform_driver_register(&rb532_button_driver); -} - -static void __exit rb532_button_exit(void) -{ - platform_driver_unregister(&rb532_button_driver); -} - -module_init(rb532_button_init); -module_exit(rb532_button_exit); - -MODULE_AUTHOR("Phil Sutter "); -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("Support for S1 button on Routerboard 532"); -MODULE_ALIAS("platform:" DRV_NAME); diff --git a/trunk/drivers/input/misc/rotary_encoder.c b/trunk/drivers/input/misc/rotary_encoder.c deleted file mode 100644 index 5bb3ab51b8c6..000000000000 --- a/trunk/drivers/input/misc/rotary_encoder.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * rotary_encoder.c - * - * (c) 2009 Daniel Mack - * - * state machine code inspired by code from Tim Ruetz - * - * A generic driver for rotary encoders connected to GPIO lines. - * See file:Documentation/input/rotary_encoder.txt for more information - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DRV_NAME "rotary-encoder" - -struct rotary_encoder { - unsigned int irq_a; - unsigned int irq_b; - unsigned int pos; - unsigned int armed; - unsigned int dir; - struct input_dev *input; - struct rotary_encoder_platform_data *pdata; -}; - -static irqreturn_t rotary_encoder_irq(int irq, void *dev_id) -{ - struct rotary_encoder *encoder = dev_id; - struct rotary_encoder_platform_data *pdata = encoder->pdata; - int a = !!gpio_get_value(pdata->gpio_a); - int b = !!gpio_get_value(pdata->gpio_b); - int state; - - a ^= pdata->inverted_a; - b ^= pdata->inverted_b; - state = (a << 1) | b; - - switch (state) { - - case 0x0: - if (!encoder->armed) - break; - - if (encoder->dir) { - /* turning counter-clockwise */ - encoder->pos += pdata->steps; - encoder->pos--; - encoder->pos %= pdata->steps; - } else { - /* turning clockwise */ - encoder->pos++; - encoder->pos %= pdata->steps; - } - - input_report_abs(encoder->input, pdata->axis, encoder->pos); - input_sync(encoder->input); - - encoder->armed = 0; - break; - - case 0x1: - case 0x2: - if (encoder->armed) - encoder->dir = state - 1; - break; - - case 0x3: - encoder->armed = 1; - break; - } - - return IRQ_HANDLED; -} - -static int __devinit rotary_encoder_probe(struct platform_device *pdev) -{ - struct rotary_encoder_platform_data *pdata = pdev->dev.platform_data; - struct rotary_encoder *encoder; - struct input_dev *input; - int err; - - if (!pdata || !pdata->steps) { - dev_err(&pdev->dev, "invalid platform data\n"); - return -ENOENT; - } - - encoder = kzalloc(sizeof(struct rotary_encoder), GFP_KERNEL); - input = input_allocate_device(); - if (!encoder || !input) { - dev_err(&pdev->dev, "failed to allocate memory for device\n"); - err = -ENOMEM; - goto exit_free_mem; - } - - encoder->input = input; - encoder->pdata = pdata; - encoder->irq_a = gpio_to_irq(pdata->gpio_a); - encoder->irq_b = gpio_to_irq(pdata->gpio_b); - - /* create and register the input driver */ - input->name = pdev->name; - input->id.bustype = BUS_HOST; - input->dev.parent = &pdev->dev; - input->evbit[0] = BIT_MASK(EV_ABS); - input_set_abs_params(encoder->input, - pdata->axis, 0, pdata->steps, 0, 1); - - err = input_register_device(input); - if (err) { - dev_err(&pdev->dev, "failed to register input device\n"); - goto exit_free_mem; - } - - /* request the GPIOs */ - err = gpio_request(pdata->gpio_a, DRV_NAME); - if (err) { - dev_err(&pdev->dev, "unable to request GPIO %d\n", - pdata->gpio_a); - goto exit_unregister_input; - } - - err = gpio_request(pdata->gpio_b, DRV_NAME); - if (err) { - dev_err(&pdev->dev, "unable to request GPIO %d\n", - pdata->gpio_b); - goto exit_free_gpio_a; - } - - /* request the IRQs */ - err = request_irq(encoder->irq_a, &rotary_encoder_irq, - IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE, - DRV_NAME, encoder); - if (err) { - dev_err(&pdev->dev, "unable to request IRQ %d\n", - encoder->irq_a); - goto exit_free_gpio_b; - } - - err = request_irq(encoder->irq_b, &rotary_encoder_irq, - IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE, - DRV_NAME, encoder); - if (err) { - dev_err(&pdev->dev, "unable to request IRQ %d\n", - encoder->irq_b); - goto exit_free_irq_a; - } - - platform_set_drvdata(pdev, encoder); - - return 0; - -exit_free_irq_a: - free_irq(encoder->irq_a, encoder); -exit_free_gpio_b: - gpio_free(pdata->gpio_b); -exit_free_gpio_a: - gpio_free(pdata->gpio_a); -exit_unregister_input: - input_unregister_device(input); - input = NULL; /* so we don't try to free it */ -exit_free_mem: - input_free_device(input); - kfree(encoder); - return err; -} - -static int __devexit rotary_encoder_remove(struct platform_device *pdev) -{ - struct rotary_encoder *encoder = platform_get_drvdata(pdev); - struct rotary_encoder_platform_data *pdata = pdev->dev.platform_data; - - free_irq(encoder->irq_a, encoder); - free_irq(encoder->irq_b, encoder); - gpio_free(pdata->gpio_a); - gpio_free(pdata->gpio_b); - input_unregister_device(encoder->input); - platform_set_drvdata(pdev, NULL); - kfree(encoder); - - return 0; -} - -static struct platform_driver rotary_encoder_driver = { - .probe = rotary_encoder_probe, - .remove = __devexit_p(rotary_encoder_remove), - .driver = { - .name = DRV_NAME, - .owner = THIS_MODULE, - } -}; - -static int __init rotary_encoder_init(void) -{ - return platform_driver_register(&rotary_encoder_driver); -} - -static void __exit rotary_encoder_exit(void) -{ - platform_driver_unregister(&rotary_encoder_driver); -} - -module_init(rotary_encoder_init); -module_exit(rotary_encoder_exit); - -MODULE_ALIAS("platform:" DRV_NAME); -MODULE_DESCRIPTION("GPIO rotary encoder driver"); -MODULE_AUTHOR("Daniel Mack "); -MODULE_LICENSE("GPL v2"); - diff --git a/trunk/drivers/input/mouse/Kconfig b/trunk/drivers/input/mouse/Kconfig index c66cc3d08c2f..4f38e6f7dfdd 100644 --- a/trunk/drivers/input/mouse/Kconfig +++ b/trunk/drivers/input/mouse/Kconfig @@ -292,15 +292,4 @@ config MOUSE_PXA930_TRKBALL help Say Y here to support PXA930 Trackball mouse. -config MOUSE_MAPLE - tristate "Maple mouse (for the Dreamcast)" - depends on MAPLE - help - This driver supports the Maple mouse on the SEGA Dreamcast. - - Most Dreamcast users, who have a mouse, will say Y here. - - To compile this driver as a module choose M here: the module will be - called maplemouse. - endif diff --git a/trunk/drivers/input/mouse/Makefile b/trunk/drivers/input/mouse/Makefile index 472189468d67..8c8a1f236e28 100644 --- a/trunk/drivers/input/mouse/Makefile +++ b/trunk/drivers/input/mouse/Makefile @@ -6,19 +6,18 @@ obj-$(CONFIG_MOUSE_AMIGA) += amimouse.o obj-$(CONFIG_MOUSE_APPLETOUCH) += appletouch.o -obj-$(CONFIG_MOUSE_ATARI) += atarimouse.o obj-$(CONFIG_MOUSE_BCM5974) += bcm5974.o -obj-$(CONFIG_MOUSE_GPIO) += gpio_mouse.o -obj-$(CONFIG_MOUSE_HIL) += hil_ptr.o +obj-$(CONFIG_MOUSE_ATARI) += atarimouse.o +obj-$(CONFIG_MOUSE_RISCPC) += rpcmouse.o obj-$(CONFIG_MOUSE_INPORT) += inport.o obj-$(CONFIG_MOUSE_LOGIBM) += logibm.o -obj-$(CONFIG_MOUSE_MAPLE) += maplemouse.o obj-$(CONFIG_MOUSE_PC110PAD) += pc110pad.o obj-$(CONFIG_MOUSE_PS2) += psmouse.o obj-$(CONFIG_MOUSE_PXA930_TRKBALL) += pxa930_trkball.o -obj-$(CONFIG_MOUSE_RISCPC) += rpcmouse.o obj-$(CONFIG_MOUSE_SERIAL) += sermouse.o +obj-$(CONFIG_MOUSE_HIL) += hil_ptr.o obj-$(CONFIG_MOUSE_VSXXXAA) += vsxxxaa.o +obj-$(CONFIG_MOUSE_GPIO) += gpio_mouse.o psmouse-objs := psmouse-base.o synaptics.o diff --git a/trunk/drivers/input/mouse/hgpk.c b/trunk/drivers/input/mouse/hgpk.c index a1ad2f1a7bb3..55cd0fa68339 100644 --- a/trunk/drivers/input/mouse/hgpk.c +++ b/trunk/drivers/input/mouse/hgpk.c @@ -472,7 +472,7 @@ static enum hgpk_model_t hgpk_get_model(struct psmouse *psmouse) return -EIO; } - hgpk_dbg(psmouse, "ID: %02x %02x %02x\n", param[0], param[1], param[2]); + hgpk_dbg(psmouse, "ID: %02x %02x %02x", param[0], param[1], param[2]); /* HGPK signature: 0x67, 0x00, 0x */ if (param[0] != 0x67 || param[1] != 0x00) diff --git a/trunk/drivers/input/mouse/maplemouse.c b/trunk/drivers/input/mouse/maplemouse.c deleted file mode 100644 index d196abfb68bc..000000000000 --- a/trunk/drivers/input/mouse/maplemouse.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - * SEGA Dreamcast mouse driver - * Based on drivers/usb/usbmouse.c - * - * Copyright Yaegashi Takeshi, 2001 - * Adrian McMenamin, 2008 - */ - -#include -#include -#include -#include -#include -#include -#include - -MODULE_AUTHOR("Adrian McMenamin "); -MODULE_DESCRIPTION("SEGA Dreamcast mouse driver"); -MODULE_LICENSE("GPL"); - -struct dc_mouse { - struct input_dev *dev; - struct maple_device *mdev; -}; - -static void dc_mouse_callback(struct mapleq *mq) -{ - int buttons, relx, rely, relz; - struct maple_device *mapledev = mq->dev; - struct dc_mouse *mse = maple_get_drvdata(mapledev); - struct input_dev *dev = mse->dev; - unsigned char *res = mq->recvbuf; - - buttons = ~res[8]; - relx = *(unsigned short *)(res + 12) - 512; - rely = *(unsigned short *)(res + 14) - 512; - relz = *(unsigned short *)(res + 16) - 512; - - input_report_key(dev, BTN_LEFT, buttons & 4); - input_report_key(dev, BTN_MIDDLE, buttons & 9); - input_report_key(dev, BTN_RIGHT, buttons & 2); - input_report_rel(dev, REL_X, relx); - input_report_rel(dev, REL_Y, rely); - input_report_rel(dev, REL_WHEEL, relz); - input_sync(dev); -} - -static int dc_mouse_open(struct input_dev *dev) -{ - struct dc_mouse *mse = dev->dev.platform_data; - - maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50, - MAPLE_FUNC_MOUSE); - - return 0; -} - -static void dc_mouse_close(struct input_dev *dev) -{ - struct dc_mouse *mse = dev->dev.platform_data; - - maple_getcond_callback(mse->mdev, dc_mouse_callback, 0, - MAPLE_FUNC_MOUSE); -} - - -static int __devinit probe_maple_mouse(struct device *dev) -{ - struct maple_device *mdev = to_maple_dev(dev); - struct maple_driver *mdrv = to_maple_driver(dev->driver); - struct input_dev *input_dev; - struct dc_mouse *mse; - int error; - - mse = kzalloc(sizeof(struct dc_mouse), GFP_KERNEL); - input_dev = input_allocate_device(); - - if (!mse || !input_dev) { - error = -ENOMEM; - goto fail; - } - - mse->dev = input_dev; - mse->mdev = mdev; - - input_set_drvdata(input_dev, mse); - input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); - input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | - BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); - input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | - BIT_MASK(REL_WHEEL); - input_dev->name = mdev->product_name; - input_dev->id.bustype = BUS_HOST; - input_dev->open = dc_mouse_open; - input_dev->close = dc_mouse_close; - - mdev->driver = mdrv; - maple_set_drvdata(mdev, mse); - - error = input_register_device(input_dev); - if (error) - goto fail; - - return 0; - -fail: - input_free_device(input_dev); - maple_set_drvdata(mdev, NULL); - kfree(mse); - mdev->driver = NULL; - return error; -} - -static int __devexit remove_maple_mouse(struct device *dev) -{ - struct maple_device *mdev = to_maple_dev(dev); - struct dc_mouse *mse = maple_get_drvdata(mdev); - - mdev->callback = NULL; - input_unregister_device(mse->dev); - maple_set_drvdata(mdev, NULL); - kfree(mse); - - return 0; -} - -static struct maple_driver dc_mouse_driver = { - .function = MAPLE_FUNC_MOUSE, - .drv = { - .name = "Dreamcast_mouse", - .probe = probe_maple_mouse, - .remove = __devexit_p(remove_maple_mouse), - }, -}; - -static int __init dc_mouse_init(void) -{ - return maple_driver_register(&dc_mouse_driver); -} - -static void __exit dc_mouse_exit(void) -{ - maple_driver_unregister(&dc_mouse_driver); -} - -module_init(dc_mouse_init); -module_exit(dc_mouse_exit); diff --git a/trunk/drivers/input/mouse/pc110pad.c b/trunk/drivers/input/mouse/pc110pad.c index f63995f854ff..fd09c8df81f2 100644 --- a/trunk/drivers/input/mouse/pc110pad.c +++ b/trunk/drivers/input/mouse/pc110pad.c @@ -111,8 +111,11 @@ static int __init pc110pad_init(void) struct pci_dev *dev; int err; - if (!no_pci_devices()) + dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); + if (dev) { + pci_dev_put(dev); return -ENODEV; + } if (!request_region(pc110pad_io, 4, "pc110pad")) { printk(KERN_ERR "pc110pad: I/O area %#x-%#x in use.\n", diff --git a/trunk/drivers/input/serio/i8042-x86ia64io.h b/trunk/drivers/input/serio/i8042-x86ia64io.h index 83ed2d56b924..6fa2deff7446 100644 --- a/trunk/drivers/input/serio/i8042-x86ia64io.h +++ b/trunk/drivers/input/serio/i8042-x86ia64io.h @@ -151,14 +151,6 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = { DMI_MATCH(DMI_PRODUCT_VERSION, "01"), }, }, - { - .ident = "HP DV9700", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"), - DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"), - }, - }, { } }; diff --git a/trunk/drivers/input/touchscreen/Kconfig b/trunk/drivers/input/touchscreen/Kconfig index b01fd61dadcc..bb6486a8c070 100644 --- a/trunk/drivers/input/touchscreen/Kconfig +++ b/trunk/drivers/input/touchscreen/Kconfig @@ -29,51 +29,6 @@ config TOUCHSCREEN_ADS7846 To compile this driver as a module, choose M here: the module will be called ads7846. -config TOUCHSCREEN_AD7877 - tristate "AD7877 based touchscreens" - depends on SPI_MASTER - help - Say Y here if you have a touchscreen interface using the - AD7877 controller, and your board-specific initialization - code includes that in its table of SPI devices. - - If unsure, say N (but it's safe to say "Y"). - - To compile this driver as a module, choose M here: the - module will be called ad7877. - -config TOUCHSCREEN_AD7879_I2C - tristate "AD7879 based touchscreens: AD7879-1 I2C Interface" - depends on I2C - select TOUCHSCREEN_AD7879 - help - Say Y here if you have a touchscreen interface using the - AD7879-1 controller, and your board-specific initialization - code includes that in its table of I2C devices. - - If unsure, say N (but it's safe to say "Y"). - - To compile this driver as a module, choose M here: the - module will be called ad7879. - -config TOUCHSCREEN_AD7879_SPI - tristate "AD7879 based touchscreens: AD7879 SPI Interface" - depends on SPI_MASTER && TOUCHSCREEN_AD7879_I2C = n - select TOUCHSCREEN_AD7879 - help - Say Y here if you have a touchscreen interface using the - AD7879 controller, and your board-specific initialization - code includes that in its table of SPI devices. - - If unsure, say N (but it's safe to say "Y"). - - To compile this driver as a module, choose M here: the - module will be called ad7879. - -config TOUCHSCREEN_AD7879 - tristate - default n - config TOUCHSCREEN_BITSY tristate "Compaq iPAQ H3600 (Bitsy) touchscreen" depends on SA1100_BITSY @@ -353,19 +308,6 @@ config TOUCHSCREEN_WM97XX_MAINSTONE To compile this driver as a module, choose M here: the module will be called mainstone-wm97xx. -config TOUCHSCREEN_WM97XX_ZYLONITE - tristate "Zylonite accelerated touch" - depends on TOUCHSCREEN_WM97XX && MACH_ZYLONITE - select TOUCHSCREEN_WM9713 - help - Say Y here for support for streaming mode with the touchscreen - on Zylonite systems. - - If unsure, say N. - - To compile this driver as a module, choose M here: the - module will be called zylonite-wm97xx. - config TOUCHSCREEN_USB_COMPOSITE tristate "USB Touchscreen Driver" depends on USB_ARCH_HAS_HCD diff --git a/trunk/drivers/input/touchscreen/Makefile b/trunk/drivers/input/touchscreen/Makefile index 6700f7b9d165..d3375aff46fe 100644 --- a/trunk/drivers/input/touchscreen/Makefile +++ b/trunk/drivers/input/touchscreen/Makefile @@ -6,8 +6,6 @@ wm97xx-ts-y := wm97xx-core.o -obj-$(CONFIG_TOUCHSCREEN_AD7877) += ad7877.o -obj-$(CONFIG_TOUCHSCREEN_AD7879) += ad7879.o obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o obj-$(CONFIG_TOUCHSCREEN_ATMEL_TSADCC) += atmel_tsadcc.o obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o @@ -36,4 +34,3 @@ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) += wm9705.o wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9712) += wm9712.o wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713) += wm9713.o obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE) += mainstone-wm97xx.o -obj-$(CONFIG_TOUCHSCREEN_WM97XX_ZYLONITE) += zylonite-wm97xx.o diff --git a/trunk/drivers/input/touchscreen/ad7877.c b/trunk/drivers/input/touchscreen/ad7877.c deleted file mode 100644 index e4728a28f492..000000000000 --- a/trunk/drivers/input/touchscreen/ad7877.c +++ /dev/null @@ -1,844 +0,0 @@ -/* - * Copyright (C) 2006-2008 Michael Hennerich, Analog Devices Inc. - * - * Description: AD7877 based touchscreen, sensor (ADCs), DAC and GPIO driver - * Based on: ads7846.c - * - * Bugs: Enter bugs at http://blackfin.uclinux.org/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see the file COPYING, or write - * to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * History: - * Copyright (c) 2005 David Brownell - * Copyright (c) 2006 Nokia Corporation - * Various changes: Imre Deak - * - * Using code from: - * - corgi_ts.c - * Copyright (C) 2004-2005 Richard Purdie - * - omap_ts.[hc], ads7846.h, ts_osk.c - * Copyright (C) 2002 MontaVista Software - * Copyright (C) 2004 Texas Instruments - * Copyright (C) 2005 Dirk Behme - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define TS_PEN_UP_TIMEOUT msecs_to_jiffies(50) - -#define MAX_SPI_FREQ_HZ 20000000 -#define MAX_12BIT ((1<<12)-1) - -#define AD7877_REG_ZEROS 0 -#define AD7877_REG_CTRL1 1 -#define AD7877_REG_CTRL2 2 -#define AD7877_REG_ALERT 3 -#define AD7877_REG_AUX1HIGH 4 -#define AD7877_REG_AUX1LOW 5 -#define AD7877_REG_BAT1HIGH 6 -#define AD7877_REG_BAT1LOW 7 -#define AD7877_REG_BAT2HIGH 8 -#define AD7877_REG_BAT2LOW 9 -#define AD7877_REG_TEMP1HIGH 10 -#define AD7877_REG_TEMP1LOW 11 -#define AD7877_REG_SEQ0 12 -#define AD7877_REG_SEQ1 13 -#define AD7877_REG_DAC 14 -#define AD7877_REG_NONE1 15 -#define AD7877_REG_EXTWRITE 15 -#define AD7877_REG_XPLUS 16 -#define AD7877_REG_YPLUS 17 -#define AD7877_REG_Z2 18 -#define AD7877_REG_aux1 19 -#define AD7877_REG_aux2 20 -#define AD7877_REG_aux3 21 -#define AD7877_REG_bat1 22 -#define AD7877_REG_bat2 23 -#define AD7877_REG_temp1 24 -#define AD7877_REG_temp2 25 -#define AD7877_REG_Z1 26 -#define AD7877_REG_GPIOCTRL1 27 -#define AD7877_REG_GPIOCTRL2 28 -#define AD7877_REG_GPIODATA 29 -#define AD7877_REG_NONE2 30 -#define AD7877_REG_NONE3 31 - -#define AD7877_SEQ_YPLUS_BIT (1<<11) -#define AD7877_SEQ_XPLUS_BIT (1<<10) -#define AD7877_SEQ_Z2_BIT (1<<9) -#define AD7877_SEQ_AUX1_BIT (1<<8) -#define AD7877_SEQ_AUX2_BIT (1<<7) -#define AD7877_SEQ_AUX3_BIT (1<<6) -#define AD7877_SEQ_BAT1_BIT (1<<5) -#define AD7877_SEQ_BAT2_BIT (1<<4) -#define AD7877_SEQ_TEMP1_BIT (1<<3) -#define AD7877_SEQ_TEMP2_BIT (1<<2) -#define AD7877_SEQ_Z1_BIT (1<<1) - -enum { - AD7877_SEQ_YPOS = 0, - AD7877_SEQ_XPOS = 1, - AD7877_SEQ_Z2 = 2, - AD7877_SEQ_AUX1 = 3, - AD7877_SEQ_AUX2 = 4, - AD7877_SEQ_AUX3 = 5, - AD7877_SEQ_BAT1 = 6, - AD7877_SEQ_BAT2 = 7, - AD7877_SEQ_TEMP1 = 8, - AD7877_SEQ_TEMP2 = 9, - AD7877_SEQ_Z1 = 10, - AD7877_NR_SENSE = 11, -}; - -/* DAC Register Default RANGE 0 to Vcc, Volatge Mode, DAC On */ -#define AD7877_DAC_CONF 0x1 - -/* If gpio3 is set AUX3/GPIO3 acts as GPIO Output */ -#define AD7877_EXTW_GPIO_3_CONF 0x1C4 -#define AD7877_EXTW_GPIO_DATA 0x200 - -/* Control REG 2 */ -#define AD7877_TMR(x) ((x & 0x3) << 0) -#define AD7877_REF(x) ((x & 0x1) << 2) -#define AD7877_POL(x) ((x & 0x1) << 3) -#define AD7877_FCD(x) ((x & 0x3) << 4) -#define AD7877_PM(x) ((x & 0x3) << 6) -#define AD7877_ACQ(x) ((x & 0x3) << 8) -#define AD7877_AVG(x) ((x & 0x3) << 10) - -/* Control REG 1 */ -#define AD7877_SER (1 << 11) /* non-differential */ -#define AD7877_DFR (0 << 11) /* differential */ - -#define AD7877_MODE_NOC (0) /* Do not convert */ -#define AD7877_MODE_SCC (1) /* Single channel conversion */ -#define AD7877_MODE_SEQ0 (2) /* Sequence 0 in Slave Mode */ -#define AD7877_MODE_SEQ1 (3) /* Sequence 1 in Master Mode */ - -#define AD7877_CHANADD(x) ((x&0xF)<<7) -#define AD7877_READADD(x) ((x)<<2) -#define AD7877_WRITEADD(x) ((x)<<12) - -#define AD7877_READ_CHAN(x) (AD7877_WRITEADD(AD7877_REG_CTRL1) | AD7877_SER | \ - AD7877_MODE_SCC | AD7877_CHANADD(AD7877_REG_ ## x) | \ - AD7877_READADD(AD7877_REG_ ## x)) - -#define AD7877_MM_SEQUENCE (AD7877_SEQ_YPLUS_BIT | AD7877_SEQ_XPLUS_BIT | \ - AD7877_SEQ_Z2_BIT | AD7877_SEQ_Z1_BIT) - -/* - * Non-touchscreen sensors only use single-ended conversions. - */ - -struct ser_req { - u16 reset; - u16 ref_on; - u16 command; - u16 sample; - struct spi_message msg; - struct spi_transfer xfer[6]; -}; - -struct ad7877 { - struct input_dev *input; - char phys[32]; - - struct spi_device *spi; - u16 model; - u16 vref_delay_usecs; - u16 x_plate_ohms; - u16 pressure_max; - - u16 cmd_crtl1; - u16 cmd_crtl2; - u16 cmd_dummy; - u16 dac; - - u8 stopacq_polarity; - u8 first_conversion_delay; - u8 acquisition_time; - u8 averaging; - u8 pen_down_acc_interval; - - u16 conversion_data[AD7877_NR_SENSE]; - - struct spi_transfer xfer[AD7877_NR_SENSE + 2]; - struct spi_message msg; - - struct mutex mutex; - unsigned disabled:1; /* P: mutex */ - unsigned gpio3:1; /* P: mutex */ - unsigned gpio4:1; /* P: mutex */ - - spinlock_t lock; - struct timer_list timer; /* P: lock */ - unsigned pending:1; /* P: lock */ -}; - -static int gpio3; -module_param(gpio3, int, 0); -MODULE_PARM_DESC(gpio3, "If gpio3 is set to 1 AUX3 acts as GPIO3"); - -/* - * ad7877_read/write are only used for initial setup and for sysfs controls. - * The main traffic is done using spi_async() in the interrupt handler. - */ - -static int ad7877_read(struct spi_device *spi, u16 reg) -{ - struct ser_req *req; - int status, ret; - - req = kzalloc(sizeof *req, GFP_KERNEL); - if (!req) - return -ENOMEM; - - spi_message_init(&req->msg); - - req->command = (u16) (AD7877_WRITEADD(AD7877_REG_CTRL1) | - AD7877_READADD(reg)); - req->xfer[0].tx_buf = &req->command; - req->xfer[0].len = 2; - - req->xfer[1].rx_buf = &req->sample; - req->xfer[1].len = 2; - - spi_message_add_tail(&req->xfer[0], &req->msg); - spi_message_add_tail(&req->xfer[1], &req->msg); - - status = spi_sync(spi, &req->msg); - ret = status ? : req->sample; - - kfree(req); - - return ret; -} - -static int ad7877_write(struct spi_device *spi, u16 reg, u16 val) -{ - struct ser_req *req; - int status; - - req = kzalloc(sizeof *req, GFP_KERNEL); - if (!req) - return -ENOMEM; - - spi_message_init(&req->msg); - - req->command = (u16) (AD7877_WRITEADD(reg) | (val & MAX_12BIT)); - req->xfer[0].tx_buf = &req->command; - req->xfer[0].len = 2; - - spi_message_add_tail(&req->xfer[0], &req->msg); - - status = spi_sync(spi, &req->msg); - - kfree(req); - - return status; -} - -static int ad7877_read_adc(struct spi_device *spi, unsigned command) -{ - struct ad7877 *ts = dev_get_drvdata(&spi->dev); - struct ser_req *req; - int status; - int sample; - int i; - - req = kzalloc(sizeof *req, GFP_KERNEL); - if (!req) - return -ENOMEM; - - spi_message_init(&req->msg); - - /* activate reference, so it has time to settle; */ - req->ref_on = AD7877_WRITEADD(AD7877_REG_CTRL2) | - AD7877_POL(ts->stopacq_polarity) | - AD7877_AVG(0) | AD7877_PM(2) | AD7877_TMR(0) | - AD7877_ACQ(ts->acquisition_time) | AD7877_FCD(0); - - req->reset = AD7877_WRITEADD(AD7877_REG_CTRL1) | AD7877_MODE_NOC; - - req->command = (u16) command; - - req->xfer[0].tx_buf = &req->reset; - req->xfer[0].len = 2; - - req->xfer[1].tx_buf = &req->ref_on; - req->xfer[1].len = 2; - req->xfer[1].delay_usecs = ts->vref_delay_usecs; - - req->xfer[2].tx_buf = &req->command; - req->xfer[2].len = 2; - req->xfer[2].delay_usecs = ts->vref_delay_usecs; - - req->xfer[3].rx_buf = &req->sample; - req->xfer[3].len = 2; - - req->xfer[4].tx_buf = &ts->cmd_crtl2; /*REF OFF*/ - req->xfer[4].len = 2; - - req->xfer[5].tx_buf = &ts->cmd_crtl1; /*DEFAULT*/ - req->xfer[5].len = 2; - - /* group all the transfers together, so we can't interfere with - * reading touchscreen state; disable penirq while sampling - */ - for (i = 0; i < 6; i++) - spi_message_add_tail(&req->xfer[i], &req->msg); - - status = spi_sync(spi, &req->msg); - sample = req->sample; - - kfree(req); - - return status ? : sample; -} - -static void ad7877_rx(struct ad7877 *ts) -{ - struct input_dev *input_dev = ts->input; - unsigned Rt; - u16 x, y, z1, z2; - - x = ts->conversion_data[AD7877_SEQ_XPOS] & MAX_12BIT; - y = ts->conversion_data[AD7877_SEQ_YPOS] & MAX_12BIT; - z1 = ts->conversion_data[AD7877_SEQ_Z1] & MAX_12BIT; - z2 = ts->conversion_data[AD7877_SEQ_Z2] & MAX_12BIT; - - /* - * The samples processed here are already preprocessed by the AD7877. - * The preprocessing function consists of an averaging filter. - * The combination of 'first conversion delay' and averaging provides a robust solution, - * discarding the spurious noise in the signal and keeping only the data of interest. - * The size of the averaging filter is programmable. (dev.platform_data, see linux/spi/ad7877.h) - * Other user-programmable conversion controls include variable acquisition time, - * and first conversion delay. Up to 16 averages can be taken per conversion. - */ - - if (likely(x && z1)) { - /* compute touch pressure resistance using equation #1 */ - Rt = (z2 - z1) * x * ts->x_plate_ohms; - Rt /= z1; - Rt = (Rt + 2047) >> 12; - - input_report_abs(input_dev, ABS_X, x); - input_report_abs(input_dev, ABS_Y, y); - input_report_abs(input_dev, ABS_PRESSURE, Rt); - input_sync(input_dev); - } -} - -static inline void ad7877_ts_event_release(struct ad7877 *ts) -{ - struct input_dev *input_dev = ts->input; - - input_report_abs(input_dev, ABS_PRESSURE, 0); - input_sync(input_dev); -} - -static void ad7877_timer(unsigned long handle) -{ - struct ad7877 *ts = (void *)handle; - - ad7877_ts_event_release(ts); -} - -static irqreturn_t ad7877_irq(int irq, void *handle) -{ - struct ad7877 *ts = handle; - unsigned long flags; - int status; - - /* - * The repeated conversion sequencer controlled by TMR kicked off - * too fast. We ignore the last and process the sample sequence - * currently in the queue. It can't be older than 9.4ms, and we - * need to avoid that ts->msg doesn't get issued twice while in work. - */ - - spin_lock_irqsave(&ts->lock, flags); - if (!ts->pending) { - ts->pending = 1; - - status = spi_async(ts->spi, &ts->msg); - if (status) - dev_err(&ts->spi->dev, "spi_sync --> %d\n", status); - } - spin_unlock_irqrestore(&ts->lock, flags); - - return IRQ_HANDLED; -} - -static void ad7877_callback(void *_ts) -{ - struct ad7877 *ts = _ts; - - spin_lock_irq(&ts->lock); - - ad7877_rx(ts); - ts->pending = 0; - mod_timer(&ts->timer, jiffies + TS_PEN_UP_TIMEOUT); - - spin_unlock_irq(&ts->lock); -} - -static void ad7877_disable(struct ad7877 *ts) -{ - mutex_lock(&ts->mutex); - - if (!ts->disabled) { - ts->disabled = 1; - disable_irq(ts->spi->irq); - - /* Wait for spi_async callback */ - while (ts->pending) - msleep(1); - - if (del_timer_sync(&ts->timer)) - ad7877_ts_event_release(ts); - } - - /* we know the chip's in lowpower mode since we always - * leave it that way after every request - */ - - mutex_unlock(&ts->mutex); -} - -static void ad7877_enable(struct ad7877 *ts) -{ - mutex_lock(&ts->mutex); - - if (ts->disabled) { - ts->disabled = 0; - enable_irq(ts->spi->irq); - } - - mutex_unlock(&ts->mutex); -} - -#define SHOW(name) static ssize_t \ -name ## _show(struct device *dev, struct device_attribute *attr, char *buf) \ -{ \ - struct ad7877 *ts = dev_get_drvdata(dev); \ - ssize_t v = ad7877_read_adc(ts->spi, \ - AD7877_READ_CHAN(name)); \ - if (v < 0) \ - return v; \ - return sprintf(buf, "%u\n", (unsigned) v); \ -} \ -static DEVICE_ATTR(name, S_IRUGO, name ## _show, NULL); - -SHOW(aux1) -SHOW(aux2) -SHOW(aux3) -SHOW(bat1) -SHOW(bat2) -SHOW(temp1) -SHOW(temp2) - -static ssize_t ad7877_disable_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - - return sprintf(buf, "%u\n", ts->disabled); -} - -static ssize_t ad7877_disable_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - unsigned long val; - int error; - - error = strict_strtoul(buf, 10, &val); - if (error) - return error; - - if (val) - ad7877_disable(ts); - else - ad7877_enable(ts); - - return count; -} - -static DEVICE_ATTR(disable, 0664, ad7877_disable_show, ad7877_disable_store); - -static ssize_t ad7877_dac_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - - return sprintf(buf, "%u\n", ts->dac); -} - -static ssize_t ad7877_dac_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - unsigned long val; - int error; - - error = strict_strtoul(buf, 10, &val); - if (error) - return error; - - mutex_lock(&ts->mutex); - ts->dac = val & 0xFF; - ad7877_write(ts->spi, AD7877_REG_DAC, (ts->dac << 4) | AD7877_DAC_CONF); - mutex_unlock(&ts->mutex); - - return count; -} - -static DEVICE_ATTR(dac, 0664, ad7877_dac_show, ad7877_dac_store); - -static ssize_t ad7877_gpio3_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - - return sprintf(buf, "%u\n", ts->gpio3); -} - -static ssize_t ad7877_gpio3_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - unsigned long val; - int error; - - error = strict_strtoul(buf, 10, &val); - if (error) - return error; - - mutex_lock(&ts->mutex); - ts->gpio3 = !!val; - ad7877_write(ts->spi, AD7877_REG_EXTWRITE, AD7877_EXTW_GPIO_DATA | - (ts->gpio4 << 4) | (ts->gpio3 << 5)); - mutex_unlock(&ts->mutex); - - return count; -} - -static DEVICE_ATTR(gpio3, 0664, ad7877_gpio3_show, ad7877_gpio3_store); - -static ssize_t ad7877_gpio4_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - - return sprintf(buf, "%u\n", ts->gpio4); -} - -static ssize_t ad7877_gpio4_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct ad7877 *ts = dev_get_drvdata(dev); - unsigned long val; - int error; - - error = strict_strtoul(buf, 10, &val); - if (error) - return error; - - mutex_lock(&ts->mutex); - ts->gpio4 = !!val; - ad7877_write(ts->spi, AD7877_REG_EXTWRITE, AD7877_EXTW_GPIO_DATA | - (ts->gpio4 << 4) | (ts->gpio3 << 5)); - mutex_unlock(&ts->mutex); - - return count; -} - -static DEVICE_ATTR(gpio4, 0664, ad7877_gpio4_show, ad7877_gpio4_store); - -static struct attribute *ad7877_attributes[] = { - &dev_attr_temp1.attr, - &dev_attr_temp2.attr, - &dev_attr_aux1.attr, - &dev_attr_aux2.attr, - &dev_attr_bat1.attr, - &dev_attr_bat2.attr, - &dev_attr_disable.attr, - &dev_attr_dac.attr, - &dev_attr_gpio4.attr, - NULL -}; - -static const struct attribute_group ad7877_attr_group = { - .attrs = ad7877_attributes, -}; - -static void ad7877_setup_ts_def_msg(struct spi_device *spi, struct ad7877 *ts) -{ - struct spi_message *m; - int i; - - ts->cmd_crtl2 = AD7877_WRITEADD(AD7877_REG_CTRL2) | - AD7877_POL(ts->stopacq_polarity) | - AD7877_AVG(ts->averaging) | AD7877_PM(1) | - AD7877_TMR(ts->pen_down_acc_interval) | - AD7877_ACQ(ts->acquisition_time) | - AD7877_FCD(ts->first_conversion_delay); - - ad7877_write(spi, AD7877_REG_CTRL2, ts->cmd_crtl2); - - ts->cmd_crtl1 = AD7877_WRITEADD(AD7877_REG_CTRL1) | - AD7877_READADD(AD7877_REG_XPLUS-1) | - AD7877_MODE_SEQ1 | AD7877_DFR; - - ad7877_write(spi, AD7877_REG_CTRL1, ts->cmd_crtl1); - - ts->cmd_dummy = 0; - - m = &ts->msg; - - spi_message_init(m); - - m->complete = ad7877_callback; - m->context = ts; - - ts->xfer[0].tx_buf = &ts->cmd_crtl1; - ts->xfer[0].len = 2; - - spi_message_add_tail(&ts->xfer[0], m); - - ts->xfer[1].tx_buf = &ts->cmd_dummy; /* Send ZERO */ - ts->xfer[1].len = 2; - - spi_message_add_tail(&ts->xfer[1], m); - - for (i = 0; i < 11; i++) { - ts->xfer[i + 2].rx_buf = &ts->conversion_data[AD7877_SEQ_YPOS + i]; - ts->xfer[i + 2].len = 2; - spi_message_add_tail(&ts->xfer[i + 2], m); - } -} - -static int __devinit ad7877_probe(struct spi_device *spi) -{ - struct ad7877 *ts; - struct input_dev *input_dev; - struct ad7877_platform_data *pdata = spi->dev.platform_data; - int err; - u16 verify; - - if (!spi->irq) { - dev_dbg(&spi->dev, "no IRQ?\n"); - return -ENODEV; - } - - if (!pdata) { - dev_dbg(&spi->dev, "no platform data?\n"); - return -ENODEV; - } - - /* don't exceed max specified SPI CLK frequency */ - if (spi->max_speed_hz > MAX_SPI_FREQ_HZ) { - dev_dbg(&spi->dev, "SPI CLK %d Hz?\n",spi->max_speed_hz); - return -EINVAL; - } - - ts = kzalloc(sizeof(struct ad7877), GFP_KERNEL); - input_dev = input_allocate_device(); - if (!ts || !input_dev) { - err = -ENOMEM; - goto err_free_mem; - } - - dev_set_drvdata(&spi->dev, ts); - ts->spi = spi; - ts->input = input_dev; - - setup_timer(&ts->timer, ad7877_timer, (unsigned long) ts); - mutex_init(&ts->mutex); - spin_lock_init(&ts->lock); - - ts->model = pdata->model ? : 7877; - ts->vref_delay_usecs = pdata->vref_delay_usecs ? : 100; - ts->x_plate_ohms = pdata->x_plate_ohms ? : 400; - ts->pressure_max = pdata->pressure_max ? : ~0; - - ts->stopacq_polarity = pdata->stopacq_polarity; - ts->first_conversion_delay = pdata->first_conversion_delay; - ts->acquisition_time = pdata->acquisition_time; - ts->averaging = pdata->averaging; - ts->pen_down_acc_interval = pdata->pen_down_acc_interval; - - snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&spi->dev)); - - input_dev->name = "AD7877 Touchscreen"; - input_dev->phys = ts->phys; - input_dev->dev.parent = &spi->dev; - - __set_bit(EV_ABS, input_dev->evbit); - __set_bit(ABS_X, input_dev->absbit); - __set_bit(ABS_Y, input_dev->absbit); - __set_bit(ABS_PRESSURE, input_dev->absbit); - - input_set_abs_params(input_dev, ABS_X, - pdata->x_min ? : 0, - pdata->x_max ? : MAX_12BIT, - 0, 0); - input_set_abs_params(input_dev, ABS_Y, - pdata->y_min ? : 0, - pdata->y_max ? : MAX_12BIT, - 0, 0); - input_set_abs_params(input_dev, ABS_PRESSURE, - pdata->pressure_min, pdata->pressure_max, 0, 0); - - ad7877_write(spi, AD7877_REG_SEQ1, AD7877_MM_SEQUENCE); - - verify = ad7877_read(spi, AD7877_REG_SEQ1); - - if (verify != AD7877_MM_SEQUENCE){ - dev_err(&spi->dev, "%s: Failed to probe %s\n", - dev_name(&spi->dev), input_dev->name); - err = -ENODEV; - goto err_free_mem; - } - - if (gpio3) - ad7877_write(spi, AD7877_REG_EXTWRITE, AD7877_EXTW_GPIO_3_CONF); - - ad7877_setup_ts_def_msg(spi, ts); - - /* Request AD7877 /DAV GPIO interrupt */ - - err = request_irq(spi->irq, ad7877_irq, IRQF_TRIGGER_FALLING | - IRQF_SAMPLE_RANDOM, spi->dev.driver->name, ts); - if (err) { - dev_dbg(&spi->dev, "irq %d busy?\n", spi->irq); - goto err_free_mem; - } - - err = sysfs_create_group(&spi->dev.kobj, &ad7877_attr_group); - if (err) - goto err_free_irq; - - err = device_create_file(&spi->dev, - gpio3 ? &dev_attr_gpio3 : &dev_attr_aux3); - if (err) - goto err_remove_attr_group; - - err = input_register_device(input_dev); - if (err) - goto err_remove_attr; - - return 0; - -err_remove_attr: - device_remove_file(&spi->dev, - gpio3 ? &dev_attr_gpio3 : &dev_attr_aux3); -err_remove_attr_group: - sysfs_remove_group(&spi->dev.kobj, &ad7877_attr_group); -err_free_irq: - free_irq(spi->irq, ts); -err_free_mem: - input_free_device(input_dev); - kfree(ts); - dev_set_drvdata(&spi->dev, NULL); - return err; -} - -static int __devexit ad7877_remove(struct spi_device *spi) -{ - struct ad7877 *ts = dev_get_drvdata(&spi->dev); - - sysfs_remove_group(&spi->dev.kobj, &ad7877_attr_group); - device_remove_file(&spi->dev, - gpio3 ? &dev_attr_gpio3 : &dev_attr_aux3); - - ad7877_disable(ts); - free_irq(ts->spi->irq, ts); - - input_unregister_device(ts->input); - kfree(ts); - - dev_dbg(&spi->dev, "unregistered touchscreen\n"); - dev_set_drvdata(&spi->dev, NULL); - - return 0; -} - -#ifdef CONFIG_PM -static int ad7877_suspend(struct spi_device *spi, pm_message_t message) -{ - struct ad7877 *ts = dev_get_drvdata(&spi->dev); - - ad7877_disable(ts); - - return 0; -} - -static int ad7877_resume(struct spi_device *spi) -{ - struct ad7877 *ts = dev_get_drvdata(&spi->dev); - - ad7877_enable(ts); - - return 0; -} -#else -#define ad7877_suspend NULL -#define ad7877_resume NULL -#endif - -static struct spi_driver ad7877_driver = { - .driver = { - .name = "ad7877", - .bus = &spi_bus_type, - .owner = THIS_MODULE, - }, - .probe = ad7877_probe, - .remove = __devexit_p(ad7877_remove), - .suspend = ad7877_suspend, - .resume = ad7877_resume, -}; - -static int __init ad7877_init(void) -{ - return spi_register_driver(&ad7877_driver); -} -module_init(ad7877_init); - -static void __exit ad7877_exit(void) -{ - spi_unregister_driver(&ad7877_driver); -} -module_exit(ad7877_exit); - -MODULE_AUTHOR("Michael Hennerich "); -MODULE_DESCRIPTION("AD7877 touchscreen Driver"); -MODULE_LICENSE("GPL"); diff --git a/trunk/drivers/input/touchscreen/ad7879.c b/trunk/drivers/input/touchscreen/ad7879.c deleted file mode 100644 index ea4c61d68683..000000000000 --- a/trunk/drivers/input/touchscreen/ad7879.c +++ /dev/null @@ -1,782 +0,0 @@ -/* - * Copyright (C) 2008 Michael Hennerich, Analog Devices Inc. - * - * Description: AD7879 based touchscreen, and GPIO driver (I2C/SPI Interface) - * - * Bugs: Enter bugs at http://blackfin.uclinux.org/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, see the file COPYING, or write - * to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * History: - * Copyright (c) 2005 David Brownell - * Copyright (c) 2006 Nokia Corporation - * Various changes: Imre Deak - * - * Using code from: - * - corgi_ts.c - * Copyright (C) 2004-2005 Richard Purdie - * - omap_ts.[hc], ads7846.h, ts_osk.c - * Copyright (C) 2002 MontaVista Software - * Copyright (C) 2004 Texas Instruments - * Copyright (C) 2005 Dirk Behme - * - ad7877.c - * Copyright (C) 2006-2008 Analog Devices Inc. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#define AD7879_REG_ZEROS 0 -#define AD7879_REG_CTRL1 1 -#define AD7879_REG_CTRL2 2 -#define AD7879_REG_CTRL3 3 -#define AD7879_REG_AUX1HIGH 4 -#define AD7879_REG_AUX1LOW 5 -#define AD7879_REG_TEMP1HIGH 6 -#define AD7879_REG_TEMP1LOW 7 -#define AD7879_REG_XPLUS 8 -#define AD7879_REG_YPLUS 9 -#define AD7879_REG_Z1 10 -#define AD7879_REG_Z2 11 -#define AD7879_REG_AUXVBAT 12 -#define AD7879_REG_TEMP 13 -#define AD7879_REG_REVID 14 - -/* Control REG 1 */ -#define AD7879_TMR(x) ((x & 0xFF) << 0) -#define AD7879_ACQ(x) ((x & 0x3) << 8) -#define AD7879_MODE_NOC (0 << 10) /* Do not convert */ -#define AD7879_MODE_SCC (1 << 10) /* Single channel conversion */ -#define AD7879_MODE_SEQ0 (2 << 10) /* Sequence 0 in Slave Mode */ -#define AD7879_MODE_SEQ1 (3 << 10) /* Sequence 1 in Master Mode */ -#define AD7879_MODE_INT (1 << 15) /* PENIRQ disabled INT enabled */ - -/* Control REG 2 */ -#define AD7879_FCD(x) ((x & 0x3) << 0) -#define AD7879_RESET (1 << 4) -#define AD7879_MFS(x) ((x & 0x3) << 5) -#define AD7879_AVG(x) ((x & 0x3) << 7) -#define AD7879_SER (1 << 9) /* non-differential */ -#define AD7879_DFR (0 << 9) /* differential */ -#define AD7879_GPIOPOL (1 << 10) -#define AD7879_GPIODIR (1 << 11) -#define AD7879_GPIO_DATA (1 << 12) -#define AD7879_GPIO_EN (1 << 13) -#define AD7879_PM(x) ((x & 0x3) << 14) -#define AD7879_PM_SHUTDOWN (0) -#define AD7879_PM_DYN (1) -#define AD7879_PM_FULLON (2) - -/* Control REG 3 */ -#define AD7879_TEMPMASK_BIT (1<<15) -#define AD7879_AUXVBATMASK_BIT (1<<14) -#define AD7879_INTMODE_BIT (1<<13) -#define AD7879_GPIOALERTMASK_BIT (1<<12) -#define AD7879_AUXLOW_BIT (1<<11) -#define AD7879_AUXHIGH_BIT (1<<10) -#define AD7879_TEMPLOW_BIT (1<<9) -#define AD7879_TEMPHIGH_BIT (1<<8) -#define AD7879_YPLUS_BIT (1<<7) -#define AD7879_XPLUS_BIT (1<<6) -#define AD7879_Z1_BIT (1<<5) -#define AD7879_Z2_BIT (1<<4) -#define AD7879_AUX_BIT (1<<3) -#define AD7879_VBAT_BIT (1<<2) -#define AD7879_TEMP_BIT (1<<1) - -enum { - AD7879_SEQ_XPOS = 0, - AD7879_SEQ_YPOS = 1, - AD7879_SEQ_Z1 = 2, - AD7879_SEQ_Z2 = 3, - AD7879_NR_SENSE = 4, -}; - -#define MAX_12BIT ((1<<12)-1) -#define TS_PEN_UP_TIMEOUT msecs_to_jiffies(50) - -#if defined(CONFIG_TOUCHSCREEN_AD7879_SPI) || defined(CONFIG_TOUCHSCREEN_AD7879_SPI_MODULE) -#define AD7879_DEVID 0x7A -typedef struct spi_device bus_device; -#elif defined(CONFIG_TOUCHSCREEN_AD7879_I2C) || defined(CONFIG_TOUCHSCREEN_AD7879_I2C_MODULE) -#define AD7879_DEVID 0x79 -typedef struct i2c_client bus_device; -#endif - -struct ad7879 { - bus_device *bus; - struct input_dev *input; - struct work_struct work; - struct timer_list timer; - - struct mutex mutex; - unsigned disabled:1; /* P: mutex */ - -#if defined(CONFIG_TOUCHSCREEN_AD7879_SPI) || defined(CONFIG_TOUCHSCREEN_AD7879_SPI_MODULE) - struct spi_message msg; - struct spi_transfer xfer[AD7879_NR_SENSE + 1]; - u16 cmd; -#endif - u16 conversion_data[AD7879_NR_SENSE]; - char phys[32]; - u8 first_conversion_delay; - u8 acquisition_time; - u8 averaging; - u8 pen_down_acc_interval; - u8 median; - u16 x_plate_ohms; - u16 pressure_max; - u16 gpio_init; - u16 cmd_crtl1; - u16 cmd_crtl2; - u16 cmd_crtl3; - unsigned gpio:1; -}; - -static int ad7879_read(bus_device *, u8); -static int ad7879_write(bus_device *, u8, u16); -static void ad7879_collect(struct ad7879 *); - -static void ad7879_report(struct ad7879 *ts) -{ - struct input_dev *input_dev = ts->input; - unsigned Rt; - u16 x, y, z1, z2; - - x = ts->conversion_data[AD7879_SEQ_XPOS] & MAX_12BIT; - y = ts->conversion_data[AD7879_SEQ_YPOS] & MAX_12BIT; - z1 = ts->conversion_data[AD7879_SEQ_Z1] & MAX_12BIT; - z2 = ts->conversion_data[AD7879_SEQ_Z2] & MAX_12BIT; - - /* - * The samples processed here are already preprocessed by the AD7879. - * The preprocessing function consists of a median and an averaging filter. - * The combination of these two techniques provides a robust solution, - * discarding the spurious noise in the signal and keeping only the data of interest. - * The size of both filters is programmable. (dev.platform_data, see linux/spi/ad7879.h) - * Other user-programmable conversion controls include variable acquisition time, - * and first conversion delay. Up to 16 averages can be taken per conversion. - */ - - if (likely(x && z1)) { - /* compute touch pressure resistance using equation #1 */ - Rt = (z2 - z1) * x * ts->x_plate_ohms; - Rt /= z1; - Rt = (Rt + 2047) >> 12; - - input_report_abs(input_dev, ABS_X, x); - input_report_abs(input_dev, ABS_Y, y); - input_report_abs(input_dev, ABS_PRESSURE, Rt); - input_sync(input_dev); - } -} - -static void ad7879_work(struct work_struct *work) -{ - struct ad7879 *ts = container_of(work, struct ad7879, work); - - /* use keventd context to read the result registers */ - ad7879_collect(ts); - ad7879_report(ts); - mod_timer(&ts->timer, jiffies + TS_PEN_UP_TIMEOUT); -} - -static void ad7879_ts_event_release(struct ad7879 *ts) -{ - struct input_dev *input_dev = ts->input; - - input_report_abs(input_dev, ABS_PRESSURE, 0); - input_sync(input_dev); -} - -static void ad7879_timer(unsigned long handle) -{ - struct ad7879 *ts = (void *)handle; - - ad7879_ts_event_release(ts); -} - -static irqreturn_t ad7879_irq(int irq, void *handle) -{ - struct ad7879 *ts = handle; - - /* The repeated conversion sequencer controlled by TMR kicked off too fast. - * We ignore the last and process the sample sequence currently in the queue. - * It can't be older than 9.4ms - */ - - if (!work_pending(&ts->work)) - schedule_work(&ts->work); - - return IRQ_HANDLED; -} - -static void ad7879_setup(struct ad7879 *ts) -{ - ts->cmd_crtl3 = AD7879_YPLUS_BIT | - AD7879_XPLUS_BIT | - AD7879_Z2_BIT | - AD7879_Z1_BIT | - AD7879_TEMPMASK_BIT | - AD7879_AUXVBATMASK_BIT | - AD7879_GPIOALERTMASK_BIT; - - ts->cmd_crtl2 = AD7879_PM(AD7879_PM_DYN) | AD7879_DFR | - AD7879_AVG(ts->averaging) | - AD7879_MFS(ts->median) | - AD7879_FCD(ts->first_conversion_delay) | - ts->gpio_init; - - ts->cmd_crtl1 = AD7879_MODE_INT | AD7879_MODE_SEQ1 | - AD7879_ACQ(ts->acquisition_time) | - AD7879_TMR(ts->pen_down_acc_interval); - - ad7879_write(ts->bus, AD7879_REG_CTRL2, ts->cmd_crtl2); - ad7879_write(ts->bus, AD7879_REG_CTRL3, ts->cmd_crtl3); - ad7879_write(ts->bus, AD7879_REG_CTRL1, ts->cmd_crtl1); -} - -static void ad7879_disable(struct ad7879 *ts) -{ - mutex_lock(&ts->mutex); - - if (!ts->disabled) { - - ts->disabled = 1; - disable_irq(ts->bus->irq); - - cancel_work_sync(&ts->work); - - if (del_timer_sync(&ts->timer)) - ad7879_ts_event_release(ts); - - ad7879_write(ts->bus, AD7879_REG_CTRL2, - AD7879_PM(AD7879_PM_SHUTDOWN)); - } - - mutex_unlock(&ts->mutex); -} - -static void ad7879_enable(struct ad7879 *ts) -{ - mutex_lock(&ts->mutex); - - if (ts->disabled) { - ad7879_setup(ts); - ts->disabled = 0; - enable_irq(ts->bus->irq); - } - - mutex_unlock(&ts->mutex); -} - -static ssize_t ad7879_disable_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct ad7879 *ts = dev_get_drvdata(dev); - - return sprintf(buf, "%u\n", ts->disabled); -} - -static ssize_t ad7879_disable_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct ad7879 *ts = dev_get_drvdata(dev); - unsigned long val; - int error; - - error = strict_strtoul(buf, 10, &val); - if (error) - return error; - - if (val) - ad7879_disable(ts); - else - ad7879_enable(ts); - - return count; -} - -static DEVICE_ATTR(disable, 0664, ad7879_disable_show, ad7879_disable_store); - -static ssize_t ad7879_gpio_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct ad7879 *ts = dev_get_drvdata(dev); - - return sprintf(buf, "%u\n", ts->gpio); -} - -static ssize_t ad7879_gpio_store(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct ad7879 *ts = dev_get_drvdata(dev); - unsigned long val; - int error; - - error = strict_strtoul(buf, 10, &val); - if (error) - return error; - - mutex_lock(&ts->mutex); - ts->gpio = !!val; - error = ad7879_write(ts->bus, AD7879_REG_CTRL2, - ts->gpio ? - ts->cmd_crtl2 & ~AD7879_GPIO_DATA : - ts->cmd_crtl2 | AD7879_GPIO_DATA); - mutex_unlock(&ts->mutex); - - return error ? : count; -} - -static DEVICE_ATTR(gpio, 0664, ad7879_gpio_show, ad7879_gpio_store); - -static struct attribute *ad7879_attributes[] = { - &dev_attr_disable.attr, - &dev_attr_gpio.attr, - NULL -}; - -static const struct attribute_group ad7879_attr_group = { - .attrs = ad7879_attributes, -}; - -static int __devinit ad7879_construct(bus_device *bus, struct ad7879 *ts) -{ - struct input_dev *input_dev; - struct ad7879_platform_data *pdata = bus->dev.platform_data; - int err; - u16 revid; - - if (!bus->irq) { - dev_err(&bus->dev, "no IRQ?\n"); - return -ENODEV; - } - - if (!pdata) { - dev_err(&bus->dev, "no platform data?\n"); - return -ENODEV; - } - - input_dev = input_allocate_device(); - if (!input_dev) - return -ENOMEM; - - ts->input = input_dev; - - setup_timer(&ts->timer, ad7879_timer, (unsigned long) ts); - INIT_WORK(&ts->work, ad7879_work); - mutex_init(&ts->mutex); - - ts->x_plate_ohms = pdata->x_plate_ohms ? : 400; - ts->pressure_max = pdata->pressure_max ? : ~0; - - ts->first_conversion_delay = pdata->first_conversion_delay; - ts->acquisition_time = pdata->acquisition_time; - ts->averaging = pdata->averaging; - ts->pen_down_acc_interval = pdata->pen_down_acc_interval; - ts->median = pdata->median; - - if (pdata->gpio_output) - ts->gpio_init = AD7879_GPIO_EN | - (pdata->gpio_default ? 0 : AD7879_GPIO_DATA); - else - ts->gpio_init = AD7879_GPIO_EN | AD7879_GPIODIR; - - snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(&bus->dev)); - - input_dev->name = "AD7879 Touchscreen"; - input_dev->phys = ts->phys; - input_dev->dev.parent = &bus->dev; - - __set_bit(EV_ABS, input_dev->evbit); - __set_bit(ABS_X, input_dev->absbit); - __set_bit(ABS_Y, input_dev->absbit); - __set_bit(ABS_PRESSURE, input_dev->absbit); - - input_set_abs_params(input_dev, ABS_X, - pdata->x_min ? : 0, - pdata->x_max ? : MAX_12BIT, - 0, 0); - input_set_abs_params(input_dev, ABS_Y, - pdata->y_min ? : 0, - pdata->y_max ? : MAX_12BIT, - 0, 0); - input_set_abs_params(input_dev, ABS_PRESSURE, - pdata->pressure_min, pdata->pressure_max, 0, 0); - - err = ad7879_write(bus, AD7879_REG_CTRL2, AD7879_RESET); - - if (err < 0) { - dev_err(&bus->dev, "Failed to write %s\n", input_dev->name); - goto err_free_mem; - } - - revid = ad7879_read(bus, AD7879_REG_REVID); - - if ((revid & 0xFF) != AD7879_DEVID) { - dev_err(&bus->dev, "Failed to probe %s\n", input_dev->name); - err = -ENODEV; - goto err_free_mem; - } - - ad7879_setup(ts); - - err = request_irq(bus->irq, ad7879_irq, - IRQF_TRIGGER_FALLING | IRQF_SAMPLE_RANDOM, - bus->dev.driver->name, ts); - - if (err) { - dev_err(&bus->dev, "irq %d busy?\n", bus->irq); - goto err_free_mem; - } - - err = sysfs_create_group(&bus->dev.kobj, &ad7879_attr_group); - if (err) - goto err_free_irq; - - err = input_register_device(input_dev); - if (err) - goto err_remove_attr; - - dev_info(&bus->dev, "Rev.%d touchscreen, irq %d\n", - revid >> 8, bus->irq); - - return 0; - -err_remove_attr: - sysfs_remove_group(&bus->dev.kobj, &ad7879_attr_group); -err_free_irq: - free_irq(bus->irq, ts); -err_free_mem: - input_free_device(input_dev); - - return err; -} - -static int __devexit ad7879_destroy(bus_device *bus, struct ad7879 *ts) -{ - ad7879_disable(ts); - sysfs_remove_group(&ts->bus->dev.kobj, &ad7879_attr_group); - free_irq(ts->bus->irq, ts); - input_unregister_device(ts->input); - dev_dbg(&bus->dev, "unregistered touchscreen\n"); - - return 0; -} - -#ifdef CONFIG_PM -static int ad7879_suspend(bus_device *bus, pm_message_t message) -{ - struct ad7879 *ts = dev_get_drvdata(&bus->dev); - - ad7879_disable(ts); - - return 0; -} - -static int ad7879_resume(bus_device *bus) -{ - struct ad7879 *ts = dev_get_drvdata(&bus->dev); - - ad7879_enable(ts); - - return 0; -} -#else -#define ad7879_suspend NULL -#define ad7879_resume NULL -#endif - -#if defined(CONFIG_TOUCHSCREEN_AD7879_SPI) || defined(CONFIG_TOUCHSCREEN_AD7879_SPI_MODULE) -#define MAX_SPI_FREQ_HZ 5000000 -#define AD7879_CMD_MAGIC 0xE000 -#define AD7879_CMD_READ (1 << 10) -#define AD7879_WRITECMD(reg) (AD7879_CMD_MAGIC | (reg & 0xF)) -#define AD7879_READCMD(reg) (AD7879_CMD_MAGIC | AD7879_CMD_READ | (reg & 0xF)) - -struct ser_req { - u16 command; - u16 data; - struct spi_message msg; - struct spi_transfer xfer[2]; -}; - -/* - * ad7879_read/write are only used for initial setup and for sysfs controls. - * The main traffic is done in ad7879_collect(). - */ - -static int ad7879_read(struct spi_device *spi, u8 reg) -{ - struct ser_req *req; - int status, ret; - - req = kzalloc(sizeof *req, GFP_KERNEL); - if (!req) - return -ENOMEM; - - spi_message_init(&req->msg); - - req->command = (u16) AD7879_READCMD(reg); - req->xfer[0].tx_buf = &req->command; - req->xfer[0].len = 2; - - req->xfer[1].rx_buf = &req->data; - req->xfer[1].len = 2; - - spi_message_add_tail(&req->xfer[0], &req->msg); - spi_message_add_tail(&req->xfer[1], &req->msg); - - status = spi_sync(spi, &req->msg); - ret = status ? : req->data; - - kfree(req); - - return ret; -} - -static int ad7879_write(struct spi_device *spi, u8 reg, u16 val) -{ - struct ser_req *req; - int status; - - req = kzalloc(sizeof *req, GFP_KERNEL); - if (!req) - return -ENOMEM; - - spi_message_init(&req->msg); - - req->command = (u16) AD7879_WRITECMD(reg); - req->xfer[0].tx_buf = &req->command; - req->xfer[0].len = 2; - - req->data = val; - req->xfer[1].tx_buf = &req->data; - req->xfer[1].len = 2; - - spi_message_add_tail(&req->xfer[0], &req->msg); - spi_message_add_tail(&req->xfer[1], &req->msg); - - status = spi_sync(spi, &req->msg); - - kfree(req); - - return status; -} - -static void ad7879_collect(struct ad7879 *ts) -{ - int status = spi_sync(ts->bus, &ts->msg); - - if (status) - dev_err(&ts->bus->dev, "spi_sync --> %d\n", status); -} - -static void ad7879_setup_ts_def_msg(struct ad7879 *ts) -{ - struct spi_message *m; - int i; - - ts->cmd = (u16) AD7879_READCMD(AD7879_REG_XPLUS); - - m = &ts->msg; - spi_message_init(m); - ts->xfer[0].tx_buf = &ts->cmd; - ts->xfer[0].len = 2; - - spi_message_add_tail(&ts->xfer[0], m); - - for (i = 0; i < AD7879_NR_SENSE; i++) { - ts->xfer[i + 1].rx_buf = &ts->conversion_data[i]; - ts->xfer[i + 1].len = 2; - spi_message_add_tail(&ts->xfer[i + 1], m); - } -} - -static int __devinit ad7879_probe(struct spi_device *spi) -{ - struct ad7879 *ts; - int error; - - /* don't exceed max specified SPI CLK frequency */ - if (spi->max_speed_hz > MAX_SPI_FREQ_HZ) { - dev_err(&spi->dev, "SPI CLK %d Hz?\n", spi->max_speed_hz); - return -EINVAL; - } - - ts = kzalloc(sizeof(struct ad7879), GFP_KERNEL); - if (!ts) - return -ENOMEM; - - dev_set_drvdata(&spi->dev, ts); - ts->bus = spi; - - ad7879_setup_ts_def_msg(ts); - - error = ad7879_construct(spi, ts); - if (error) { - dev_set_drvdata(&spi->dev, NULL); - kfree(ts); - } - - return 0; -} - -static int __devexit ad7879_remove(struct spi_device *spi) -{ - struct ad7879 *ts = dev_get_drvdata(&spi->dev); - - ad7879_destroy(spi, ts); - dev_set_drvdata(&spi->dev, NULL); - kfree(ts); - - return 0; -} - -static struct spi_driver ad7879_driver = { - .driver = { - .name = "ad7879", - .bus = &spi_bus_type, - .owner = THIS_MODULE, - }, - .probe = ad7879_probe, - .remove = __devexit_p(ad7879_remove), - .suspend = ad7879_suspend, - .resume = ad7879_resume, -}; - -static int __init ad7879_init(void) -{ - return spi_register_driver(&ad7879_driver); -} -module_init(ad7879_init); - -static void __exit ad7879_exit(void) -{ - spi_unregister_driver(&ad7879_driver); -} -module_exit(ad7879_exit); - -#elif defined(CONFIG_TOUCHSCREEN_AD7879_I2C) || defined(CONFIG_TOUCHSCREEN_AD7879_I2C_MODULE) - -/* All registers are word-sized. - * AD7879 uses a high-byte first convention. - */ -static int ad7879_read(struct i2c_client *client, u8 reg) -{ - return swab16(i2c_smbus_read_word_data(client, reg)); -} - -static int ad7879_write(struct i2c_client *client, u8 reg, u16 val) -{ - return i2c_smbus_write_word_data(client, reg, swab16(val)); -} - -static void ad7879_collect(struct ad7879 *ts) -{ - int i; - - for (i = 0; i < AD7879_NR_SENSE; i++) - ts->conversion_data[i] = ad7879_read(ts->bus, - AD7879_REG_XPLUS + i); -} - -static int __devinit ad7879_probe(struct i2c_client *client, - const struct i2c_device_id *id) -{ - struct ad7879 *ts; - int error; - - if (!i2c_check_functionality(client->adapter, - I2C_FUNC_SMBUS_WORD_DATA)) { - dev_err(&client->dev, "SMBUS Word Data not Supported\n"); - return -EIO; - } - - ts = kzalloc(sizeof(struct ad7879), GFP_KERNEL); - if (!ts) - return -ENOMEM; - - i2c_set_clientdata(client, ts); - ts->bus = client; - - error = ad7879_construct(client, ts); - if (error) { - i2c_set_clientdata(client, NULL); - kfree(ts); - } - - return 0; -} - -static int __devexit ad7879_remove(struct i2c_client *client) -{ - struct ad7879 *ts = dev_get_drvdata(&client->dev); - - ad7879_destroy(client, ts); - i2c_set_clientdata(client, NULL); - kfree(ts); - - return 0; -} - -static const struct i2c_device_id ad7879_id[] = { - { "ad7879", 0 }, - { } -}; -MODULE_DEVICE_TABLE(i2c, ad7879_id); - -static struct i2c_driver ad7879_driver = { - .driver = { - .name = "ad7879", - .owner = THIS_MODULE, - }, - .probe = ad7879_probe, - .remove = __devexit_p(ad7879_remove), - .suspend = ad7879_suspend, - .resume = ad7879_resume, - .id_table = ad7879_id, -}; - -static int __init ad7879_init(void) -{ - return i2c_add_driver(&ad7879_driver); -} -module_init(ad7879_init); - -static void __exit ad7879_exit(void) -{ - i2c_del_driver(&ad7879_driver); -} -module_exit(ad7879_exit); -#endif - -MODULE_AUTHOR("Michael Hennerich "); -MODULE_DESCRIPTION("AD7879(-1) touchscreen Driver"); -MODULE_LICENSE("GPL"); diff --git a/trunk/drivers/input/touchscreen/mainstone-wm97xx.c b/trunk/drivers/input/touchscreen/mainstone-wm97xx.c index dfa6a84ab50a..1d11e2be9ef8 100644 --- a/trunk/drivers/input/touchscreen/mainstone-wm97xx.c +++ b/trunk/drivers/input/touchscreen/mainstone-wm97xx.c @@ -162,7 +162,6 @@ static int wm97xx_acc_pen_down(struct wm97xx *wm) input_report_abs(wm->input_dev, ABS_X, x & 0xfff); input_report_abs(wm->input_dev, ABS_Y, y & 0xfff); input_report_abs(wm->input_dev, ABS_PRESSURE, p & 0xfff); - input_report_key(wm->input_dev, BTN_TOUCH, (p != 0)); input_sync(wm->input_dev); reads++; } while (reads < cinfo[sp_idx].reads); @@ -246,7 +245,7 @@ static void wm97xx_irq_enable(struct wm97xx *wm, int enable) if (enable) enable_irq(wm->pen_irq); else - disable_irq_nosync(wm->pen_irq); + disable_irq(wm->pen_irq); } static struct wm97xx_mach_ops mainstone_mach_ops = { diff --git a/trunk/drivers/input/touchscreen/ucb1400_ts.c b/trunk/drivers/input/touchscreen/ucb1400_ts.c index e868264fe799..54986627def0 100644 --- a/trunk/drivers/input/touchscreen/ucb1400_ts.c +++ b/trunk/drivers/input/touchscreen/ucb1400_ts.c @@ -151,14 +151,12 @@ static void ucb1400_ts_evt_add(struct input_dev *idev, u16 pressure, u16 x, u16 input_report_abs(idev, ABS_X, x); input_report_abs(idev, ABS_Y, y); input_report_abs(idev, ABS_PRESSURE, pressure); - input_report_key(idev, BTN_TOUCH, 1); input_sync(idev); } static void ucb1400_ts_event_release(struct input_dev *idev) { input_report_abs(idev, ABS_PRESSURE, 0); - input_report_key(idev, BTN_TOUCH, 0); input_sync(idev); } @@ -379,8 +377,7 @@ static int ucb1400_ts_probe(struct platform_device *dev) ucb->ts_idev->id.product = ucb->id; ucb->ts_idev->open = ucb1400_ts_open; ucb->ts_idev->close = ucb1400_ts_close; - ucb->ts_idev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); - ucb->ts_idev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + ucb->ts_idev->evbit[0] = BIT_MASK(EV_ABS); ucb1400_adc_enable(ucb->ac97); x_res = ucb1400_ts_read_xres(ucb); diff --git a/trunk/drivers/input/touchscreen/wm97xx-core.c b/trunk/drivers/input/touchscreen/wm97xx-core.c index cec480bffe38..d15aa11d7056 100644 --- a/trunk/drivers/input/touchscreen/wm97xx-core.c +++ b/trunk/drivers/input/touchscreen/wm97xx-core.c @@ -409,7 +409,6 @@ static int wm97xx_read_samples(struct wm97xx *wm) wm->pen_is_down = 0; dev_dbg(wm->dev, "pen up\n"); input_report_abs(wm->input_dev, ABS_PRESSURE, 0); - input_report_key(wm->input_dev, BTN_TOUCH, 0); input_sync(wm->input_dev); } else if (!(rc & RC_AGAIN)) { /* We need high frequency updates only while @@ -434,7 +433,6 @@ static int wm97xx_read_samples(struct wm97xx *wm) input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff); input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff); input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff); - input_report_key(wm->input_dev, BTN_TOUCH, 1); input_sync(wm->input_dev); wm->pen_is_down = 1; wm->ts_reader_interval = wm->ts_reader_min_interval; @@ -630,21 +628,18 @@ static int wm97xx_probe(struct device *dev) wm->input_dev->phys = "wm97xx"; wm->input_dev->open = wm97xx_ts_input_open; wm->input_dev->close = wm97xx_ts_input_close; - - __set_bit(EV_ABS, wm->input_dev->evbit); - __set_bit(EV_KEY, wm->input_dev->evbit); - __set_bit(BTN_TOUCH, wm->input_dev->keybit); - + set_bit(EV_ABS, wm->input_dev->evbit); + set_bit(ABS_X, wm->input_dev->absbit); + set_bit(ABS_Y, wm->input_dev->absbit); + set_bit(ABS_PRESSURE, wm->input_dev->absbit); input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1], abs_x[2], 0); input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1], abs_y[2], 0); input_set_abs_params(wm->input_dev, ABS_PRESSURE, abs_p[0], abs_p[1], abs_p[2], 0); - input_set_drvdata(wm->input_dev, wm); wm->input_dev->dev.parent = dev; - ret = input_register_device(wm->input_dev); if (ret < 0) goto dev_alloc_err; diff --git a/trunk/drivers/input/touchscreen/zylonite-wm97xx.c b/trunk/drivers/input/touchscreen/zylonite-wm97xx.c deleted file mode 100644 index 41e4359c277c..000000000000 --- a/trunk/drivers/input/touchscreen/zylonite-wm97xx.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - * zylonite-wm97xx.c -- Zylonite Continuous Touch screen driver - * - * Copyright 2004, 2007, 2008 Wolfson Microelectronics PLC. - * Author: Mark Brown - * Parts Copyright : Ian Molton - * Andrew Zabolotny - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * Notes: - * This is a wm97xx extended touch driver supporting interrupt driven - * and continuous operation on Marvell Zylonite development systems - * (which have a WM9713 on board). - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -struct continuous { - u16 id; /* codec id */ - u8 code; /* continuous code */ - u8 reads; /* number of coord reads per read cycle */ - u32 speed; /* number of coords per second */ -}; - -#define WM_READS(sp) ((sp / HZ) + 1) - -static const struct continuous cinfo[] = { - { WM9713_ID2, 0, WM_READS(94), 94 }, - { WM9713_ID2, 1, WM_READS(120), 120 }, - { WM9713_ID2, 2, WM_READS(154), 154 }, - { WM9713_ID2, 3, WM_READS(188), 188 }, -}; - -/* continuous speed index */ -static int sp_idx; - -/* - * Pen sampling frequency (Hz) in continuous mode. - */ -static int cont_rate = 200; -module_param(cont_rate, int, 0); -MODULE_PARM_DESC(cont_rate, "Sampling rate in continuous mode (Hz)"); - -/* - * Pressure readback. - * - * Set to 1 to read back pen down pressure - */ -static int pressure; -module_param(pressure, int, 0); -MODULE_PARM_DESC(pressure, "Pressure readback (1 = pressure, 0 = no pressure)"); - -/* - * AC97 touch data slot. - * - * Touch screen readback data ac97 slot - */ -static int ac97_touch_slot = 5; -module_param(ac97_touch_slot, int, 0); -MODULE_PARM_DESC(ac97_touch_slot, "Touch screen data slot AC97 number"); - - -/* flush AC97 slot 5 FIFO machines */ -static void wm97xx_acc_pen_up(struct wm97xx *wm) -{ - int i; - - msleep(1); - - for (i = 0; i < 16; i++) - MODR; -} - -static int wm97xx_acc_pen_down(struct wm97xx *wm) -{ - u16 x, y, p = 0x100 | WM97XX_ADCSEL_PRES; - int reads = 0; - static u16 last, tries; - - /* When the AC97 queue has been drained we need to allow time - * to buffer up samples otherwise we end up spinning polling - * for samples. The controller can't have a suitably low - * threashold set to use the notifications it gives. - */ - msleep(1); - - if (tries > 5) { - tries = 0; - return RC_PENUP; - } - - x = MODR; - if (x == last) { - tries++; - return RC_AGAIN; - } - last = x; - do { - if (reads) - x = MODR; - y = MODR; - if (pressure) - p = MODR; - - /* are samples valid */ - if ((x & WM97XX_ADCSRC_MASK) != WM97XX_ADCSEL_X || - (y & WM97XX_ADCSRC_MASK) != WM97XX_ADCSEL_Y || - (p & WM97XX_ADCSRC_MASK) != WM97XX_ADCSEL_PRES) - goto up; - - /* coordinate is good */ - tries = 0; - input_report_abs(wm->input_dev, ABS_X, x & 0xfff); - input_report_abs(wm->input_dev, ABS_Y, y & 0xfff); - input_report_abs(wm->input_dev, ABS_PRESSURE, p & 0xfff); - input_report_key(wm->input_dev, BTN_TOUCH, (p != 0)); - input_sync(wm->input_dev); - reads++; - } while (reads < cinfo[sp_idx].reads); -up: - return RC_PENDOWN | RC_AGAIN; -} - -static int wm97xx_acc_startup(struct wm97xx *wm) -{ - int idx; - - /* check we have a codec */ - if (wm->ac97 == NULL) - return -ENODEV; - - /* Go you big red fire engine */ - for (idx = 0; idx < ARRAY_SIZE(cinfo); idx++) { - if (wm->id != cinfo[idx].id) - continue; - sp_idx = idx; - if (cont_rate <= cinfo[idx].speed) - break; - } - wm->acc_rate = cinfo[sp_idx].code; - wm->acc_slot = ac97_touch_slot; - dev_info(wm->dev, - "zylonite accelerated touchscreen driver, %d samples/sec\n", - cinfo[sp_idx].speed); - - return 0; -} - -static void wm97xx_irq_enable(struct wm97xx *wm, int enable) -{ - if (enable) - enable_irq(wm->pen_irq); - else - disable_irq_nosync(wm->pen_irq); -} - -static struct wm97xx_mach_ops zylonite_mach_ops = { - .acc_enabled = 1, - .acc_pen_up = wm97xx_acc_pen_up, - .acc_pen_down = wm97xx_acc_pen_down, - .acc_startup = wm97xx_acc_startup, - .irq_enable = wm97xx_irq_enable, - .irq_gpio = WM97XX_GPIO_2, -}; - -static int zylonite_wm97xx_probe(struct platform_device *pdev) -{ - struct wm97xx *wm = platform_get_drvdata(pdev); - int gpio_touch_irq; - - if (cpu_is_pxa320()) - gpio_touch_irq = mfp_to_gpio(MFP_PIN_GPIO15); - else - gpio_touch_irq = mfp_to_gpio(MFP_PIN_GPIO26); - - wm->pen_irq = IRQ_GPIO(gpio_touch_irq); - set_irq_type(IRQ_GPIO(gpio_touch_irq), IRQ_TYPE_EDGE_BOTH); - - wm97xx_config_gpio(wm, WM97XX_GPIO_13, WM97XX_GPIO_IN, - WM97XX_GPIO_POL_HIGH, - WM97XX_GPIO_STICKY, - WM97XX_GPIO_WAKE); - wm97xx_config_gpio(wm, WM97XX_GPIO_2, WM97XX_GPIO_OUT, - WM97XX_GPIO_POL_HIGH, - WM97XX_GPIO_NOTSTICKY, - WM97XX_GPIO_NOWAKE); - - return wm97xx_register_mach_ops(wm, &zylonite_mach_ops); -} - -static int zylonite_wm97xx_remove(struct platform_device *pdev) -{ - struct wm97xx *wm = platform_get_drvdata(pdev); - - wm97xx_unregister_mach_ops(wm); - - return 0; -} - -static struct platform_driver zylonite_wm97xx_driver = { - .probe = zylonite_wm97xx_probe, - .remove = zylonite_wm97xx_remove, - .driver = { - .name = "wm97xx-touch", - }, -}; - -static int __init zylonite_wm97xx_init(void) -{ - return platform_driver_register(&zylonite_wm97xx_driver); -} - -static void __exit zylonite_wm97xx_exit(void) -{ - platform_driver_unregister(&zylonite_wm97xx_driver); -} - -module_init(zylonite_wm97xx_init); -module_exit(zylonite_wm97xx_exit); - -/* Module information */ -MODULE_AUTHOR("Mark Brown "); -MODULE_DESCRIPTION("wm97xx continuous touch driver for Zylonite"); -MODULE_LICENSE("GPL"); diff --git a/trunk/drivers/leds/leds-gpio.c b/trunk/drivers/leds/leds-gpio.c index d2109054de85..102ef4a14c5f 100644 --- a/trunk/drivers/leds/leds-gpio.c +++ b/trunk/drivers/leds/leds-gpio.c @@ -82,7 +82,7 @@ static int __devinit create_gpio_led(const struct gpio_led *template, if (!gpio_is_valid(template->gpio)) { printk(KERN_INFO "Skipping unavilable LED gpio %d (%s)\n", template->gpio, template->name); - return 0; + return; } ret = gpio_request(template->gpio, template->name); diff --git a/trunk/drivers/md/dm-ioctl.c b/trunk/drivers/md/dm-ioctl.c index 823ceba6efa8..f01096549a93 100644 --- a/trunk/drivers/md/dm-ioctl.c +++ b/trunk/drivers/md/dm-ioctl.c @@ -1047,19 +1047,6 @@ static int populate_table(struct dm_table *table, return dm_table_complete(table); } -static int table_prealloc_integrity(struct dm_table *t, - struct mapped_device *md) -{ - struct list_head *devices = dm_table_get_devices(t); - struct dm_dev_internal *dd; - - list_for_each_entry(dd, devices, list) - if (bdev_get_integrity(dd->dm_dev.bdev)) - return blk_integrity_register(dm_disk(md), NULL); - - return 0; -} - static int table_load(struct dm_ioctl *param, size_t param_size) { int r; @@ -1081,14 +1068,6 @@ static int table_load(struct dm_ioctl *param, size_t param_size) goto out; } - r = table_prealloc_integrity(t, md); - if (r) { - DMERR("%s: could not register integrity profile.", - dm_device_name(md)); - dm_table_destroy(t); - goto out; - } - down_write(&_hash_lock); hc = dm_get_mdptr(md); if (!hc || hc->md != md) { diff --git a/trunk/drivers/md/dm-kcopyd.c b/trunk/drivers/md/dm-kcopyd.c index 3e3fc06cb861..0a225da21272 100644 --- a/trunk/drivers/md/dm-kcopyd.c +++ b/trunk/drivers/md/dm-kcopyd.c @@ -297,8 +297,7 @@ static int run_complete_job(struct kcopyd_job *job) dm_kcopyd_notify_fn fn = job->fn; struct dm_kcopyd_client *kc = job->kc; - if (job->pages) - kcopyd_put_pages(kc, job->pages); + kcopyd_put_pages(kc, job->pages); mempool_free(job, kc->job_pool); fn(read_err, write_err, context); @@ -462,7 +461,6 @@ static void segment_complete(int read_err, unsigned long write_err, sector_t progress = 0; sector_t count = 0; struct kcopyd_job *job = (struct kcopyd_job *) context; - struct dm_kcopyd_client *kc = job->kc; mutex_lock(&job->lock); @@ -492,7 +490,7 @@ static void segment_complete(int read_err, unsigned long write_err, if (count) { int i; - struct kcopyd_job *sub_job = mempool_alloc(kc->job_pool, + struct kcopyd_job *sub_job = mempool_alloc(job->kc->job_pool, GFP_NOIO); *sub_job = *job; @@ -511,16 +509,13 @@ static void segment_complete(int read_err, unsigned long write_err, } else if (atomic_dec_and_test(&job->sub_jobs)) { /* - * Queue the completion callback to the kcopyd thread. - * - * Some callers assume that all the completions are called - * from a single thread and don't race with each other. - * - * We must not call the callback directly here because this - * code may not be executing in the thread. + * To avoid a race we must keep the job around + * until after the notify function has completed. + * Otherwise the client may try and stop the job + * after we've completed. */ - push(&kc->complete_jobs, job); - wake(kc); + job->fn(read_err, write_err, job->context); + mempool_free(job, job->kc->job_pool); } } @@ -533,8 +528,6 @@ static void split_job(struct kcopyd_job *job) { int i; - atomic_inc(&job->kc->nr_jobs); - atomic_set(&job->sub_jobs, SPLIT_COUNT); for (i = 0; i < SPLIT_COUNT; i++) segment_complete(0, 0u, job); diff --git a/trunk/drivers/md/dm-linear.c b/trunk/drivers/md/dm-linear.c index 79fb53e51c70..bfa107f59d96 100644 --- a/trunk/drivers/md/dm-linear.c +++ b/trunk/drivers/md/dm-linear.c @@ -142,6 +142,7 @@ static struct target_type linear_target = { .status = linear_status, .ioctl = linear_ioctl, .merge = linear_merge, + .features = DM_TARGET_SUPPORTS_BARRIERS, }; int __init dm_linear_init(void) diff --git a/trunk/drivers/md/dm-table.c b/trunk/drivers/md/dm-table.c index 429b50b975d5..e8361b191b9b 100644 --- a/trunk/drivers/md/dm-table.c +++ b/trunk/drivers/md/dm-table.c @@ -52,6 +52,8 @@ struct dm_table { sector_t *highs; struct dm_target *targets; + unsigned barriers_supported:1; + /* * Indicates the rw permissions for the new logical * device. This should be a combination of FMODE_READ @@ -241,6 +243,7 @@ int dm_table_create(struct dm_table **result, fmode_t mode, INIT_LIST_HEAD(&t->devices); atomic_set(&t->holders, 0); + t->barriers_supported = 1; if (!num_targets) num_targets = KEYS_PER_NODE; @@ -748,6 +751,10 @@ int dm_table_add_target(struct dm_table *t, const char *type, /* FIXME: the plan is to combine high here and then have * the merge fn apply the target level restrictions. */ combine_restrictions_low(&t->limits, &tgt->limits); + + if (!(tgt->type->features & DM_TARGET_SUPPORTS_BARRIERS)) + t->barriers_supported = 0; + return 0; bad: @@ -792,6 +799,12 @@ int dm_table_complete(struct dm_table *t) check_for_valid_limits(&t->limits); + /* + * We only support barriers if there is exactly one underlying device. + */ + if (!list_is_singular(&t->devices)) + t->barriers_supported = 0; + /* how many indexes will the btree have ? */ leaf_nodes = dm_div_up(t->num_targets, KEYS_PER_NODE); t->depth = 1 + int_log(leaf_nodes, CHILDREN_PER_NODE); @@ -866,45 +879,6 @@ struct dm_target *dm_table_find_target(struct dm_table *t, sector_t sector) return &t->targets[(KEYS_PER_NODE * n) + k]; } -/* - * Set the integrity profile for this device if all devices used have - * matching profiles. - */ -static void dm_table_set_integrity(struct dm_table *t) -{ - struct list_head *devices = dm_table_get_devices(t); - struct dm_dev_internal *prev = NULL, *dd = NULL; - - if (!blk_get_integrity(dm_disk(t->md))) - return; - - list_for_each_entry(dd, devices, list) { - if (prev && - blk_integrity_compare(prev->dm_dev.bdev->bd_disk, - dd->dm_dev.bdev->bd_disk) < 0) { - DMWARN("%s: integrity not set: %s and %s mismatch", - dm_device_name(t->md), - prev->dm_dev.bdev->bd_disk->disk_name, - dd->dm_dev.bdev->bd_disk->disk_name); - goto no_integrity; - } - prev = dd; - } - - if (!prev || !bdev_get_integrity(prev->dm_dev.bdev)) - goto no_integrity; - - blk_integrity_register(dm_disk(t->md), - bdev_get_integrity(prev->dm_dev.bdev)); - - return; - -no_integrity: - blk_integrity_register(dm_disk(t->md), NULL); - - return; -} - void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q) { /* @@ -925,7 +899,6 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q) else queue_flag_set_unlocked(QUEUE_FLAG_CLUSTER, q); - dm_table_set_integrity(t); } unsigned int dm_table_get_num_targets(struct dm_table *t) @@ -1046,6 +1019,12 @@ struct mapped_device *dm_table_get_md(struct dm_table *t) return t->md; } +int dm_table_barrier_ok(struct dm_table *t) +{ + return t->barriers_supported; +} +EXPORT_SYMBOL(dm_table_barrier_ok); + EXPORT_SYMBOL(dm_vcalloc); EXPORT_SYMBOL(dm_get_device); EXPORT_SYMBOL(dm_put_device); diff --git a/trunk/drivers/md/dm.c b/trunk/drivers/md/dm.c index 8a994be035ba..788ba96a6256 100644 --- a/trunk/drivers/md/dm.c +++ b/trunk/drivers/md/dm.c @@ -89,13 +89,12 @@ union map_info *dm_get_mapinfo(struct bio *bio) /* * Bits for the md->flags field. */ -#define DMF_BLOCK_IO_FOR_SUSPEND 0 +#define DMF_BLOCK_IO 0 #define DMF_SUSPENDED 1 #define DMF_FROZEN 2 #define DMF_FREEING 3 #define DMF_DELETING 4 #define DMF_NOFLUSH_SUSPENDING 5 -#define DMF_QUEUE_IO_TO_THREAD 6 /* * Work processed by per-device workqueue. @@ -124,11 +123,6 @@ struct mapped_device { struct bio_list deferred; spinlock_t deferred_lock; - /* - * An error from the barrier request currently being processed. - */ - int barrier_error; - /* * Processing queue (flush/barriers) */ @@ -430,10 +424,6 @@ static void end_io_acct(struct dm_io *io) part_stat_add(cpu, &dm_disk(md)->part0, ticks[rw], duration); part_stat_unlock(); - /* - * After this is decremented the bio must not be touched if it is - * a barrier. - */ dm_disk(md)->part0.in_flight = pending = atomic_dec_return(&md->pending); @@ -445,18 +435,21 @@ static void end_io_acct(struct dm_io *io) /* * Add the bio to the list of deferred io. */ -static void queue_io(struct mapped_device *md, struct bio *bio) +static int queue_io(struct mapped_device *md, struct bio *bio) { down_write(&md->io_lock); + if (!test_bit(DMF_BLOCK_IO, &md->flags)) { + up_write(&md->io_lock); + return 1; + } + spin_lock_irq(&md->deferred_lock); bio_list_add(&md->deferred, bio); spin_unlock_irq(&md->deferred_lock); - if (!test_and_set_bit(DMF_QUEUE_IO_TO_THREAD, &md->flags)) - queue_work(md->wq, &md->work); - up_write(&md->io_lock); + return 0; /* deferred successfully */ } /* @@ -540,35 +533,25 @@ static void dec_pending(struct dm_io *io, int error) */ spin_lock_irqsave(&md->deferred_lock, flags); if (__noflush_suspending(md)) - bio_list_add_head(&md->deferred, io->bio); + bio_list_add(&md->deferred, io->bio); else /* noflush suspend was interrupted. */ io->error = -EIO; spin_unlock_irqrestore(&md->deferred_lock, flags); } + end_io_acct(io); + io_error = io->error; bio = io->bio; - if (bio_barrier(bio)) { - /* - * There can be just one barrier request so we use - * a per-device variable for error reporting. - * Note that you can't touch the bio after end_io_acct - */ - md->barrier_error = io_error; - end_io_acct(io); - } else { - end_io_acct(io); + free_io(md, io); - if (io_error != DM_ENDIO_REQUEUE) { - trace_block_bio_complete(md->queue, bio); + if (io_error != DM_ENDIO_REQUEUE) { + trace_block_bio_complete(md->queue, bio); - bio_endio(bio, io_error); - } + bio_endio(bio, io_error); } - - free_io(md, io); } } @@ -710,19 +693,13 @@ static struct bio *split_bvec(struct bio *bio, sector_t sector, clone->bi_sector = sector; clone->bi_bdev = bio->bi_bdev; - clone->bi_rw = bio->bi_rw & ~(1 << BIO_RW_BARRIER); + clone->bi_rw = bio->bi_rw; clone->bi_vcnt = 1; clone->bi_size = to_bytes(len); clone->bi_io_vec->bv_offset = offset; clone->bi_io_vec->bv_len = clone->bi_size; clone->bi_flags |= 1 << BIO_CLONED; - if (bio_integrity(bio)) { - bio_integrity_clone(clone, bio, GFP_NOIO); - bio_integrity_trim(clone, - bio_sector_offset(bio, idx, offset), len); - } - return clone; } @@ -737,7 +714,6 @@ static struct bio *clone_bio(struct bio *bio, sector_t sector, clone = bio_alloc_bioset(GFP_NOIO, bio->bi_max_vecs, bs); __bio_clone(clone, bio); - clone->bi_rw &= ~(1 << BIO_RW_BARRIER); clone->bi_destructor = dm_bio_destructor; clone->bi_sector = sector; clone->bi_idx = idx; @@ -745,14 +721,6 @@ static struct bio *clone_bio(struct bio *bio, sector_t sector, clone->bi_size = to_bytes(len); clone->bi_flags &= ~(1 << BIO_SEG_VALID); - if (bio_integrity(bio)) { - bio_integrity_clone(clone, bio, GFP_NOIO); - - if (idx != bio->bi_idx || clone->bi_size < bio->bi_size) - bio_integrity_trim(clone, - bio_sector_offset(bio, idx, 0), len); - } - return clone; } @@ -866,13 +834,14 @@ static void __split_and_process_bio(struct mapped_device *md, struct bio *bio) ci.map = dm_get_table(md); if (unlikely(!ci.map)) { - if (!bio_barrier(bio)) - bio_io_error(bio); - else - md->barrier_error = -EIO; + bio_io_error(bio); + return; + } + if (unlikely(bio_barrier(bio) && !dm_table_barrier_ok(ci.map))) { + dm_table_put(ci.map); + bio_endio(bio, -EOPNOTSUPP); return; } - ci.md = md; ci.bio = bio; ci.io = alloc_io(md); @@ -949,6 +918,7 @@ static int dm_merge_bvec(struct request_queue *q, */ static int dm_request(struct request_queue *q, struct bio *bio) { + int r = -EIO; int rw = bio_data_dir(bio); struct mapped_device *md = q->queuedata; int cpu; @@ -961,27 +931,34 @@ static int dm_request(struct request_queue *q, struct bio *bio) part_stat_unlock(); /* - * If we're suspended or the thread is processing barriers - * we have to queue this io for later. + * If we're suspended we have to queue + * this io for later. */ - if (unlikely(test_bit(DMF_QUEUE_IO_TO_THREAD, &md->flags)) || - unlikely(bio_barrier(bio))) { + while (test_bit(DMF_BLOCK_IO, &md->flags)) { up_read(&md->io_lock); - if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) && - bio_rw(bio) == READA) { - bio_io_error(bio); - return 0; - } + if (bio_rw(bio) != READA) + r = queue_io(md, bio); - queue_io(md, bio); + if (r <= 0) + goto out_req; - return 0; + /* + * We're in a while loop, because someone could suspend + * before we get to the following read lock. + */ + down_read(&md->io_lock); } __split_and_process_bio(md, bio); up_read(&md->io_lock); return 0; + +out_req: + if (r < 0) + bio_io_error(bio); + + return 0; } static void dm_unplug_all(struct request_queue *q) @@ -1001,7 +978,7 @@ static int dm_any_congested(void *congested_data, int bdi_bits) struct mapped_device *md = congested_data; struct dm_table *map; - if (!test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) { + if (!test_bit(DMF_BLOCK_IO, &md->flags)) { map = dm_get_table(md); if (map) { r = dm_table_any_congested(map, bdi_bits); @@ -1216,7 +1193,6 @@ static void free_dev(struct mapped_device *md) mempool_destroy(md->tio_pool); mempool_destroy(md->io_pool); bioset_free(md->bs); - blk_integrity_unregister(md->disk); del_gendisk(md->disk); free_minor(minor); @@ -1430,36 +1406,6 @@ static int dm_wait_for_completion(struct mapped_device *md, int interruptible) return r; } -static int dm_flush(struct mapped_device *md) -{ - dm_wait_for_completion(md, TASK_UNINTERRUPTIBLE); - return 0; -} - -static void process_barrier(struct mapped_device *md, struct bio *bio) -{ - int error = dm_flush(md); - - if (unlikely(error)) { - bio_endio(bio, error); - return; - } - if (bio_empty_barrier(bio)) { - bio_endio(bio, 0); - return; - } - - __split_and_process_bio(md, bio); - - error = dm_flush(md); - - if (!error && md->barrier_error) - error = md->barrier_error; - - if (md->barrier_error != DM_ENDIO_REQUEUE) - bio_endio(bio, error); -} - /* * Process the deferred bios */ @@ -1471,34 +1417,25 @@ static void dm_wq_work(struct work_struct *work) down_write(&md->io_lock); - while (!test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) { - spin_lock_irq(&md->deferred_lock); - c = bio_list_pop(&md->deferred); - spin_unlock_irq(&md->deferred_lock); - - if (!c) { - clear_bit(DMF_QUEUE_IO_TO_THREAD, &md->flags); - break; - } - - up_write(&md->io_lock); - - if (bio_barrier(c)) - process_barrier(md, c); - else - __split_and_process_bio(md, c); +next_bio: + spin_lock_irq(&md->deferred_lock); + c = bio_list_pop(&md->deferred); + spin_unlock_irq(&md->deferred_lock); - down_write(&md->io_lock); + if (c) { + __split_and_process_bio(md, c); + goto next_bio; } + clear_bit(DMF_BLOCK_IO, &md->flags); + up_write(&md->io_lock); } static void dm_queue_flush(struct mapped_device *md) { - clear_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags); - smp_mb__after_clear_bit(); queue_work(md->wq, &md->work); + flush_workqueue(md->wq); } /* @@ -1616,36 +1553,20 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags) } /* - * Here we must make sure that no processes are submitting requests - * to target drivers i.e. no one may be executing - * __split_and_process_bio. This is called from dm_request and - * dm_wq_work. - * - * To get all processes out of __split_and_process_bio in dm_request, - * we take the write lock. To prevent any process from reentering - * __split_and_process_bio from dm_request, we set - * DMF_QUEUE_IO_TO_THREAD. - * - * To quiesce the thread (dm_wq_work), we set DMF_BLOCK_IO_FOR_SUSPEND - * and call flush_workqueue(md->wq). flush_workqueue will wait until - * dm_wq_work exits and DMF_BLOCK_IO_FOR_SUSPEND will prevent any - * further calls to __split_and_process_bio from dm_wq_work. + * First we set the BLOCK_IO flag so no more ios will be mapped. */ down_write(&md->io_lock); - set_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags); - set_bit(DMF_QUEUE_IO_TO_THREAD, &md->flags); - up_write(&md->io_lock); + set_bit(DMF_BLOCK_IO, &md->flags); - flush_workqueue(md->wq); + up_write(&md->io_lock); /* - * At this point no more requests are entering target request routines. - * We call dm_wait_for_completion to wait for all existing requests - * to finish. + * Wait for the already-mapped ios to complete. */ r = dm_wait_for_completion(md, TASK_INTERRUPTIBLE); down_write(&md->io_lock); + if (noflush) clear_bit(DMF_NOFLUSH_SUSPENDING, &md->flags); up_write(&md->io_lock); @@ -1658,12 +1579,6 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags) goto out; /* pushback list is already flushed, so skip flush */ } - /* - * If dm_wait_for_completion returned 0, the device is completely - * quiescent now. There is no request-processing activity. All new - * requests are being added to md->deferred list. - */ - dm_table_postsuspend_targets(map); set_bit(DMF_SUSPENDED, &md->flags); diff --git a/trunk/drivers/md/dm.h b/trunk/drivers/md/dm.h index a31506d93e91..b48397c0abbd 100644 --- a/trunk/drivers/md/dm.h +++ b/trunk/drivers/md/dm.h @@ -52,6 +52,7 @@ int dm_table_any_congested(struct dm_table *t, int bdi_bits); * To check the return value from dm_table_find_target(). */ #define dm_target_is_valid(t) ((t)->table) +int dm_table_barrier_ok(struct dm_table *t); /*----------------------------------------------------------------- * A registry of target types. diff --git a/trunk/drivers/media/dvb/ttpci/Kconfig b/trunk/drivers/media/dvb/ttpci/Kconfig index 68eb4493f991..772990415f99 100644 --- a/trunk/drivers/media/dvb/ttpci/Kconfig +++ b/trunk/drivers/media/dvb/ttpci/Kconfig @@ -28,13 +28,26 @@ config DVB_AV7110 download/extract it, and then copy it to /usr/lib/hotplug/firmware or /lib/firmware (depending on configuration of firmware hotplug). - Alternatively, you can download the file and use the kernel's - EXTRA_FIRMWARE configuration option to build it into your - kernel image by adding the filename to the EXTRA_FIRMWARE - configuration option string. - Say Y if you own such a card and want to use it. +config DVB_AV7110_FIRMWARE + bool "Compile AV7110 firmware into the driver" + depends on DVB_AV7110 && !STANDALONE + default y if DVB_AV7110=y + help + The AV7110 firmware is normally loaded by the firmware hotplug manager. + If you want to compile the firmware into the driver you need to say + Y here and provide the correct path of the firmware. You need this + option if you want to compile the whole driver statically into the + kernel. + + All other people say N. + +config DVB_AV7110_FIRMWARE_FILE + string "Full pathname of av7110 firmware file" + depends on DVB_AV7110_FIRMWARE + default "/usr/lib/hotplug/firmware/dvb-ttpci-01.fw" + config DVB_AV7110_OSD bool "AV7110 OSD support" depends on DVB_AV7110 diff --git a/trunk/drivers/media/dvb/ttpci/Makefile b/trunk/drivers/media/dvb/ttpci/Makefile index 8a4d5bb20a5b..71451237294c 100644 --- a/trunk/drivers/media/dvb/ttpci/Makefile +++ b/trunk/drivers/media/dvb/ttpci/Makefile @@ -19,3 +19,12 @@ obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core/ -Idrivers/media/dvb/frontends/ EXTRA_CFLAGS += -Idrivers/media/common/tuners + +hostprogs-y := fdump + +ifeq ($(CONFIG_DVB_AV7110_FIRMWARE),y) +$(obj)/av7110.o: $(obj)/av7110_firm.h + +$(obj)/av7110_firm.h: $(obj)/fdump + $(obj)/fdump $(CONFIG_DVB_AV7110_FIRMWARE_FILE) dvb_ttpci_fw $@ +endif diff --git a/trunk/drivers/media/dvb/ttpci/av7110.c b/trunk/drivers/media/dvb/ttpci/av7110.c index d1d959ed37b7..4624cee93e74 100644 --- a/trunk/drivers/media/dvb/ttpci/av7110.c +++ b/trunk/drivers/media/dvb/ttpci/av7110.c @@ -1518,6 +1518,20 @@ static int check_firmware(struct av7110* av7110) return 0; } +#ifdef CONFIG_DVB_AV7110_FIRMWARE_FILE +#include "av7110_firm.h" +static void put_firmware(struct av7110* av7110) +{ + av7110->bin_fw = NULL; +} + +static inline int get_firmware(struct av7110* av7110) +{ + av7110->bin_fw = dvb_ttpci_fw; + av7110->size_fw = sizeof(dvb_ttpci_fw); + return check_firmware(av7110); +} +#else static void put_firmware(struct av7110* av7110) { vfree(av7110->bin_fw); @@ -1566,6 +1580,8 @@ static int get_firmware(struct av7110* av7110) release_firmware(fw); return ret; } +#endif + static int alps_bsrv2_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters *params) { diff --git a/trunk/drivers/media/dvb/ttpci/av7110_hw.c b/trunk/drivers/media/dvb/ttpci/av7110_hw.c index 5e3f88911a1d..3a3f5279e927 100644 --- a/trunk/drivers/media/dvb/ttpci/av7110_hw.c +++ b/trunk/drivers/media/dvb/ttpci/av7110_hw.c @@ -198,10 +198,29 @@ static int load_dram(struct av7110 *av7110, u32 *data, int len) /* we cannot write av7110 DRAM directly, so load a bootloader into * the DPRAM which implements a simple boot protocol */ +static u8 bootcode[] = { + 0xea, 0x00, 0x00, 0x0e, 0xe1, 0xb0, 0xf0, 0x0e, 0xe2, 0x5e, 0xf0, 0x04, + 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x08, 0xe2, 0x5e, 0xf0, 0x04, + 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, 0x2c, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x34, + 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0x5a, 0x5a, 0x00, 0x1f, 0x15, 0x55, + 0x00, 0x00, 0x00, 0x09, 0xe5, 0x9f, 0xd0, 0x7c, 0xe5, 0x9f, 0x40, 0x74, + 0xe3, 0xa0, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x04, + 0xe5, 0x9f, 0x10, 0x70, 0xe5, 0x9f, 0x20, 0x70, 0xe5, 0x9f, 0x30, 0x64, + 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, 0xe1, 0x51, 0x00, 0x02, + 0xda, 0xff, 0xff, 0xfb, 0xe5, 0x9f, 0xf0, 0x50, 0xe1, 0xd4, 0x10, 0xb0, + 0xe3, 0x51, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xfc, 0xe1, 0xa0, 0x10, 0x0d, + 0xe5, 0x94, 0x30, 0x04, 0xe1, 0xd4, 0x20, 0xb2, 0xe2, 0x82, 0x20, 0x3f, + 0xe1, 0xb0, 0x23, 0x22, 0x03, 0xa0, 0x00, 0x02, 0xe1, 0xc4, 0x00, 0xb0, + 0x0a, 0xff, 0xff, 0xf4, 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, + 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, 0xe2, 0x52, 0x20, 0x01, + 0x1a, 0xff, 0xff, 0xf9, 0xe2, 0x2d, 0xdb, 0x05, 0xea, 0xff, 0xff, 0xec, + 0x2c, 0x00, 0x03, 0xf8, 0x2c, 0x00, 0x04, 0x00, 0x9e, 0x00, 0x08, 0x00, + 0x2c, 0x00, 0x00, 0x74, 0x2c, 0x00, 0x00, 0xc0 +}; + int av7110_bootarm(struct av7110 *av7110) { - const struct firmware *fw; - const char *fw_name = "av7110/bootcode.bin"; struct saa7146_dev *dev = av7110->dev; u32 ret; int i; @@ -242,15 +261,7 @@ int av7110_bootarm(struct av7110 *av7110) //saa7146_setgpio(dev, DEBI_DONE_LINE, SAA7146_GPIO_INPUT); //saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT); - ret = request_firmware(&fw, fw_name, &dev->pci->dev); - if (ret) { - printk(KERN_ERR "dvb-ttpci: Failed to load firmware \"%s\"\n", - fw_name); - return ret; - } - - mwdebi(av7110, DEBISWAB, DPRAM_BASE, fw->data, fw->size); - release_firmware(fw); + mwdebi(av7110, DEBISWAB, DPRAM_BASE, bootcode, sizeof(bootcode)); iwdebi(av7110, DEBINOSWAP, AV7110_BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); if (saa7146_wait_for_debi_done(av7110->dev, 1)) { @@ -291,7 +302,7 @@ int av7110_bootarm(struct av7110 *av7110) av7110->arm_ready = 1; return 0; } -MODULE_FIRMWARE("av7110/bootcode.bin"); + /**************************************************************************** * DEBI command polling diff --git a/trunk/drivers/media/dvb/ttpci/av7110_hw.h b/trunk/drivers/media/dvb/ttpci/av7110_hw.h index 1634aba5cb84..ca99e5c1fc8a 100644 --- a/trunk/drivers/media/dvb/ttpci/av7110_hw.h +++ b/trunk/drivers/media/dvb/ttpci/av7110_hw.h @@ -390,8 +390,7 @@ static inline void iwdebi(struct av7110 *av7110, u32 config, int addr, u32 val, } /* buffer writes */ -static inline void mwdebi(struct av7110 *av7110, u32 config, int addr, - const u8 *val, int count) +static inline void mwdebi(struct av7110 *av7110, u32 config, int addr, u8 *val, int count) { memcpy(av7110->debi_virt, val, count); av7110_debiwrite(av7110, config, addr, 0, count); diff --git a/trunk/drivers/media/dvb/ttpci/fdump.c b/trunk/drivers/media/dvb/ttpci/fdump.c new file mode 100644 index 000000000000..c90001d35e7d --- /dev/null +++ b/trunk/drivers/media/dvb/ttpci/fdump.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + unsigned char buf[8]; + unsigned int i, count, bytes = 0; + FILE *fd_in, *fd_out; + + if (argc != 4) { + fprintf(stderr, "\n\tusage: %s \n\n", argv[0]); + return -1; + } + + fd_in = fopen(argv[1], "rb"); + if (fd_in == NULL) { + fprintf(stderr, "firmware file '%s' not found\n", argv[1]); + return -1; + } + + fd_out = fopen(argv[3], "w+"); + if (fd_out == NULL) { + fprintf(stderr, "cannot create output file '%s'\n", argv[3]); + return -1; + } + + fprintf(fd_out, "\n#include \n\nu8 %s [] = {", argv[2]); + + while ((count = fread(buf, 1, 8, fd_in)) > 0) { + fprintf(fd_out, "\n\t"); + for (i = 0; i < count; i++, bytes++) + fprintf(fd_out, "0x%02x, ", buf[i]); + } + + fprintf(fd_out, "\n};\n\n"); + + fclose(fd_in); + fclose(fd_out); + + return 0; +} diff --git a/trunk/drivers/misc/eeprom/at24.c b/trunk/drivers/misc/eeprom/at24.c index db39f4a52f53..d184dfab9631 100644 --- a/trunk/drivers/misc/eeprom/at24.c +++ b/trunk/drivers/misc/eeprom/at24.c @@ -278,7 +278,7 @@ static ssize_t at24_bin_read(struct kobject *kobj, struct bin_attribute *attr, * We only use page mode writes; the alternative is sloooow. This routine * writes at most one page. */ -static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf, +static ssize_t at24_eeprom_write(struct at24_data *at24, char *buf, unsigned offset, size_t count) { struct i2c_client *client; @@ -347,8 +347,8 @@ static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf, return -ETIMEDOUT; } -static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off, - size_t count) +static ssize_t at24_write(struct at24_data *at24, + char *buf, loff_t off, size_t count) { ssize_t retval = 0; @@ -406,7 +406,7 @@ static ssize_t at24_macc_read(struct memory_accessor *macc, char *buf, return at24_read(at24, buf, offset, count); } -static ssize_t at24_macc_write(struct memory_accessor *macc, const char *buf, +static ssize_t at24_macc_write(struct memory_accessor *macc, char *buf, off_t offset, size_t count) { struct at24_data *at24 = container_of(macc, struct at24_data, macc); diff --git a/trunk/drivers/misc/eeprom/at25.c b/trunk/drivers/misc/eeprom/at25.c index b34cb5f79eea..6bc0dac5c1e8 100644 --- a/trunk/drivers/misc/eeprom/at25.c +++ b/trunk/drivers/misc/eeprom/at25.c @@ -140,8 +140,7 @@ at25_bin_read(struct kobject *kobj, struct bin_attribute *bin_attr, static ssize_t -at25_ee_write(struct at25_data *at25, const char *buf, loff_t off, - size_t count) +at25_ee_write(struct at25_data *at25, char *buf, loff_t off, size_t count) { ssize_t status = 0; unsigned written = 0; @@ -277,7 +276,7 @@ static ssize_t at25_mem_read(struct memory_accessor *mem, char *buf, return at25_ee_read(at25, buf, offset, count); } -static ssize_t at25_mem_write(struct memory_accessor *mem, const char *buf, +static ssize_t at25_mem_write(struct memory_accessor *mem, char *buf, off_t offset, size_t count) { struct at25_data *at25 = container_of(mem, struct at25_data, mem); diff --git a/trunk/drivers/misc/sgi-xp/xpc.h b/trunk/drivers/misc/sgi-xp/xpc.h index b94d5f767703..114444cfd496 100644 --- a/trunk/drivers/misc/sgi-xp/xpc.h +++ b/trunk/drivers/misc/sgi-xp/xpc.h @@ -90,21 +90,18 @@ struct xpc_rsvd_page { short max_npartitions; /* value of XPC_MAX_PARTITIONS */ u8 version; u8 pad1[3]; /* align to next u64 in 1st 64-byte cacheline */ - unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ union { - struct { - unsigned long vars_pa; /* phys addr */ - } sn2; - struct { - unsigned long heartbeat_gpa; /* phys addr */ - unsigned long activate_gru_mq_desc_gpa; /* phys addr */ - } uv; + unsigned long vars_pa; /* phys address of struct xpc_vars */ + unsigned long activate_gru_mq_desc_gpa; /* phys addr of */ + /* activate mq's */ + /* gru mq descriptor */ } sn; - u64 pad2[9]; /* align to last u64 in 2nd 64-byte cacheline */ + unsigned long ts_jiffies; /* timestamp when rsvd pg was setup by XPC */ + u64 pad2[10]; /* align to last u64 in 2nd 64-byte cacheline */ u64 SAL_nasids_size; /* SAL: size of each nasid mask in bytes */ }; -#define XPC_RP_VERSION _XPC_VERSION(3, 0) /* version 3.0 of the reserved page */ +#define XPC_RP_VERSION _XPC_VERSION(2, 0) /* version 2.0 of the reserved page */ /* * Define the structures by which XPC variables can be exported to other @@ -185,17 +182,6 @@ struct xpc_vars_part_sn2 { (XPC_RP_MACH_NASIDS(_rp) + \ xpc_nasid_mask_nlongs)) - -/* - * The following structure describes the partition's heartbeat info which - * will be periodically read by other partitions to determine whether this - * XPC is still 'alive'. - */ -struct xpc_heartbeat_uv { - unsigned long value; - unsigned long offline; /* if 0, heartbeat should be changing */ -}; - /* * Info pertinent to a GRU message queue using a watch list for irq generation. */ @@ -212,7 +198,7 @@ struct xpc_gru_mq_uv { /* * The activate_mq is used to send/receive GRU messages that affect XPC's - * partition active state and channel state. This is uv only. + * heartbeat, partition active state, and channel state. This is UV only. */ struct xpc_activate_mq_msghdr_uv { unsigned int gru_msg_hdr; /* FOR GRU INTERNAL USE ONLY */ @@ -224,27 +210,33 @@ struct xpc_activate_mq_msghdr_uv { /* activate_mq defined message types */ #define XPC_ACTIVATE_MQ_MSG_SYNC_ACT_STATE_UV 0 +#define XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV 1 +#define XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV 2 +#define XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV 3 -#define XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV 1 -#define XPC_ACTIVATE_MQ_MSG_DEACTIVATE_REQ_UV 2 +#define XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV 4 +#define XPC_ACTIVATE_MQ_MSG_DEACTIVATE_REQ_UV 5 -#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV 3 -#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV 4 -#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV 5 -#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV 6 -#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV 7 +#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREQUEST_UV 6 +#define XPC_ACTIVATE_MQ_MSG_CHCTL_CLOSEREPLY_UV 7 +#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREQUEST_UV 8 +#define XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV 9 -#define XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV 8 -#define XPC_ACTIVATE_MQ_MSG_MARK_DISENGAGED_UV 9 +#define XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV 10 +#define XPC_ACTIVATE_MQ_MSG_MARK_DISENGAGED_UV 11 struct xpc_activate_mq_msg_uv { struct xpc_activate_mq_msghdr_uv hdr; }; +struct xpc_activate_mq_msg_heartbeat_req_uv { + struct xpc_activate_mq_msghdr_uv hdr; + u64 heartbeat; +}; + struct xpc_activate_mq_msg_activate_req_uv { struct xpc_activate_mq_msghdr_uv hdr; unsigned long rp_gpa; - unsigned long heartbeat_gpa; unsigned long activate_gru_mq_desc_gpa; }; @@ -279,11 +271,6 @@ struct xpc_activate_mq_msg_chctl_openreply_uv { unsigned long notify_gru_mq_desc_gpa; }; -struct xpc_activate_mq_msg_chctl_opencomplete_uv { - struct xpc_activate_mq_msghdr_uv hdr; - short ch_number; -}; - /* * Functions registered by add_timer() or called by kernel_thread() only * allow for a single 64-bit argument. The following macros can be used to @@ -589,32 +576,30 @@ struct xpc_channel { #define XPC_C_WASCONNECTED 0x00000001 /* channel was connected */ -#define XPC_C_ROPENCOMPLETE 0x00000002 /* remote open channel complete */ -#define XPC_C_OPENCOMPLETE 0x00000004 /* local open channel complete */ -#define XPC_C_ROPENREPLY 0x00000008 /* remote open channel reply */ -#define XPC_C_OPENREPLY 0x00000010 /* local open channel reply */ -#define XPC_C_ROPENREQUEST 0x00000020 /* remote open channel request */ -#define XPC_C_OPENREQUEST 0x00000040 /* local open channel request */ +#define XPC_C_ROPENREPLY 0x00000002 /* remote open channel reply */ +#define XPC_C_OPENREPLY 0x00000004 /* local open channel reply */ +#define XPC_C_ROPENREQUEST 0x00000008 /* remote open channel request */ +#define XPC_C_OPENREQUEST 0x00000010 /* local open channel request */ -#define XPC_C_SETUP 0x00000080 /* channel's msgqueues are alloc'd */ -#define XPC_C_CONNECTEDCALLOUT 0x00000100 /* connected callout initiated */ +#define XPC_C_SETUP 0x00000020 /* channel's msgqueues are alloc'd */ +#define XPC_C_CONNECTEDCALLOUT 0x00000040 /* connected callout initiated */ #define XPC_C_CONNECTEDCALLOUT_MADE \ - 0x00000200 /* connected callout completed */ -#define XPC_C_CONNECTED 0x00000400 /* local channel is connected */ -#define XPC_C_CONNECTING 0x00000800 /* channel is being connected */ + 0x00000080 /* connected callout completed */ +#define XPC_C_CONNECTED 0x00000100 /* local channel is connected */ +#define XPC_C_CONNECTING 0x00000200 /* channel is being connected */ -#define XPC_C_RCLOSEREPLY 0x00001000 /* remote close channel reply */ -#define XPC_C_CLOSEREPLY 0x00002000 /* local close channel reply */ -#define XPC_C_RCLOSEREQUEST 0x00004000 /* remote close channel request */ -#define XPC_C_CLOSEREQUEST 0x00008000 /* local close channel request */ +#define XPC_C_RCLOSEREPLY 0x00000400 /* remote close channel reply */ +#define XPC_C_CLOSEREPLY 0x00000800 /* local close channel reply */ +#define XPC_C_RCLOSEREQUEST 0x00001000 /* remote close channel request */ +#define XPC_C_CLOSEREQUEST 0x00002000 /* local close channel request */ -#define XPC_C_DISCONNECTED 0x00010000 /* channel is disconnected */ -#define XPC_C_DISCONNECTING 0x00020000 /* channel is being disconnected */ +#define XPC_C_DISCONNECTED 0x00004000 /* channel is disconnected */ +#define XPC_C_DISCONNECTING 0x00008000 /* channel is being disconnected */ #define XPC_C_DISCONNECTINGCALLOUT \ - 0x00040000 /* disconnecting callout initiated */ + 0x00010000 /* disconnecting callout initiated */ #define XPC_C_DISCONNECTINGCALLOUT_MADE \ - 0x00080000 /* disconnecting callout completed */ -#define XPC_C_WDISCONNECT 0x00100000 /* waiting for channel disconnect */ + 0x00020000 /* disconnecting callout completed */ +#define XPC_C_WDISCONNECT 0x00040000 /* waiting for channel disconnect */ /* * The channel control flags (chctl) union consists of a 64-bit variable which @@ -633,13 +618,11 @@ union xpc_channel_ctl_flags { #define XPC_CHCTL_CLOSEREPLY 0x02 #define XPC_CHCTL_OPENREQUEST 0x04 #define XPC_CHCTL_OPENREPLY 0x08 -#define XPC_CHCTL_OPENCOMPLETE 0x10 -#define XPC_CHCTL_MSGREQUEST 0x20 +#define XPC_CHCTL_MSGREQUEST 0x10 #define XPC_OPENCLOSE_CHCTL_FLAGS \ (XPC_CHCTL_CLOSEREQUEST | XPC_CHCTL_CLOSEREPLY | \ - XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY | \ - XPC_CHCTL_OPENCOMPLETE) + XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY) #define XPC_MSG_CHCTL_FLAGS XPC_CHCTL_MSGREQUEST static inline int @@ -704,9 +687,6 @@ struct xpc_partition_sn2 { }; struct xpc_partition_uv { - unsigned long heartbeat_gpa; /* phys addr of partition's heartbeat */ - struct xpc_heartbeat_uv cached_heartbeat; /* cached copy of */ - /* partition's heartbeat */ unsigned long activate_gru_mq_desc_gpa; /* phys addr of parititon's */ /* activate mq's gru mq */ /* descriptor */ @@ -718,12 +698,14 @@ struct xpc_partition_uv { u8 remote_act_state; /* remote partition's act_state */ u8 act_state_req; /* act_state request from remote partition */ enum xp_retval reason; /* reason for deactivate act_state request */ + u64 heartbeat; /* incremented by remote partition */ }; /* struct xpc_partition_uv flags */ -#define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000001 +#define XPC_P_HEARTBEAT_OFFLINE_UV 0x00000001 #define XPC_P_ENGAGED_UV 0x00000002 +#define XPC_P_CACHED_ACTIVATE_GRU_MQ_DESC_UV 0x00000004 /* struct xpc_partition_uv act_state change requests */ @@ -780,62 +762,6 @@ struct xpc_partition { } ____cacheline_aligned; -struct xpc_arch_operations { - int (*setup_partitions) (void); - void (*teardown_partitions) (void); - void (*process_activate_IRQ_rcvd) (void); - enum xp_retval (*get_partition_rsvd_page_pa) - (void *, u64 *, unsigned long *, size_t *); - int (*setup_rsvd_page) (struct xpc_rsvd_page *); - - void (*allow_hb) (short); - void (*disallow_hb) (short); - void (*disallow_all_hbs) (void); - void (*increment_heartbeat) (void); - void (*offline_heartbeat) (void); - void (*online_heartbeat) (void); - void (*heartbeat_init) (void); - void (*heartbeat_exit) (void); - enum xp_retval (*get_remote_heartbeat) (struct xpc_partition *); - - void (*request_partition_activation) (struct xpc_rsvd_page *, - unsigned long, int); - void (*request_partition_reactivation) (struct xpc_partition *); - void (*request_partition_deactivation) (struct xpc_partition *); - void (*cancel_partition_deactivation_request) (struct xpc_partition *); - enum xp_retval (*setup_ch_structures) (struct xpc_partition *); - void (*teardown_ch_structures) (struct xpc_partition *); - - enum xp_retval (*make_first_contact) (struct xpc_partition *); - - u64 (*get_chctl_all_flags) (struct xpc_partition *); - void (*send_chctl_closerequest) (struct xpc_channel *, unsigned long *); - void (*send_chctl_closereply) (struct xpc_channel *, unsigned long *); - void (*send_chctl_openrequest) (struct xpc_channel *, unsigned long *); - void (*send_chctl_openreply) (struct xpc_channel *, unsigned long *); - void (*send_chctl_opencomplete) (struct xpc_channel *, unsigned long *); - void (*process_msg_chctl_flags) (struct xpc_partition *, int); - - enum xp_retval (*save_remote_msgqueue_pa) (struct xpc_channel *, - unsigned long); - - enum xp_retval (*setup_msg_structures) (struct xpc_channel *); - void (*teardown_msg_structures) (struct xpc_channel *); - - void (*indicate_partition_engaged) (struct xpc_partition *); - void (*indicate_partition_disengaged) (struct xpc_partition *); - void (*assume_partition_disengaged) (short); - int (*partition_engaged) (short); - int (*any_partition_engaged) (void); - - int (*n_of_deliverable_payloads) (struct xpc_channel *); - enum xp_retval (*send_payload) (struct xpc_channel *, u32, void *, - u16, u8, xpc_notify_func, void *); - void *(*get_deliverable_payload) (struct xpc_channel *); - void (*received_payload) (struct xpc_channel *, void *); - void (*notify_senders_of_disconnect) (struct xpc_channel *); -}; - /* struct xpc_partition act_state values (for XPC HB) */ #define XPC_P_AS_INACTIVE 0x00 /* partition is not active */ @@ -876,17 +802,67 @@ extern struct xpc_registration xpc_registrations[]; /* found in xpc_main.c */ extern struct device *xpc_part; extern struct device *xpc_chan; -extern struct xpc_arch_operations xpc_arch_ops; extern int xpc_disengage_timelimit; extern int xpc_disengage_timedout; extern int xpc_activate_IRQ_rcvd; extern spinlock_t xpc_activate_IRQ_rcvd_lock; extern wait_queue_head_t xpc_activate_IRQ_wq; +extern void *xpc_heartbeating_to_mask; extern void *xpc_kzalloc_cacheline_aligned(size_t, gfp_t, void **); extern void xpc_activate_partition(struct xpc_partition *); extern void xpc_activate_kthreads(struct xpc_channel *, int); extern void xpc_create_kthreads(struct xpc_channel *, int, int); extern void xpc_disconnect_wait(int); +extern int (*xpc_setup_partitions_sn) (void); +extern void (*xpc_teardown_partitions_sn) (void); +extern enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *, u64 *, + unsigned long *, + size_t *); +extern int (*xpc_setup_rsvd_page_sn) (struct xpc_rsvd_page *); +extern void (*xpc_heartbeat_init) (void); +extern void (*xpc_heartbeat_exit) (void); +extern void (*xpc_increment_heartbeat) (void); +extern void (*xpc_offline_heartbeat) (void); +extern void (*xpc_online_heartbeat) (void); +extern enum xp_retval (*xpc_get_remote_heartbeat) (struct xpc_partition *); +extern enum xp_retval (*xpc_make_first_contact) (struct xpc_partition *); +extern u64 (*xpc_get_chctl_all_flags) (struct xpc_partition *); +extern enum xp_retval (*xpc_setup_msg_structures) (struct xpc_channel *); +extern void (*xpc_teardown_msg_structures) (struct xpc_channel *); +extern void (*xpc_notify_senders_of_disconnect) (struct xpc_channel *); +extern void (*xpc_process_msg_chctl_flags) (struct xpc_partition *, int); +extern int (*xpc_n_of_deliverable_payloads) (struct xpc_channel *); +extern void *(*xpc_get_deliverable_payload) (struct xpc_channel *); +extern void (*xpc_request_partition_activation) (struct xpc_rsvd_page *, + unsigned long, int); +extern void (*xpc_request_partition_reactivation) (struct xpc_partition *); +extern void (*xpc_request_partition_deactivation) (struct xpc_partition *); +extern void (*xpc_cancel_partition_deactivation_request) ( + struct xpc_partition *); +extern void (*xpc_process_activate_IRQ_rcvd) (void); +extern enum xp_retval (*xpc_setup_ch_structures_sn) (struct xpc_partition *); +extern void (*xpc_teardown_ch_structures_sn) (struct xpc_partition *); + +extern void (*xpc_indicate_partition_engaged) (struct xpc_partition *); +extern int (*xpc_partition_engaged) (short); +extern int (*xpc_any_partition_engaged) (void); +extern void (*xpc_indicate_partition_disengaged) (struct xpc_partition *); +extern void (*xpc_assume_partition_disengaged) (short); + +extern void (*xpc_send_chctl_closerequest) (struct xpc_channel *, + unsigned long *); +extern void (*xpc_send_chctl_closereply) (struct xpc_channel *, + unsigned long *); +extern void (*xpc_send_chctl_openrequest) (struct xpc_channel *, + unsigned long *); +extern void (*xpc_send_chctl_openreply) (struct xpc_channel *, unsigned long *); + +extern enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *, + unsigned long); + +extern enum xp_retval (*xpc_send_payload) (struct xpc_channel *, u32, void *, + u16, u8, xpc_notify_func, void *); +extern void (*xpc_received_payload) (struct xpc_channel *, void *); /* found in xpc_sn2.c */ extern int xpc_init_sn2(void); @@ -933,6 +909,40 @@ extern void xpc_disconnect_channel(const int, struct xpc_channel *, extern void xpc_disconnect_callout(struct xpc_channel *, enum xp_retval); extern void xpc_partition_going_down(struct xpc_partition *, enum xp_retval); +static inline int +xpc_hb_allowed(short partid, void *heartbeating_to_mask) +{ + return test_bit(partid, heartbeating_to_mask); +} + +static inline int +xpc_any_hbs_allowed(void) +{ + DBUG_ON(xpc_heartbeating_to_mask == NULL); + return !bitmap_empty(xpc_heartbeating_to_mask, xp_max_npartitions); +} + +static inline void +xpc_allow_hb(short partid) +{ + DBUG_ON(xpc_heartbeating_to_mask == NULL); + set_bit(partid, xpc_heartbeating_to_mask); +} + +static inline void +xpc_disallow_hb(short partid) +{ + DBUG_ON(xpc_heartbeating_to_mask == NULL); + clear_bit(partid, xpc_heartbeating_to_mask); +} + +static inline void +xpc_disallow_all_hbs(void) +{ + DBUG_ON(xpc_heartbeating_to_mask == NULL); + bitmap_zero(xpc_heartbeating_to_mask, xp_max_npartitions); +} + static inline void xpc_wakeup_channel_mgr(struct xpc_partition *part) { diff --git a/trunk/drivers/misc/sgi-xp/xpc_channel.c b/trunk/drivers/misc/sgi-xp/xpc_channel.c index 652593fc486d..99a2534c38a1 100644 --- a/trunk/drivers/misc/sgi-xp/xpc_channel.c +++ b/trunk/drivers/misc/sgi-xp/xpc_channel.c @@ -3,7 +3,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved. */ /* @@ -39,38 +39,34 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags) if (!(ch->flags & XPC_C_SETUP)) { spin_unlock_irqrestore(&ch->lock, *irq_flags); - ret = xpc_arch_ops.setup_msg_structures(ch); + ret = xpc_setup_msg_structures(ch); spin_lock_irqsave(&ch->lock, *irq_flags); if (ret != xpSuccess) XPC_DISCONNECT_CHANNEL(ch, ret, irq_flags); - else - ch->flags |= XPC_C_SETUP; - if (ch->flags & XPC_C_DISCONNECTING) + ch->flags |= XPC_C_SETUP; + + if (ch->flags & (XPC_C_CONNECTED | XPC_C_DISCONNECTING)) return; } if (!(ch->flags & XPC_C_OPENREPLY)) { ch->flags |= XPC_C_OPENREPLY; - xpc_arch_ops.send_chctl_openreply(ch, irq_flags); + xpc_send_chctl_openreply(ch, irq_flags); } if (!(ch->flags & XPC_C_ROPENREPLY)) return; - if (!(ch->flags & XPC_C_OPENCOMPLETE)) { - ch->flags |= (XPC_C_OPENCOMPLETE | XPC_C_CONNECTED); - xpc_arch_ops.send_chctl_opencomplete(ch, irq_flags); - } - - if (!(ch->flags & XPC_C_ROPENCOMPLETE)) - return; + ch->flags = (XPC_C_CONNECTED | XPC_C_SETUP); /* clear all else */ dev_info(xpc_chan, "channel %d to partition %d connected\n", ch->number, ch->partid); - ch->flags = (XPC_C_CONNECTED | XPC_C_SETUP); /* clear all else */ + spin_unlock_irqrestore(&ch->lock, *irq_flags); + xpc_create_kthreads(ch, 1, 0); + spin_lock_irqsave(&ch->lock, *irq_flags); } /* @@ -100,7 +96,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) if (part->act_state == XPC_P_AS_DEACTIVATING) { /* can't proceed until the other side disengages from us */ - if (xpc_arch_ops.partition_engaged(ch->partid)) + if (xpc_partition_engaged(ch->partid)) return; } else { @@ -112,7 +108,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) if (!(ch->flags & XPC_C_CLOSEREPLY)) { ch->flags |= XPC_C_CLOSEREPLY; - xpc_arch_ops.send_chctl_closereply(ch, irq_flags); + xpc_send_chctl_closereply(ch, irq_flags); } if (!(ch->flags & XPC_C_RCLOSEREPLY)) @@ -122,7 +118,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) /* wake those waiting for notify completion */ if (atomic_read(&ch->n_to_notify) > 0) { /* we do callout while holding ch->lock, callout can't block */ - xpc_arch_ops.notify_senders_of_disconnect(ch); + xpc_notify_senders_of_disconnect(ch); } /* both sides are disconnected now */ @@ -136,7 +132,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) DBUG_ON(atomic_read(&ch->n_to_notify) != 0); /* it's now safe to free the channel's message queues */ - xpc_arch_ops.teardown_msg_structures(ch); + xpc_teardown_msg_structures(ch); ch->func = NULL; ch->key = NULL; @@ -148,9 +144,8 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags) /* * Mark the channel disconnected and clear all other flags, including - * XPC_C_SETUP (because of call to - * xpc_arch_ops.teardown_msg_structures()) but not including - * XPC_C_WDISCONNECT (if it was set). + * XPC_C_SETUP (because of call to xpc_teardown_msg_structures()) but + * not including XPC_C_WDISCONNECT (if it was set). */ ch->flags = (XPC_C_DISCONNECTED | (ch->flags & XPC_C_WDISCONNECT)); @@ -189,7 +184,6 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, struct xpc_channel *ch = &part->channels[ch_number]; enum xp_retval reason; enum xp_retval ret; - int create_kthread = 0; spin_lock_irqsave(&ch->lock, irq_flags); @@ -202,7 +196,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, * has had a chance to see that the channel is disconnected. */ ch->delayed_chctl_flags |= chctl_flags; - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } if (chctl_flags & XPC_CHCTL_CLOSEREQUEST) { @@ -244,7 +239,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, XPC_CHCTL_CLOSEREQUEST; spin_unlock(&part->chctl_lock); } - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } XPC_SET_REASON(ch, 0, 0); @@ -254,8 +250,7 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, ch->flags |= (XPC_C_CONNECTING | XPC_C_ROPENREQUEST); } - chctl_flags &= ~(XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY | - XPC_CHCTL_OPENCOMPLETE); + chctl_flags &= ~(XPC_CHCTL_OPENREQUEST | XPC_CHCTL_OPENREPLY); /* * The meaningful CLOSEREQUEST connection state fields are: @@ -274,7 +269,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, XPC_DISCONNECT_CHANNEL(ch, reason, &irq_flags); DBUG_ON(chctl_flags & XPC_CHCTL_CLOSEREPLY); - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } xpc_process_disconnect(ch, &irq_flags); @@ -287,7 +283,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, if (ch->flags & XPC_C_DISCONNECTED) { DBUG_ON(part->act_state != XPC_P_AS_DEACTIVATING); - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } DBUG_ON(!(ch->flags & XPC_C_CLOSEREQUEST)); @@ -302,7 +299,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, XPC_CHCTL_CLOSEREPLY; spin_unlock(&part->chctl_lock); } - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } ch->flags |= XPC_C_RCLOSEREPLY; @@ -322,12 +320,14 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, if (part->act_state == XPC_P_AS_DEACTIVATING || (ch->flags & XPC_C_ROPENREQUEST)) { - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_WDISCONNECT)) { ch->delayed_chctl_flags |= XPC_CHCTL_OPENREQUEST; - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } DBUG_ON(!(ch->flags & (XPC_C_DISCONNECTED | XPC_C_OPENREQUEST))); @@ -341,7 +341,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, */ if (args->entry_size == 0 || args->local_nentries == 0) { /* assume OPENREQUEST was delayed by mistake */ - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } ch->flags |= (XPC_C_ROPENREQUEST | XPC_C_CONNECTING); @@ -351,7 +352,8 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, if (args->entry_size != ch->entry_size) { XPC_DISCONNECT_CHANNEL(ch, xpUnequalMsgSizes, &irq_flags); - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } } else { ch->entry_size = args->entry_size; @@ -373,13 +375,15 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, args->local_msgqueue_pa, args->local_nentries, args->remote_nentries, ch->partid, ch->number); - if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) - goto out; - + if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) { + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; + } if (!(ch->flags & XPC_C_OPENREQUEST)) { XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError, &irq_flags); - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST)); @@ -396,11 +400,11 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, DBUG_ON(args->local_nentries == 0); DBUG_ON(args->remote_nentries == 0); - ret = xpc_arch_ops.save_remote_msgqueue_pa(ch, - args->local_msgqueue_pa); + ret = xpc_save_remote_msgqueue_pa(ch, args->local_msgqueue_pa); if (ret != xpSuccess) { XPC_DISCONNECT_CHANNEL(ch, ret, &irq_flags); - goto out; + spin_unlock_irqrestore(&ch->lock, irq_flags); + return; } ch->flags |= XPC_C_ROPENREPLY; @@ -426,36 +430,7 @@ xpc_process_openclose_chctl_flags(struct xpc_partition *part, int ch_number, xpc_process_connect(ch, &irq_flags); } - if (chctl_flags & XPC_CHCTL_OPENCOMPLETE) { - - dev_dbg(xpc_chan, "XPC_CHCTL_OPENCOMPLETE received from " - "partid=%d, channel=%d\n", ch->partid, ch->number); - - if (ch->flags & (XPC_C_DISCONNECTING | XPC_C_DISCONNECTED)) - goto out; - - if (!(ch->flags & XPC_C_OPENREQUEST) || - !(ch->flags & XPC_C_OPENREPLY)) { - XPC_DISCONNECT_CHANNEL(ch, xpOpenCloseError, - &irq_flags); - goto out; - } - - DBUG_ON(!(ch->flags & XPC_C_ROPENREQUEST)); - DBUG_ON(!(ch->flags & XPC_C_ROPENREPLY)); - DBUG_ON(!(ch->flags & XPC_C_CONNECTED)); - - ch->flags |= XPC_C_ROPENCOMPLETE; - - xpc_process_connect(ch, &irq_flags); - create_kthread = 1; - } - -out: spin_unlock_irqrestore(&ch->lock, irq_flags); - - if (create_kthread) - xpc_create_kthreads(ch, 1, 0); } /* @@ -533,7 +508,7 @@ xpc_connect_channel(struct xpc_channel *ch) /* initiate the connection */ ch->flags |= (XPC_C_OPENREQUEST | XPC_C_CONNECTING); - xpc_arch_ops.send_chctl_openrequest(ch, &irq_flags); + xpc_send_chctl_openrequest(ch, &irq_flags); xpc_process_connect(ch, &irq_flags); @@ -551,7 +526,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part) int ch_number; u32 ch_flags; - chctl.all_flags = xpc_arch_ops.get_chctl_all_flags(part); + chctl.all_flags = xpc_get_chctl_all_flags(part); /* * Initiate channel connections for registered channels. @@ -589,6 +564,10 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part) if (!(ch_flags & XPC_C_OPENREQUEST)) { DBUG_ON(ch_flags & XPC_C_SETUP); (void)xpc_connect_channel(ch); + } else { + spin_lock_irqsave(&ch->lock, irq_flags); + xpc_process_connect(ch, &irq_flags); + spin_unlock_irqrestore(&ch->lock, irq_flags); } continue; } @@ -600,7 +579,7 @@ xpc_process_sent_chctl_flags(struct xpc_partition *part) */ if (chctl.flags[ch_number] & XPC_MSG_CHCTL_FLAGS) - xpc_arch_ops.process_msg_chctl_flags(part, ch_number); + xpc_process_msg_chctl_flags(part, ch_number); } } @@ -776,7 +755,7 @@ xpc_disconnect_channel(const int line, struct xpc_channel *ch, XPC_C_ROPENREQUEST | XPC_C_ROPENREPLY | XPC_C_CONNECTING | XPC_C_CONNECTED); - xpc_arch_ops.send_chctl_closerequest(ch, irq_flags); + xpc_send_chctl_closerequest(ch, irq_flags); if (channel_was_connected) ch->flags |= XPC_C_WASCONNECTED; @@ -883,8 +862,8 @@ xpc_initiate_send(short partid, int ch_number, u32 flags, void *payload, DBUG_ON(payload == NULL); if (xpc_part_ref(part)) { - ret = xpc_arch_ops.send_payload(&part->channels[ch_number], - flags, payload, payload_size, 0, NULL, NULL); + ret = xpc_send_payload(&part->channels[ch_number], flags, + payload, payload_size, 0, NULL, NULL); xpc_part_deref(part); } @@ -935,8 +914,9 @@ xpc_initiate_send_notify(short partid, int ch_number, u32 flags, void *payload, DBUG_ON(func == NULL); if (xpc_part_ref(part)) { - ret = xpc_arch_ops.send_payload(&part->channels[ch_number], - flags, payload, payload_size, XPC_N_CALL, func, key); + ret = xpc_send_payload(&part->channels[ch_number], flags, + payload, payload_size, XPC_N_CALL, func, + key); xpc_part_deref(part); } return ret; @@ -950,7 +930,7 @@ xpc_deliver_payload(struct xpc_channel *ch) { void *payload; - payload = xpc_arch_ops.get_deliverable_payload(ch); + payload = xpc_get_deliverable_payload(ch); if (payload != NULL) { /* @@ -1004,7 +984,7 @@ xpc_initiate_received(short partid, int ch_number, void *payload) DBUG_ON(ch_number < 0 || ch_number >= part->nchannels); ch = &part->channels[ch_number]; - xpc_arch_ops.received_payload(ch, payload); + xpc_received_payload(ch, payload); /* the call to xpc_msgqueue_ref() was done by xpc_deliver_payload() */ xpc_msgqueue_deref(ch); diff --git a/trunk/drivers/misc/sgi-xp/xpc_main.c b/trunk/drivers/misc/sgi-xp/xpc_main.c index fd3688a3e23f..1ab9fda87fab 100644 --- a/trunk/drivers/misc/sgi-xp/xpc_main.c +++ b/trunk/drivers/misc/sgi-xp/xpc_main.c @@ -3,7 +3,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (c) 2004-2009 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2004-2008 Silicon Graphics, Inc. All Rights Reserved. */ /* @@ -150,6 +150,7 @@ DECLARE_WAIT_QUEUE_HEAD(xpc_activate_IRQ_wq); static unsigned long xpc_hb_check_timeout; static struct timer_list xpc_hb_timer; +void *xpc_heartbeating_to_mask; /* notification that the xpc_hb_checker thread has exited */ static DECLARE_COMPLETION(xpc_hb_checker_exited); @@ -169,7 +170,62 @@ static struct notifier_block xpc_die_notifier = { .notifier_call = xpc_system_die, }; -struct xpc_arch_operations xpc_arch_ops; +int (*xpc_setup_partitions_sn) (void); +void (*xpc_teardown_partitions_sn) (void); +enum xp_retval (*xpc_get_partition_rsvd_page_pa) (void *buf, u64 *cookie, + unsigned long *rp_pa, + size_t *len); +int (*xpc_setup_rsvd_page_sn) (struct xpc_rsvd_page *rp); +void (*xpc_heartbeat_init) (void); +void (*xpc_heartbeat_exit) (void); +void (*xpc_increment_heartbeat) (void); +void (*xpc_offline_heartbeat) (void); +void (*xpc_online_heartbeat) (void); +enum xp_retval (*xpc_get_remote_heartbeat) (struct xpc_partition *part); + +enum xp_retval (*xpc_make_first_contact) (struct xpc_partition *part); +void (*xpc_notify_senders_of_disconnect) (struct xpc_channel *ch); +u64 (*xpc_get_chctl_all_flags) (struct xpc_partition *part); +enum xp_retval (*xpc_setup_msg_structures) (struct xpc_channel *ch); +void (*xpc_teardown_msg_structures) (struct xpc_channel *ch); +void (*xpc_process_msg_chctl_flags) (struct xpc_partition *part, int ch_number); +int (*xpc_n_of_deliverable_payloads) (struct xpc_channel *ch); +void *(*xpc_get_deliverable_payload) (struct xpc_channel *ch); + +void (*xpc_request_partition_activation) (struct xpc_rsvd_page *remote_rp, + unsigned long remote_rp_pa, + int nasid); +void (*xpc_request_partition_reactivation) (struct xpc_partition *part); +void (*xpc_request_partition_deactivation) (struct xpc_partition *part); +void (*xpc_cancel_partition_deactivation_request) (struct xpc_partition *part); + +void (*xpc_process_activate_IRQ_rcvd) (void); +enum xp_retval (*xpc_setup_ch_structures_sn) (struct xpc_partition *part); +void (*xpc_teardown_ch_structures_sn) (struct xpc_partition *part); + +void (*xpc_indicate_partition_engaged) (struct xpc_partition *part); +int (*xpc_partition_engaged) (short partid); +int (*xpc_any_partition_engaged) (void); +void (*xpc_indicate_partition_disengaged) (struct xpc_partition *part); +void (*xpc_assume_partition_disengaged) (short partid); + +void (*xpc_send_chctl_closerequest) (struct xpc_channel *ch, + unsigned long *irq_flags); +void (*xpc_send_chctl_closereply) (struct xpc_channel *ch, + unsigned long *irq_flags); +void (*xpc_send_chctl_openrequest) (struct xpc_channel *ch, + unsigned long *irq_flags); +void (*xpc_send_chctl_openreply) (struct xpc_channel *ch, + unsigned long *irq_flags); + +enum xp_retval (*xpc_save_remote_msgqueue_pa) (struct xpc_channel *ch, + unsigned long msgqueue_pa); + +enum xp_retval (*xpc_send_payload) (struct xpc_channel *ch, u32 flags, + void *payload, u16 payload_size, + u8 notify_type, xpc_notify_func func, + void *key); +void (*xpc_received_payload) (struct xpc_channel *ch, void *payload); /* * Timer function to enforce the timelimit on the partition disengage. @@ -184,7 +240,7 @@ xpc_timeout_partition_disengage(unsigned long data) (void)xpc_partition_disengaged(part); DBUG_ON(part->disengage_timeout != 0); - DBUG_ON(xpc_arch_ops.partition_engaged(XPC_PARTID(part))); + DBUG_ON(xpc_partition_engaged(XPC_PARTID(part))); } /* @@ -195,7 +251,7 @@ xpc_timeout_partition_disengage(unsigned long data) static void xpc_hb_beater(unsigned long dummy) { - xpc_arch_ops.increment_heartbeat(); + xpc_increment_heartbeat(); if (time_is_before_eq_jiffies(xpc_hb_check_timeout)) wake_up_interruptible(&xpc_activate_IRQ_wq); @@ -207,7 +263,7 @@ xpc_hb_beater(unsigned long dummy) static void xpc_start_hb_beater(void) { - xpc_arch_ops.heartbeat_init(); + xpc_heartbeat_init(); init_timer(&xpc_hb_timer); xpc_hb_timer.function = xpc_hb_beater; xpc_hb_beater(0); @@ -217,7 +273,7 @@ static void xpc_stop_hb_beater(void) { del_timer_sync(&xpc_hb_timer); - xpc_arch_ops.heartbeat_exit(); + xpc_heartbeat_exit(); } /* @@ -246,7 +302,7 @@ xpc_check_remote_hb(void) continue; } - ret = xpc_arch_ops.get_remote_heartbeat(part); + ret = xpc_get_remote_heartbeat(part); if (ret != xpSuccess) XPC_DEACTIVATE_PARTITION(part, ret); } @@ -297,7 +353,7 @@ xpc_hb_checker(void *ignore) force_IRQ = 0; dev_dbg(xpc_part, "processing activate IRQs " "received\n"); - xpc_arch_ops.process_activate_IRQ_rcvd(); + xpc_process_activate_IRQ_rcvd(); } /* wait for IRQ or timeout */ @@ -472,7 +528,7 @@ xpc_setup_ch_structures(struct xpc_partition *part) init_waitqueue_head(&ch->idle_wq); } - ret = xpc_arch_ops.setup_ch_structures(part); + ret = xpc_setup_ch_structures_sn(part); if (ret != xpSuccess) goto out_2; @@ -516,7 +572,7 @@ xpc_teardown_ch_structures(struct xpc_partition *part) /* now we can begin tearing down the infrastructure */ - xpc_arch_ops.teardown_ch_structures(part); + xpc_teardown_ch_structures_sn(part); kfree(part->remote_openclose_args_base); part->remote_openclose_args = NULL; @@ -564,12 +620,12 @@ xpc_activating(void *__partid) dev_dbg(xpc_part, "activating partition %d\n", partid); - xpc_arch_ops.allow_hb(partid); + xpc_allow_hb(partid); if (xpc_setup_ch_structures(part) == xpSuccess) { (void)xpc_part_ref(part); /* this will always succeed */ - if (xpc_arch_ops.make_first_contact(part) == xpSuccess) { + if (xpc_make_first_contact(part) == xpSuccess) { xpc_mark_partition_active(part); xpc_channel_mgr(part); /* won't return until partition is deactivating */ @@ -579,12 +635,12 @@ xpc_activating(void *__partid) xpc_teardown_ch_structures(part); } - xpc_arch_ops.disallow_hb(partid); + xpc_disallow_hb(partid); xpc_mark_partition_inactive(part); if (part->reason == xpReactivating) { /* interrupting ourselves results in activating partition */ - xpc_arch_ops.request_partition_reactivation(part); + xpc_request_partition_reactivation(part); } return 0; @@ -657,13 +713,10 @@ xpc_activate_kthreads(struct xpc_channel *ch, int needed) static void xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch) { - int (*n_of_deliverable_payloads) (struct xpc_channel *) = - xpc_arch_ops.n_of_deliverable_payloads; - do { /* deliver messages to their intended recipients */ - while (n_of_deliverable_payloads(ch) > 0 && + while (xpc_n_of_deliverable_payloads(ch) > 0 && !(ch->flags & XPC_C_DISCONNECTING)) { xpc_deliver_payload(ch); } @@ -679,7 +732,7 @@ xpc_kthread_waitmsgs(struct xpc_partition *part, struct xpc_channel *ch) "wait_event_interruptible_exclusive()\n"); (void)wait_event_interruptible_exclusive(ch->idle_wq, - (n_of_deliverable_payloads(ch) > 0 || + (xpc_n_of_deliverable_payloads(ch) > 0 || (ch->flags & XPC_C_DISCONNECTING))); atomic_dec(&ch->kthreads_idle); @@ -696,8 +749,6 @@ xpc_kthread_start(void *args) struct xpc_channel *ch; int n_needed; unsigned long irq_flags; - int (*n_of_deliverable_payloads) (struct xpc_channel *) = - xpc_arch_ops.n_of_deliverable_payloads; dev_dbg(xpc_chan, "kthread starting, partid=%d, channel=%d\n", partid, ch_number); @@ -726,7 +777,7 @@ xpc_kthread_start(void *args) * additional kthreads to help deliver them. We only * need one less than total #of messages to deliver. */ - n_needed = n_of_deliverable_payloads(ch) - 1; + n_needed = xpc_n_of_deliverable_payloads(ch) - 1; if (n_needed > 0 && !(ch->flags & XPC_C_DISCONNECTING)) xpc_activate_kthreads(ch, n_needed); @@ -754,7 +805,7 @@ xpc_kthread_start(void *args) if (atomic_dec_return(&ch->kthreads_assigned) == 0 && atomic_dec_return(&part->nchannels_engaged) == 0) { - xpc_arch_ops.indicate_partition_disengaged(part); + xpc_indicate_partition_disengaged(part); } xpc_msgqueue_deref(ch); @@ -786,8 +837,6 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed, u64 args = XPC_PACK_ARGS(ch->partid, ch->number); struct xpc_partition *part = &xpc_partitions[ch->partid]; struct task_struct *kthread; - void (*indicate_partition_disengaged) (struct xpc_partition *) = - xpc_arch_ops.indicate_partition_disengaged; while (needed-- > 0) { @@ -809,7 +858,7 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed, } else if (atomic_inc_return(&ch->kthreads_assigned) == 1 && atomic_inc_return(&part->nchannels_engaged) == 1) { - xpc_arch_ops.indicate_partition_engaged(part); + xpc_indicate_partition_engaged(part); } (void)xpc_part_ref(part); xpc_msgqueue_ref(ch); @@ -831,7 +880,7 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed, if (atomic_dec_return(&ch->kthreads_assigned) == 0 && atomic_dec_return(&part->nchannels_engaged) == 0) { - indicate_partition_disengaged(part); + xpc_indicate_partition_disengaged(part); } xpc_msgqueue_deref(ch); xpc_part_deref(part); @@ -944,13 +993,13 @@ xpc_setup_partitions(void) atomic_set(&part->references, 0); } - return xpc_arch_ops.setup_partitions(); + return xpc_setup_partitions_sn(); } static void xpc_teardown_partitions(void) { - xpc_arch_ops.teardown_partitions(); + xpc_teardown_partitions_sn(); kfree(xpc_partitions); } @@ -1006,7 +1055,7 @@ xpc_do_exit(enum xp_retval reason) disengage_timeout = part->disengage_timeout; } - if (xpc_arch_ops.any_partition_engaged()) { + if (xpc_any_partition_engaged()) { if (time_is_before_jiffies(printmsg_time)) { dev_info(xpc_part, "waiting for remote " "partitions to deactivate, timeout in " @@ -1037,7 +1086,8 @@ xpc_do_exit(enum xp_retval reason) } while (1); - DBUG_ON(xpc_arch_ops.any_partition_engaged()); + DBUG_ON(xpc_any_partition_engaged()); + DBUG_ON(xpc_any_hbs_allowed() != 0); xpc_teardown_rsvd_page(); @@ -1102,15 +1152,15 @@ xpc_die_deactivate(void) /* keep xpc_hb_checker thread from doing anything (just in case) */ xpc_exiting = 1; - xpc_arch_ops.disallow_all_hbs(); /*indicate we're deactivated */ + xpc_disallow_all_hbs(); /*indicate we're deactivated */ for (partid = 0; partid < xp_max_npartitions; partid++) { part = &xpc_partitions[partid]; - if (xpc_arch_ops.partition_engaged(partid) || + if (xpc_partition_engaged(partid) || part->act_state != XPC_P_AS_INACTIVE) { - xpc_arch_ops.request_partition_deactivation(part); - xpc_arch_ops.indicate_partition_disengaged(part); + xpc_request_partition_deactivation(part); + xpc_indicate_partition_disengaged(part); } } @@ -1127,7 +1177,7 @@ xpc_die_deactivate(void) wait_to_print = XPC_DEACTIVATE_PRINTMSG_INTERVAL * 1000 * 5; while (1) { - any_engaged = xpc_arch_ops.any_partition_engaged(); + any_engaged = xpc_any_partition_engaged(); if (!any_engaged) { dev_info(xpc_part, "all partitions have deactivated\n"); break; @@ -1136,7 +1186,7 @@ xpc_die_deactivate(void) if (!keep_waiting--) { for (partid = 0; partid < xp_max_npartitions; partid++) { - if (xpc_arch_ops.partition_engaged(partid)) { + if (xpc_partition_engaged(partid)) { dev_info(xpc_part, "deactivate from " "remote partition %d timed " "out\n", partid); @@ -1183,7 +1233,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused) /* fall through */ case DIE_MCA_MONARCH_ENTER: case DIE_INIT_MONARCH_ENTER: - xpc_arch_ops.offline_heartbeat(); + xpc_offline_heartbeat(); break; case DIE_KDEBUG_LEAVE: @@ -1194,7 +1244,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *unused) /* fall through */ case DIE_MCA_MONARCH_LEAVE: case DIE_INIT_MONARCH_LEAVE: - xpc_arch_ops.online_heartbeat(); + xpc_online_heartbeat(); break; } #else diff --git a/trunk/drivers/misc/sgi-xp/xpc_partition.c b/trunk/drivers/misc/sgi-xp/xpc_partition.c index 65877bc5edaa..6722f6fe4dc7 100644 --- a/trunk/drivers/misc/sgi-xp/xpc_partition.c +++ b/trunk/drivers/misc/sgi-xp/xpc_partition.c @@ -70,9 +70,6 @@ xpc_get_rsvd_page_pa(int nasid) size_t buf_len = 0; void *buf = buf; void *buf_base = NULL; - enum xp_retval (*get_partition_rsvd_page_pa) - (void *, u64 *, unsigned long *, size_t *) = - xpc_arch_ops.get_partition_rsvd_page_pa; while (1) { @@ -82,7 +79,8 @@ xpc_get_rsvd_page_pa(int nasid) * ??? function or have two versions? Rename rp_pa for UV to * ??? rp_gpa? */ - ret = get_partition_rsvd_page_pa(buf, &cookie, &rp_pa, &len); + ret = xpc_get_partition_rsvd_page_pa(buf, &cookie, &rp_pa, + &len); dev_dbg(xpc_part, "SAL returned with ret=%d, cookie=0x%016lx, " "address=0x%016lx, len=0x%016lx\n", ret, @@ -174,7 +172,7 @@ xpc_setup_rsvd_page(void) xpc_part_nasids = XPC_RP_PART_NASIDS(rp); xpc_mach_nasids = XPC_RP_MACH_NASIDS(rp); - ret = xpc_arch_ops.setup_rsvd_page(rp); + ret = xpc_setup_rsvd_page_sn(rp); if (ret != 0) return ret; @@ -266,7 +264,7 @@ xpc_partition_disengaged(struct xpc_partition *part) short partid = XPC_PARTID(part); int disengaged; - disengaged = !xpc_arch_ops.partition_engaged(partid); + disengaged = !xpc_partition_engaged(partid); if (part->disengage_timeout) { if (!disengaged) { if (time_is_after_jiffies(part->disengage_timeout)) { @@ -282,7 +280,7 @@ xpc_partition_disengaged(struct xpc_partition *part) dev_info(xpc_part, "deactivate request to remote " "partition %d timed out\n", partid); xpc_disengage_timedout = 1; - xpc_arch_ops.assume_partition_disengaged(partid); + xpc_assume_partition_disengaged(partid); disengaged = 1; } part->disengage_timeout = 0; @@ -296,7 +294,7 @@ xpc_partition_disengaged(struct xpc_partition *part) if (part->act_state != XPC_P_AS_INACTIVE) xpc_wakeup_channel_mgr(part); - xpc_arch_ops.cancel_partition_deactivation_request(part); + xpc_cancel_partition_deactivation_request(part); } return disengaged; } @@ -341,7 +339,7 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part, spin_unlock_irqrestore(&part->act_lock, irq_flags); if (reason == xpReactivating) { /* we interrupt ourselves to reactivate partition */ - xpc_arch_ops.request_partition_reactivation(part); + xpc_request_partition_reactivation(part); } return; } @@ -360,7 +358,7 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part, spin_unlock_irqrestore(&part->act_lock, irq_flags); /* ask remote partition to deactivate with regard to us */ - xpc_arch_ops.request_partition_deactivation(part); + xpc_request_partition_deactivation(part); /* set a timelimit on the disengage phase of the deactivation request */ part->disengage_timeout = jiffies + (xpc_disengage_timelimit * HZ); @@ -498,7 +496,7 @@ xpc_discovery(void) continue; } - xpc_arch_ops.request_partition_activation(remote_rp, + xpc_request_partition_activation(remote_rp, remote_rp_pa, nasid); } } diff --git a/trunk/drivers/misc/sgi-xp/xpc_sn2.c b/trunk/drivers/misc/sgi-xp/xpc_sn2.c index 915a3b495da5..eaaa964942de 100644 --- a/trunk/drivers/misc/sgi-xp/xpc_sn2.c +++ b/trunk/drivers/misc/sgi-xp/xpc_sn2.c @@ -3,7 +3,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (c) 2008-2009 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. */ /* @@ -60,14 +60,14 @@ static struct xpc_vars_sn2 *xpc_vars_sn2; static struct xpc_vars_part_sn2 *xpc_vars_part_sn2; static int -xpc_setup_partitions_sn2(void) +xpc_setup_partitions_sn_sn2(void) { /* nothing needs to be done */ return 0; } static void -xpc_teardown_partitions_sn2(void) +xpc_teardown_partitions_sn_sn2(void) { /* nothing needs to be done */ } @@ -430,13 +430,6 @@ xpc_send_chctl_openreply_sn2(struct xpc_channel *ch, unsigned long *irq_flags) XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_OPENREPLY, irq_flags); } -static void -xpc_send_chctl_opencomplete_sn2(struct xpc_channel *ch, - unsigned long *irq_flags) -{ - XPC_SEND_NOTIFY_IRQ_SN2(ch, XPC_CHCTL_OPENCOMPLETE, irq_flags); -} - static void xpc_send_chctl_msgrequest_sn2(struct xpc_channel *ch) { @@ -628,7 +621,7 @@ xpc_get_partition_rsvd_page_pa_sn2(void *buf, u64 *cookie, unsigned long *rp_pa, static int -xpc_setup_rsvd_page_sn2(struct xpc_rsvd_page *rp) +xpc_setup_rsvd_page_sn_sn2(struct xpc_rsvd_page *rp) { struct amo *amos_page; int i; @@ -636,7 +629,7 @@ xpc_setup_rsvd_page_sn2(struct xpc_rsvd_page *rp) xpc_vars_sn2 = XPC_RP_VARS(rp); - rp->sn.sn2.vars_pa = xp_pa(xpc_vars_sn2); + rp->sn.vars_pa = xp_pa(xpc_vars_sn2); /* vars_part array follows immediately after vars */ xpc_vars_part_sn2 = (struct xpc_vars_part_sn2 *)((u8 *)XPC_RP_VARS(rp) + @@ -700,33 +693,6 @@ xpc_setup_rsvd_page_sn2(struct xpc_rsvd_page *rp) return 0; } -static int -xpc_hb_allowed_sn2(short partid, void *heartbeating_to_mask) -{ - return test_bit(partid, heartbeating_to_mask); -} - -static void -xpc_allow_hb_sn2(short partid) -{ - DBUG_ON(xpc_vars_sn2 == NULL); - set_bit(partid, xpc_vars_sn2->heartbeating_to_mask); -} - -static void -xpc_disallow_hb_sn2(short partid) -{ - DBUG_ON(xpc_vars_sn2 == NULL); - clear_bit(partid, xpc_vars_sn2->heartbeating_to_mask); -} - -static void -xpc_disallow_all_hbs_sn2(void) -{ - DBUG_ON(xpc_vars_sn2 == NULL); - bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, xp_max_npartitions); -} - static void xpc_increment_heartbeat_sn2(void) { @@ -753,6 +719,7 @@ xpc_heartbeat_init_sn2(void) DBUG_ON(xpc_vars_sn2 == NULL); bitmap_zero(xpc_vars_sn2->heartbeating_to_mask, XP_MAX_NPARTITIONS_SN2); + xpc_heartbeating_to_mask = &xpc_vars_sn2->heartbeating_to_mask[0]; xpc_online_heartbeat_sn2(); } @@ -784,9 +751,9 @@ xpc_get_remote_heartbeat_sn2(struct xpc_partition *part) remote_vars->heartbeating_to_mask[0]); if ((remote_vars->heartbeat == part->last_heartbeat && - !remote_vars->heartbeat_offline) || - !xpc_hb_allowed_sn2(sn_partition_id, - remote_vars->heartbeating_to_mask)) { + remote_vars->heartbeat_offline == 0) || + !xpc_hb_allowed(sn_partition_id, + &remote_vars->heartbeating_to_mask)) { ret = xpNoHeartbeat; } else { part->last_heartbeat = remote_vars->heartbeat; @@ -1005,7 +972,7 @@ xpc_identify_activate_IRQ_req_sn2(int nasid) return; } - remote_vars_pa = remote_rp->sn.sn2.vars_pa; + remote_vars_pa = remote_rp->sn.vars_pa; remote_rp_version = remote_rp->version; remote_rp_ts_jiffies = remote_rp->ts_jiffies; @@ -1162,7 +1129,7 @@ xpc_process_activate_IRQ_rcvd_sn2(void) * Setup the channel structures that are sn2 specific. */ static enum xp_retval -xpc_setup_ch_structures_sn2(struct xpc_partition *part) +xpc_setup_ch_structures_sn_sn2(struct xpc_partition *part) { struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; struct xpc_channel_sn2 *ch_sn2; @@ -1284,7 +1251,7 @@ xpc_setup_ch_structures_sn2(struct xpc_partition *part) * Teardown the channel structures that are sn2 specific. */ static void -xpc_teardown_ch_structures_sn2(struct xpc_partition *part) +xpc_teardown_ch_structures_sn_sn2(struct xpc_partition *part) { struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2; short partid = XPC_PARTID(part); @@ -2348,70 +2315,61 @@ xpc_received_payload_sn2(struct xpc_channel *ch, void *payload) xpc_acknowledge_msgs_sn2(ch, get, msg->flags); } -static struct xpc_arch_operations xpc_arch_ops_sn2 = { - .setup_partitions = xpc_setup_partitions_sn2, - .teardown_partitions = xpc_teardown_partitions_sn2, - .process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_sn2, - .get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_sn2, - .setup_rsvd_page = xpc_setup_rsvd_page_sn2, - - .allow_hb = xpc_allow_hb_sn2, - .disallow_hb = xpc_disallow_hb_sn2, - .disallow_all_hbs = xpc_disallow_all_hbs_sn2, - .increment_heartbeat = xpc_increment_heartbeat_sn2, - .offline_heartbeat = xpc_offline_heartbeat_sn2, - .online_heartbeat = xpc_online_heartbeat_sn2, - .heartbeat_init = xpc_heartbeat_init_sn2, - .heartbeat_exit = xpc_heartbeat_exit_sn2, - .get_remote_heartbeat = xpc_get_remote_heartbeat_sn2, - - .request_partition_activation = - xpc_request_partition_activation_sn2, - .request_partition_reactivation = - xpc_request_partition_reactivation_sn2, - .request_partition_deactivation = - xpc_request_partition_deactivation_sn2, - .cancel_partition_deactivation_request = - xpc_cancel_partition_deactivation_request_sn2, - - .setup_ch_structures = xpc_setup_ch_structures_sn2, - .teardown_ch_structures = xpc_teardown_ch_structures_sn2, - - .make_first_contact = xpc_make_first_contact_sn2, - - .get_chctl_all_flags = xpc_get_chctl_all_flags_sn2, - .send_chctl_closerequest = xpc_send_chctl_closerequest_sn2, - .send_chctl_closereply = xpc_send_chctl_closereply_sn2, - .send_chctl_openrequest = xpc_send_chctl_openrequest_sn2, - .send_chctl_openreply = xpc_send_chctl_openreply_sn2, - .send_chctl_opencomplete = xpc_send_chctl_opencomplete_sn2, - .process_msg_chctl_flags = xpc_process_msg_chctl_flags_sn2, - - .save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_sn2, - - .setup_msg_structures = xpc_setup_msg_structures_sn2, - .teardown_msg_structures = xpc_teardown_msg_structures_sn2, - - .indicate_partition_engaged = xpc_indicate_partition_engaged_sn2, - .indicate_partition_disengaged = xpc_indicate_partition_disengaged_sn2, - .partition_engaged = xpc_partition_engaged_sn2, - .any_partition_engaged = xpc_any_partition_engaged_sn2, - .assume_partition_disengaged = xpc_assume_partition_disengaged_sn2, - - .n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_sn2, - .send_payload = xpc_send_payload_sn2, - .get_deliverable_payload = xpc_get_deliverable_payload_sn2, - .received_payload = xpc_received_payload_sn2, - .notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_sn2, -}; - int xpc_init_sn2(void) { int ret; size_t buf_size; - xpc_arch_ops = xpc_arch_ops_sn2; + xpc_setup_partitions_sn = xpc_setup_partitions_sn_sn2; + xpc_teardown_partitions_sn = xpc_teardown_partitions_sn_sn2; + xpc_get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_sn2; + xpc_setup_rsvd_page_sn = xpc_setup_rsvd_page_sn_sn2; + xpc_increment_heartbeat = xpc_increment_heartbeat_sn2; + xpc_offline_heartbeat = xpc_offline_heartbeat_sn2; + xpc_online_heartbeat = xpc_online_heartbeat_sn2; + xpc_heartbeat_init = xpc_heartbeat_init_sn2; + xpc_heartbeat_exit = xpc_heartbeat_exit_sn2; + xpc_get_remote_heartbeat = xpc_get_remote_heartbeat_sn2; + + xpc_request_partition_activation = xpc_request_partition_activation_sn2; + xpc_request_partition_reactivation = + xpc_request_partition_reactivation_sn2; + xpc_request_partition_deactivation = + xpc_request_partition_deactivation_sn2; + xpc_cancel_partition_deactivation_request = + xpc_cancel_partition_deactivation_request_sn2; + + xpc_process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_sn2; + xpc_setup_ch_structures_sn = xpc_setup_ch_structures_sn_sn2; + xpc_teardown_ch_structures_sn = xpc_teardown_ch_structures_sn_sn2; + xpc_make_first_contact = xpc_make_first_contact_sn2; + + xpc_get_chctl_all_flags = xpc_get_chctl_all_flags_sn2; + xpc_send_chctl_closerequest = xpc_send_chctl_closerequest_sn2; + xpc_send_chctl_closereply = xpc_send_chctl_closereply_sn2; + xpc_send_chctl_openrequest = xpc_send_chctl_openrequest_sn2; + xpc_send_chctl_openreply = xpc_send_chctl_openreply_sn2; + + xpc_save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_sn2; + + xpc_setup_msg_structures = xpc_setup_msg_structures_sn2; + xpc_teardown_msg_structures = xpc_teardown_msg_structures_sn2; + + xpc_notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_sn2; + xpc_process_msg_chctl_flags = xpc_process_msg_chctl_flags_sn2; + xpc_n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_sn2; + xpc_get_deliverable_payload = xpc_get_deliverable_payload_sn2; + + xpc_indicate_partition_engaged = xpc_indicate_partition_engaged_sn2; + xpc_indicate_partition_disengaged = + xpc_indicate_partition_disengaged_sn2; + xpc_partition_engaged = xpc_partition_engaged_sn2; + xpc_any_partition_engaged = xpc_any_partition_engaged_sn2; + xpc_assume_partition_disengaged = xpc_assume_partition_disengaged_sn2; + + xpc_send_payload = xpc_send_payload_sn2; + xpc_received_payload = xpc_received_payload_sn2; if (offsetof(struct xpc_msg_sn2, payload) > XPC_MSG_HDR_MAX_SIZE) { dev_err(xpc_part, "header portion of struct xpc_msg_sn2 is " diff --git a/trunk/drivers/misc/sgi-xp/xpc_uv.c b/trunk/drivers/misc/sgi-xp/xpc_uv.c index 9172fcdee4e2..f7fff4727edb 100644 --- a/trunk/drivers/misc/sgi-xp/xpc_uv.c +++ b/trunk/drivers/misc/sgi-xp/xpc_uv.c @@ -46,7 +46,8 @@ struct uv_IO_APIC_route_entry { }; #endif -static struct xpc_heartbeat_uv *xpc_heartbeat_uv; +static atomic64_t xpc_heartbeat_uv; +static DECLARE_BITMAP(xpc_heartbeating_to_mask_uv, XP_MAX_NPARTITIONS_UV); #define XPC_ACTIVATE_MSG_SIZE_UV (1 * GRU_CACHE_LINE_BYTES) #define XPC_ACTIVATE_MQ_SIZE_UV (4 * XP_MAX_NPARTITIONS_UV * \ @@ -62,7 +63,7 @@ static struct xpc_gru_mq_uv *xpc_activate_mq_uv; static struct xpc_gru_mq_uv *xpc_notify_mq_uv; static int -xpc_setup_partitions_uv(void) +xpc_setup_partitions_sn_uv(void) { short partid; struct xpc_partition_uv *part_uv; @@ -78,7 +79,7 @@ xpc_setup_partitions_uv(void) } static void -xpc_teardown_partitions_uv(void) +xpc_teardown_partitions_sn_uv(void) { short partid; struct xpc_partition_uv *part_uv; @@ -422,6 +423,41 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, /* syncing of remote_act_state was just done above */ break; + case XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV: { + struct xpc_activate_mq_msg_heartbeat_req_uv *msg; + + msg = container_of(msg_hdr, + struct xpc_activate_mq_msg_heartbeat_req_uv, + hdr); + part_uv->heartbeat = msg->heartbeat; + break; + } + case XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV: { + struct xpc_activate_mq_msg_heartbeat_req_uv *msg; + + msg = container_of(msg_hdr, + struct xpc_activate_mq_msg_heartbeat_req_uv, + hdr); + part_uv->heartbeat = msg->heartbeat; + + spin_lock_irqsave(&part_uv->flags_lock, irq_flags); + part_uv->flags |= XPC_P_HEARTBEAT_OFFLINE_UV; + spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags); + break; + } + case XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV: { + struct xpc_activate_mq_msg_heartbeat_req_uv *msg; + + msg = container_of(msg_hdr, + struct xpc_activate_mq_msg_heartbeat_req_uv, + hdr); + part_uv->heartbeat = msg->heartbeat; + + spin_lock_irqsave(&part_uv->flags_lock, irq_flags); + part_uv->flags &= ~XPC_P_HEARTBEAT_OFFLINE_UV; + spin_unlock_irqrestore(&part_uv->flags_lock, irq_flags); + break; + } case XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV: { struct xpc_activate_mq_msg_activate_req_uv *msg; @@ -439,7 +475,6 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, part_uv->act_state_req = XPC_P_ASR_ACTIVATE_UV; part->remote_rp_pa = msg->rp_gpa; /* !!! _pa is _gpa */ part->remote_rp_ts_jiffies = msg_hdr->rp_ts_jiffies; - part_uv->heartbeat_gpa = msg->heartbeat_gpa; if (msg->activate_gru_mq_desc_gpa != part_uv->activate_gru_mq_desc_gpa) { @@ -534,17 +569,6 @@ xpc_handle_activate_mq_msg_uv(struct xpc_partition *part, xpc_wakeup_channel_mgr(part); break; } - case XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV: { - struct xpc_activate_mq_msg_chctl_opencomplete_uv *msg; - - msg = container_of(msg_hdr, struct - xpc_activate_mq_msg_chctl_opencomplete_uv, hdr); - spin_lock_irqsave(&part->chctl_lock, irq_flags); - part->chctl.flags[msg->ch_number] |= XPC_CHCTL_OPENCOMPLETE; - spin_unlock_irqrestore(&part->chctl_lock, irq_flags); - - xpc_wakeup_channel_mgr(part); - } case XPC_ACTIVATE_MQ_MSG_MARK_ENGAGED_UV: spin_lock_irqsave(&part_uv->flags_lock, irq_flags); part_uv->flags |= XPC_P_ENGAGED_UV; @@ -735,7 +759,7 @@ xpc_send_local_activate_IRQ_uv(struct xpc_partition *part, int act_state_req) /* * !!! Make our side think that the remote partition sent an activate - * !!! mq message our way by doing what the activate IRQ handler would + * !!! message our way by doing what the activate IRQ handler would * !!! do had one really been sent. */ @@ -782,82 +806,90 @@ xpc_get_partition_rsvd_page_pa_uv(void *buf, u64 *cookie, unsigned long *rp_pa, } static int -xpc_setup_rsvd_page_uv(struct xpc_rsvd_page *rp) +xpc_setup_rsvd_page_sn_uv(struct xpc_rsvd_page *rp) { - xpc_heartbeat_uv = - &xpc_partitions[sn_partition_id].sn.uv.cached_heartbeat; - rp->sn.uv.heartbeat_gpa = uv_gpa(xpc_heartbeat_uv); - rp->sn.uv.activate_gru_mq_desc_gpa = + rp->sn.activate_gru_mq_desc_gpa = uv_gpa(xpc_activate_mq_uv->gru_mq_desc); return 0; } static void -xpc_allow_hb_uv(short partid) +xpc_send_heartbeat_uv(int msg_type) { -} + short partid; + struct xpc_partition *part; + struct xpc_activate_mq_msg_heartbeat_req_uv msg; -static void -xpc_disallow_hb_uv(short partid) -{ -} + /* + * !!! On uv we're broadcasting a heartbeat message every 5 seconds. + * !!! Whereas on sn2 we're bte_copy'ng the heartbeat info every 20 + * !!! seconds. This is an increase in numalink traffic. + * ??? Is this good? + */ -static void -xpc_disallow_all_hbs_uv(void) -{ + msg.heartbeat = atomic64_inc_return(&xpc_heartbeat_uv); + + partid = find_first_bit(xpc_heartbeating_to_mask_uv, + XP_MAX_NPARTITIONS_UV); + + while (partid < XP_MAX_NPARTITIONS_UV) { + part = &xpc_partitions[partid]; + + xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), + msg_type); + + partid = find_next_bit(xpc_heartbeating_to_mask_uv, + XP_MAX_NPARTITIONS_UV, partid + 1); + } } static void xpc_increment_heartbeat_uv(void) { - xpc_heartbeat_uv->value++; + xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_INC_HEARTBEAT_UV); } static void xpc_offline_heartbeat_uv(void) { - xpc_increment_heartbeat_uv(); - xpc_heartbeat_uv->offline = 1; + xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV); } static void xpc_online_heartbeat_uv(void) { - xpc_increment_heartbeat_uv(); - xpc_heartbeat_uv->offline = 0; + xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_ONLINE_HEARTBEAT_UV); } static void xpc_heartbeat_init_uv(void) { - xpc_heartbeat_uv->value = 1; - xpc_heartbeat_uv->offline = 0; + atomic64_set(&xpc_heartbeat_uv, 0); + bitmap_zero(xpc_heartbeating_to_mask_uv, XP_MAX_NPARTITIONS_UV); + xpc_heartbeating_to_mask = &xpc_heartbeating_to_mask_uv[0]; } static void xpc_heartbeat_exit_uv(void) { - xpc_offline_heartbeat_uv(); + xpc_send_heartbeat_uv(XPC_ACTIVATE_MQ_MSG_OFFLINE_HEARTBEAT_UV); } static enum xp_retval xpc_get_remote_heartbeat_uv(struct xpc_partition *part) { struct xpc_partition_uv *part_uv = &part->sn.uv; - enum xp_retval ret; + enum xp_retval ret = xpNoHeartbeat; - ret = xp_remote_memcpy(uv_gpa(&part_uv->cached_heartbeat), - part_uv->heartbeat_gpa, - sizeof(struct xpc_heartbeat_uv)); - if (ret != xpSuccess) - return ret; + if (part_uv->remote_act_state != XPC_P_AS_INACTIVE && + part_uv->remote_act_state != XPC_P_AS_DEACTIVATING) { - if (part_uv->cached_heartbeat.value == part->last_heartbeat && - !part_uv->cached_heartbeat.offline) { + if (part_uv->heartbeat != part->last_heartbeat || + (part_uv->flags & XPC_P_HEARTBEAT_OFFLINE_UV)) { - ret = xpNoHeartbeat; - } else { - part->last_heartbeat = part_uv->cached_heartbeat.value; + part->last_heartbeat = part_uv->heartbeat; + ret = xpSuccess; + } } return ret; } @@ -872,9 +904,8 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp, part->remote_rp_pa = remote_rp_gpa; /* !!! _pa here is really _gpa */ part->remote_rp_ts_jiffies = remote_rp->ts_jiffies; - part->sn.uv.heartbeat_gpa = remote_rp->sn.uv.heartbeat_gpa; part->sn.uv.activate_gru_mq_desc_gpa = - remote_rp->sn.uv.activate_gru_mq_desc_gpa; + remote_rp->sn.activate_gru_mq_desc_gpa; /* * ??? Is it a good idea to make this conditional on what is @@ -882,9 +913,8 @@ xpc_request_partition_activation_uv(struct xpc_rsvd_page *remote_rp, */ if (part->sn.uv.remote_act_state == XPC_P_AS_INACTIVE) { msg.rp_gpa = uv_gpa(xpc_rsvd_page); - msg.heartbeat_gpa = xpc_rsvd_page->sn.uv.heartbeat_gpa; msg.activate_gru_mq_desc_gpa = - xpc_rsvd_page->sn.uv.activate_gru_mq_desc_gpa; + xpc_rsvd_page->sn.activate_gru_mq_desc_gpa; xpc_send_activate_IRQ_part_uv(part, &msg, sizeof(msg), XPC_ACTIVATE_MQ_MSG_ACTIVATE_REQ_UV); } @@ -980,7 +1010,7 @@ xpc_n_of_fifo_entries_uv(struct xpc_fifo_head_uv *head) * Setup the channel structures that are uv specific. */ static enum xp_retval -xpc_setup_ch_structures_uv(struct xpc_partition *part) +xpc_setup_ch_structures_sn_uv(struct xpc_partition *part) { struct xpc_channel_uv *ch_uv; int ch_number; @@ -999,7 +1029,7 @@ xpc_setup_ch_structures_uv(struct xpc_partition *part) * Teardown the channel structures that are uv specific. */ static void -xpc_teardown_ch_structures_uv(struct xpc_partition *part) +xpc_teardown_ch_structures_sn_uv(struct xpc_partition *part) { /* nothing needs to be done */ return; @@ -1212,16 +1242,6 @@ xpc_send_chctl_openreply_uv(struct xpc_channel *ch, unsigned long *irq_flags) XPC_ACTIVATE_MQ_MSG_CHCTL_OPENREPLY_UV); } -static void -xpc_send_chctl_opencomplete_uv(struct xpc_channel *ch, unsigned long *irq_flags) -{ - struct xpc_activate_mq_msg_chctl_opencomplete_uv msg; - - msg.ch_number = ch->number; - xpc_send_activate_IRQ_ch_uv(ch, irq_flags, &msg, sizeof(msg), - XPC_ACTIVATE_MQ_MSG_CHCTL_OPENCOMPLETE_UV); -} - static void xpc_send_chctl_local_msgrequest_uv(struct xpc_partition *part, int ch_number) { @@ -1649,67 +1669,58 @@ xpc_received_payload_uv(struct xpc_channel *ch, void *payload) msg->hdr.msg_slot_number += ch->remote_nentries; } -static struct xpc_arch_operations xpc_arch_ops_uv = { - .setup_partitions = xpc_setup_partitions_uv, - .teardown_partitions = xpc_teardown_partitions_uv, - .process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_uv, - .get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_uv, - .setup_rsvd_page = xpc_setup_rsvd_page_uv, - - .allow_hb = xpc_allow_hb_uv, - .disallow_hb = xpc_disallow_hb_uv, - .disallow_all_hbs = xpc_disallow_all_hbs_uv, - .increment_heartbeat = xpc_increment_heartbeat_uv, - .offline_heartbeat = xpc_offline_heartbeat_uv, - .online_heartbeat = xpc_online_heartbeat_uv, - .heartbeat_init = xpc_heartbeat_init_uv, - .heartbeat_exit = xpc_heartbeat_exit_uv, - .get_remote_heartbeat = xpc_get_remote_heartbeat_uv, - - .request_partition_activation = - xpc_request_partition_activation_uv, - .request_partition_reactivation = - xpc_request_partition_reactivation_uv, - .request_partition_deactivation = - xpc_request_partition_deactivation_uv, - .cancel_partition_deactivation_request = - xpc_cancel_partition_deactivation_request_uv, - - .setup_ch_structures = xpc_setup_ch_structures_uv, - .teardown_ch_structures = xpc_teardown_ch_structures_uv, - - .make_first_contact = xpc_make_first_contact_uv, - - .get_chctl_all_flags = xpc_get_chctl_all_flags_uv, - .send_chctl_closerequest = xpc_send_chctl_closerequest_uv, - .send_chctl_closereply = xpc_send_chctl_closereply_uv, - .send_chctl_openrequest = xpc_send_chctl_openrequest_uv, - .send_chctl_openreply = xpc_send_chctl_openreply_uv, - .send_chctl_opencomplete = xpc_send_chctl_opencomplete_uv, - .process_msg_chctl_flags = xpc_process_msg_chctl_flags_uv, - - .save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_uv, - - .setup_msg_structures = xpc_setup_msg_structures_uv, - .teardown_msg_structures = xpc_teardown_msg_structures_uv, - - .indicate_partition_engaged = xpc_indicate_partition_engaged_uv, - .indicate_partition_disengaged = xpc_indicate_partition_disengaged_uv, - .assume_partition_disengaged = xpc_assume_partition_disengaged_uv, - .partition_engaged = xpc_partition_engaged_uv, - .any_partition_engaged = xpc_any_partition_engaged_uv, - - .n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_uv, - .send_payload = xpc_send_payload_uv, - .get_deliverable_payload = xpc_get_deliverable_payload_uv, - .received_payload = xpc_received_payload_uv, - .notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_uv, -}; - int xpc_init_uv(void) { - xpc_arch_ops = xpc_arch_ops_uv; + xpc_setup_partitions_sn = xpc_setup_partitions_sn_uv; + xpc_teardown_partitions_sn = xpc_teardown_partitions_sn_uv; + xpc_process_activate_IRQ_rcvd = xpc_process_activate_IRQ_rcvd_uv; + xpc_get_partition_rsvd_page_pa = xpc_get_partition_rsvd_page_pa_uv; + xpc_setup_rsvd_page_sn = xpc_setup_rsvd_page_sn_uv; + xpc_increment_heartbeat = xpc_increment_heartbeat_uv; + xpc_offline_heartbeat = xpc_offline_heartbeat_uv; + xpc_online_heartbeat = xpc_online_heartbeat_uv; + xpc_heartbeat_init = xpc_heartbeat_init_uv; + xpc_heartbeat_exit = xpc_heartbeat_exit_uv; + xpc_get_remote_heartbeat = xpc_get_remote_heartbeat_uv; + + xpc_request_partition_activation = xpc_request_partition_activation_uv; + xpc_request_partition_reactivation = + xpc_request_partition_reactivation_uv; + xpc_request_partition_deactivation = + xpc_request_partition_deactivation_uv; + xpc_cancel_partition_deactivation_request = + xpc_cancel_partition_deactivation_request_uv; + + xpc_setup_ch_structures_sn = xpc_setup_ch_structures_sn_uv; + xpc_teardown_ch_structures_sn = xpc_teardown_ch_structures_sn_uv; + + xpc_make_first_contact = xpc_make_first_contact_uv; + + xpc_get_chctl_all_flags = xpc_get_chctl_all_flags_uv; + xpc_send_chctl_closerequest = xpc_send_chctl_closerequest_uv; + xpc_send_chctl_closereply = xpc_send_chctl_closereply_uv; + xpc_send_chctl_openrequest = xpc_send_chctl_openrequest_uv; + xpc_send_chctl_openreply = xpc_send_chctl_openreply_uv; + + xpc_save_remote_msgqueue_pa = xpc_save_remote_msgqueue_pa_uv; + + xpc_setup_msg_structures = xpc_setup_msg_structures_uv; + xpc_teardown_msg_structures = xpc_teardown_msg_structures_uv; + + xpc_indicate_partition_engaged = xpc_indicate_partition_engaged_uv; + xpc_indicate_partition_disengaged = + xpc_indicate_partition_disengaged_uv; + xpc_assume_partition_disengaged = xpc_assume_partition_disengaged_uv; + xpc_partition_engaged = xpc_partition_engaged_uv; + xpc_any_partition_engaged = xpc_any_partition_engaged_uv; + + xpc_n_of_deliverable_payloads = xpc_n_of_deliverable_payloads_uv; + xpc_process_msg_chctl_flags = xpc_process_msg_chctl_flags_uv; + xpc_send_payload = xpc_send_payload_uv; + xpc_notify_senders_of_disconnect = xpc_notify_senders_of_disconnect_uv; + xpc_get_deliverable_payload = xpc_get_deliverable_payload_uv; + xpc_received_payload = xpc_received_payload_uv; if (sizeof(struct xpc_notify_mq_msghdr_uv) > XPC_MSG_HDR_MAX_SIZE) { dev_err(xpc_part, "xpc_notify_mq_msghdr_uv is larger than %d\n", diff --git a/trunk/drivers/net/atl1c/atl1c_main.c b/trunk/drivers/net/atl1c/atl1c_main.c index 83a12125b94e..deb7b53167ee 100644 --- a/trunk/drivers/net/atl1c/atl1c_main.c +++ b/trunk/drivers/net/atl1c/atl1c_main.c @@ -2532,8 +2532,8 @@ static int __devinit atl1c_probe(struct pci_dev *pdev, * various kernel subsystems to support the mechanics required by a * fixed-high-32-bit system. */ - if ((pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) || - (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) != 0)) { + if ((pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) || + (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) != 0)) { dev_err(&pdev->dev, "No usable DMA configuration,aborting\n"); goto err_dma; } diff --git a/trunk/drivers/net/benet/be_main.c b/trunk/drivers/net/benet/be_main.c index 30d0c81c989e..9b75aa630062 100644 --- a/trunk/drivers/net/benet/be_main.c +++ b/trunk/drivers/net/benet/be_main.c @@ -1821,11 +1821,11 @@ static int __devinit be_probe(struct pci_dev *pdev, be_msix_enable(adapter); - status = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); + status = pci_set_dma_mask(pdev, DMA_64BIT_MASK); if (!status) { netdev->features |= NETIF_F_HIGHDMA; } else { - status = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); + status = pci_set_dma_mask(pdev, DMA_32BIT_MASK); if (status) { dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); goto free_netdev; diff --git a/trunk/drivers/net/jme.c b/trunk/drivers/net/jme.c index 621a7c0c46ba..ece35040288c 100644 --- a/trunk/drivers/net/jme.c +++ b/trunk/drivers/net/jme.c @@ -2591,13 +2591,13 @@ static int jme_pci_dma64(struct pci_dev *pdev) { if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && - !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) - if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) + !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) + if (!pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) return 1; if (pdev->device == PCI_DEVICE_ID_JMICRON_JMC250 && - !pci_set_dma_mask(pdev, DMA_BIT_MASK(40))) - if (!pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40))) + !pci_set_dma_mask(pdev, DMA_40BIT_MASK)) + if (!pci_set_consistent_dma_mask(pdev, DMA_40BIT_MASK)) return 1; if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) diff --git a/trunk/drivers/net/mlx4/port.c b/trunk/drivers/net/mlx4/port.c index 606aa58afdea..7cce3342ef8c 100644 --- a/trunk/drivers/net/mlx4/port.c +++ b/trunk/drivers/net/mlx4/port.c @@ -299,14 +299,13 @@ int mlx4_SET_PORT(struct mlx4_dev *dev, u8 port) struct mlx4_cmd_mailbox *mailbox; int err; - if (dev->caps.port_type[port] == MLX4_PORT_TYPE_ETH) - return 0; - mailbox = mlx4_alloc_cmd_mailbox(dev); if (IS_ERR(mailbox)) return PTR_ERR(mailbox); memset(mailbox->buf, 0, 256); + if (dev->caps.port_type[port] == MLX4_PORT_TYPE_ETH) + return 0; ((__be32 *) mailbox->buf)[1] = dev->caps.ib_port_def_cap[port]; err = mlx4_cmd(dev, mailbox->dma, port, 0, MLX4_CMD_SET_PORT, diff --git a/trunk/drivers/net/smc91x.h b/trunk/drivers/net/smc91x.h index 329f890e2903..912308eec865 100644 --- a/trunk/drivers/net/smc91x.h +++ b/trunk/drivers/net/smc91x.h @@ -369,7 +369,7 @@ static inline void LPD7_SMC_outsw (unsigned char* a, int r, * MN10300/AM33 configuration */ -#include +#include #else diff --git a/trunk/drivers/net/wireless/ath9k/pci.c b/trunk/drivers/net/wireless/ath9k/pci.c index 168411d322a2..6dbc58580abb 100644 --- a/trunk/drivers/net/wireless/ath9k/pci.c +++ b/trunk/drivers/net/wireless/ath9k/pci.c @@ -93,14 +93,14 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) if (pci_enable_device(pdev)) return -EIO; - ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); + ret = pci_set_dma_mask(pdev, DMA_32BIT_MASK); if (ret) { printk(KERN_ERR "ath9k: 32-bit DMA not available\n"); goto bad; } - ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); + ret = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK); if (ret) { printk(KERN_ERR "ath9k: 32-bit DMA consistent " diff --git a/trunk/drivers/net/wireless/p54/p54pci.c b/trunk/drivers/net/wireless/p54/p54pci.c index b1610ea4bb3d..e3569a0a952d 100644 --- a/trunk/drivers/net/wireless/p54/p54pci.c +++ b/trunk/drivers/net/wireless/p54/p54pci.c @@ -492,8 +492,8 @@ static int __devinit p54p_probe(struct pci_dev *pdev, goto err_disable_dev; } - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) || - pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { + if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) || + pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { dev_err(&pdev->dev, "No suitable DMA available\n"); goto err_free_reg; } diff --git a/trunk/drivers/parisc/superio.c b/trunk/drivers/parisc/superio.c index 33e5ade774ca..4fa3bb2ddfe4 100644 --- a/trunk/drivers/parisc/superio.c +++ b/trunk/drivers/parisc/superio.c @@ -434,8 +434,7 @@ static void __init superio_parport_init(void) 0 /*base_hi*/, PAR_IRQ, PARPORT_DMA_NONE /* dma */, - NULL /*struct pci_dev* */), - 0 /* shared irq flags */ ) + NULL /*struct pci_dev* */) ) printk(KERN_WARNING PFX "Probing parallel port failed.\n"); #endif /* CONFIG_PARPORT_PC */ diff --git a/trunk/drivers/pci/dmar.c b/trunk/drivers/pci/dmar.c index fa3a11365ec3..25a00ce4f24d 100644 --- a/trunk/drivers/pci/dmar.c +++ b/trunk/drivers/pci/dmar.c @@ -173,21 +173,12 @@ dmar_parse_one_drhd(struct acpi_dmar_header *header) struct dmar_drhd_unit *dmaru; int ret = 0; - drhd = (struct acpi_dmar_hardware_unit *)header; - if (!drhd->address) { - /* Promote an attitude of violence to a BIOS engineer today */ - WARN(1, "Your BIOS is broken; DMAR reported at address zero!\n" - "BIOS vendor: %s; Ver: %s; Product Version: %s\n", - dmi_get_system_info(DMI_BIOS_VENDOR), - dmi_get_system_info(DMI_BIOS_VERSION), - dmi_get_system_info(DMI_PRODUCT_VERSION)); - return -ENODEV; - } dmaru = kzalloc(sizeof(*dmaru), GFP_KERNEL); if (!dmaru) return -ENOMEM; dmaru->hdr = header; + drhd = (struct acpi_dmar_hardware_unit *)header; dmaru->reg_base_addr = drhd->address; dmaru->segment = drhd->segment; dmaru->include_all = drhd->flags & 0x1; /* BIT0: INCLUDE_ALL */ diff --git a/trunk/drivers/pci/intel-iommu.c b/trunk/drivers/pci/intel-iommu.c index 001b328adf80..fb3a3f3fca7a 100644 --- a/trunk/drivers/pci/intel-iommu.c +++ b/trunk/drivers/pci/intel-iommu.c @@ -733,8 +733,8 @@ static void dma_pte_clear_range(struct dmar_domain *domain, u64 start, u64 end) start &= (((u64)1) << addr_width) - 1; end &= (((u64)1) << addr_width) - 1; /* in case it's partial page */ - start &= PAGE_MASK; - end = PAGE_ALIGN(end); + start = PAGE_ALIGN(start); + end &= PAGE_MASK; npages = (end - start) / VTD_PAGE_SIZE; /* we don't need lock here, nobody else touches the iova range */ diff --git a/trunk/drivers/scsi/3w-9xxx.c b/trunk/drivers/scsi/3w-9xxx.c index 8b7983aba8f7..fdb14ec4fd47 100644 --- a/trunk/drivers/scsi/3w-9xxx.c +++ b/trunk/drivers/scsi/3w-9xxx.c @@ -2234,10 +2234,10 @@ static int twa_resume(struct pci_dev *pdev) pci_set_master(pdev); pci_try_set_mwi(pdev); - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) - || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) - || pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { + if (pci_set_dma_mask(pdev, DMA_64BIT_MASK) + || pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK)) + if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) + || pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { TW_PRINTK(host, TW_DRIVER, 0x40, "Failed to set dma mask during resume"); retval = -ENODEV; goto out_disable_device; diff --git a/trunk/drivers/scsi/aacraid/aachba.c b/trunk/drivers/scsi/aacraid/aachba.c index 2a889853a106..280261c451d6 100644 --- a/trunk/drivers/scsi/aacraid/aachba.c +++ b/trunk/drivers/scsi/aacraid/aachba.c @@ -1378,7 +1378,7 @@ int aac_get_adapter_info(struct aac_dev* dev) if (dev->nondasd_support && !dev->in_reset) printk(KERN_INFO "%s%d: Non-DASD support enabled.\n",dev->name, dev->id); - if (dma_get_required_mask(&dev->pdev->dev) > DMA_BIT_MASK(32)) + if (dma_get_required_mask(&dev->pdev->dev) > DMA_32BIT_MASK) dev->needs_dac = 1; dev->dac_support = 0; if ((sizeof(dma_addr_t) > 4) && dev->needs_dac && diff --git a/trunk/drivers/scsi/lpfc/lpfc_scsi.c b/trunk/drivers/scsi/lpfc/lpfc_scsi.c index 36fd2e75da1c..b1bd3fc7bae8 100644 --- a/trunk/drivers/scsi/lpfc/lpfc_scsi.c +++ b/trunk/drivers/scsi/lpfc/lpfc_scsi.c @@ -1394,7 +1394,7 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_scsi_buf *lpfc_cmd, */ cmd->sense_buffer[8] = 0; /* Information */ cmd->sense_buffer[9] = 0xa; /* Add. length */ - bghm /= cmd->device->sector_size; + do_div(bghm, cmd->device->sector_size); failing_sector = scsi_get_lba(cmd); failing_sector += bghm; diff --git a/trunk/drivers/scsi/mpt2sas/mpt2sas_base.c b/trunk/drivers/scsi/mpt2sas/mpt2sas_base.c index a91f5143ceac..52427a8324f5 100644 --- a/trunk/drivers/scsi/mpt2sas/mpt2sas_base.c +++ b/trunk/drivers/scsi/mpt2sas/mpt2sas_base.c @@ -855,9 +855,9 @@ _base_config_dma_addressing(struct MPT2SAS_ADAPTER *ioc, struct pci_dev *pdev) if (sizeof(dma_addr_t) > 4) { const uint64_t required_mask = dma_get_required_mask(&pdev->dev); - if ((required_mask > DMA_BIT_MASK(32)) && !pci_set_dma_mask(pdev, - DMA_BIT_MASK(64)) && !pci_set_consistent_dma_mask(pdev, - DMA_BIT_MASK(64))) { + if ((required_mask > DMA_32BIT_MASK) && !pci_set_dma_mask(pdev, + DMA_64BIT_MASK) && !pci_set_consistent_dma_mask(pdev, + DMA_64BIT_MASK)) { ioc->base_add_sg_single = &_base_add_sg_single_64; ioc->sge_size = sizeof(Mpi2SGESimple64_t); desc = "64"; @@ -865,8 +865,8 @@ _base_config_dma_addressing(struct MPT2SAS_ADAPTER *ioc, struct pci_dev *pdev) } } - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) - && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) { + if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK) + && !pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { ioc->base_add_sg_single = &_base_add_sg_single_32; ioc->sge_size = sizeof(Mpi2SGESimple32_t); desc = "32"; diff --git a/trunk/drivers/scsi/qla1280.c b/trunk/drivers/scsi/qla1280.c index 5defe5ea5eda..687dcf2d0154 100644 --- a/trunk/drivers/scsi/qla1280.c +++ b/trunk/drivers/scsi/qla1280.c @@ -1663,7 +1663,7 @@ qla1280_load_firmware_pio(struct scsi_qla_host *ha) /* Load RISC code. */ risc_address = ha->fwstart; - fw_data = (const __le16 *)&fw->data[6]; + fw_data = (const __le16 *)&fw->data[4]; risc_code_size = (fw->size - 6) / 2; for (i = 0; i < risc_code_size; i++) { @@ -1722,7 +1722,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) /* Load RISC code. */ risc_address = ha->fwstart; - fw_data = (const __le16 *)&fw->data[6]; + fw_data = (const __le16 *)&fw->data[4]; risc_code_size = (fw->size - 6) / 2; dprintk(1, "%s: DMA RISC code (%i) words\n", diff --git a/trunk/drivers/scsi/scsi_priv.h b/trunk/drivers/scsi/scsi_priv.h index fbc83bebdd8e..e1850904ff73 100644 --- a/trunk/drivers/scsi/scsi_priv.h +++ b/trunk/drivers/scsi/scsi_priv.h @@ -38,6 +38,9 @@ static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition) { }; #endif +/* scsi_scan.c */ +int scsi_complete_async_scans(void); + /* scsi_devinfo.c */ extern int scsi_get_device_flags(struct scsi_device *sdev, const unsigned char *vendor, diff --git a/trunk/drivers/scsi/scsi_wait_scan.c b/trunk/drivers/scsi/scsi_wait_scan.c index 2f21af21269a..8a636103083d 100644 --- a/trunk/drivers/scsi/scsi_wait_scan.c +++ b/trunk/drivers/scsi/scsi_wait_scan.c @@ -11,7 +11,7 @@ */ #include -#include +#include "scsi_priv.h" static int __init wait_scan_init(void) { diff --git a/trunk/drivers/serial/Kconfig b/trunk/drivers/serial/Kconfig index 343e3a35b6a3..0328fd4006e5 100644 --- a/trunk/drivers/serial/Kconfig +++ b/trunk/drivers/serial/Kconfig @@ -854,7 +854,7 @@ config SERIAL_IMX_CONSOLE config SERIAL_UARTLITE tristate "Xilinx uartlite serial port support" - depends on PPC32 || MICROBLAZE + depends on PPC32 select SERIAL_CORE help Say Y here if you want to use the Xilinx uartlite serial controller. @@ -1340,7 +1340,7 @@ config SERIAL_NETX_CONSOLE config SERIAL_OF_PLATFORM tristate "Serial port on Open Firmware platform bus" - depends on PPC_OF || MICROBLAZE + depends on PPC_OF depends on SERIAL_8250 || SERIAL_OF_PLATFORM_NWPSERIAL help If you have a PowerPC based system that has serial ports diff --git a/trunk/drivers/sh/intc.c b/trunk/drivers/sh/intc.c index 12d13d99b6f0..7fb9b5c4669a 100644 --- a/trunk/drivers/sh/intc.c +++ b/trunk/drivers/sh/intc.c @@ -44,7 +44,6 @@ struct intc_handle_int { struct intc_desc_int { struct list_head list; struct sys_device sysdev; - pm_message_t state; unsigned long *reg; #ifdef CONFIG_SMP unsigned long *smp; @@ -787,44 +786,18 @@ static int intc_suspend(struct sys_device *dev, pm_message_t state) /* get intc controller associated with this sysdev */ d = container_of(dev, struct intc_desc_int, sysdev); - switch (state.event) { - case PM_EVENT_ON: - if (d->state.event != PM_EVENT_FREEZE) - break; - for_each_irq_desc(irq, desc) { - if (desc->chip != &d->chip) - continue; - if (desc->status & IRQ_DISABLED) - intc_disable(irq); - else - intc_enable(irq); - } - break; - case PM_EVENT_FREEZE: - /* nothing has to be done */ - break; - case PM_EVENT_SUSPEND: - /* enable wakeup irqs belonging to this intc controller */ - for_each_irq_desc(irq, desc) { - if ((desc->status & IRQ_WAKEUP) && (desc->chip == &d->chip)) - intc_enable(irq); - } - break; + /* enable wakeup irqs belonging to this intc controller */ + for_each_irq_desc(irq, desc) { + if ((desc->status & IRQ_WAKEUP) && (desc->chip == &d->chip)) + intc_enable(irq); } - d->state = state; return 0; } -static int intc_resume(struct sys_device *dev) -{ - return intc_suspend(dev, PMSG_ON); -} - static struct sysdev_class intc_sysdev_class = { .name = "intc", .suspend = intc_suspend, - .resume = intc_resume, }; /* register this intc as sysdev to allow suspend/resume */ diff --git a/trunk/drivers/spi/spi.c b/trunk/drivers/spi/spi.c index 8eba98c8ed1e..643908b74bc0 100644 --- a/trunk/drivers/spi/spi.c +++ b/trunk/drivers/spi/spi.c @@ -658,7 +658,7 @@ int spi_write_then_read(struct spi_device *spi, int status; struct spi_message message; - struct spi_transfer x[2]; + struct spi_transfer x; u8 *local_buf; /* Use preallocated DMA-safe buffer. We can't avoid copying here, @@ -669,15 +669,9 @@ int spi_write_then_read(struct spi_device *spi, return -EINVAL; spi_message_init(&message); - memset(x, 0, sizeof x); - if (n_tx) { - x[0].len = n_tx; - spi_message_add_tail(&x[0], &message); - } - if (n_rx) { - x[1].len = n_rx; - spi_message_add_tail(&x[1], &message); - } + memset(&x, 0, sizeof x); + x.len = n_tx + n_rx; + spi_message_add_tail(&x, &message); /* ... unless someone else is using the pre-allocated buffer */ if (!mutex_trylock(&lock)) { @@ -688,15 +682,15 @@ int spi_write_then_read(struct spi_device *spi, local_buf = buf; memcpy(local_buf, txbuf, n_tx); - x[0].tx_buf = local_buf; - x[1].rx_buf = local_buf + n_tx; + x.tx_buf = local_buf; + x.rx_buf = local_buf; /* do the i/o */ status = spi_sync(spi, &message); if (status == 0) - memcpy(rxbuf, x[1].rx_buf, n_rx); + memcpy(rxbuf, x.rx_buf + n_tx, n_rx); - if (x[0].tx_buf == buf) + if (x.tx_buf == buf) mutex_unlock(&lock); else kfree(local_buf); diff --git a/trunk/drivers/staging/b3dfg/b3dfg.c b/trunk/drivers/staging/b3dfg/b3dfg.c index 75ebe338c6f2..0348072b3ab5 100644 --- a/trunk/drivers/staging/b3dfg/b3dfg.c +++ b/trunk/drivers/staging/b3dfg/b3dfg.c @@ -1000,7 +1000,7 @@ static int __devinit b3dfg_probe(struct pci_dev *pdev, pci_set_master(pdev); - r = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); + r = pci_set_dma_mask(pdev, DMA_32BIT_MASK); if (r) { dev_err(&pdev->dev, "no usable DMA configuration\n"); goto err_free_res; diff --git a/trunk/drivers/usb/class/cdc-acm.c b/trunk/drivers/usb/class/cdc-acm.c index 0a69c0977e3f..869d47cb6db3 100644 --- a/trunk/drivers/usb/class/cdc-acm.c +++ b/trunk/drivers/usb/class/cdc-acm.c @@ -546,6 +546,10 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp) tty->driver_data = acm; acm->tty = tty; + /* force low_latency on so that our tty_push actually forces the data through, + otherwise it is scheduled, and with high data rates data can get lost. */ + tty->low_latency = 1; + if (usb_autopm_get_interface(acm->control) < 0) goto early_bail; else diff --git a/trunk/drivers/usb/otg/nop-usb-xceiv.c b/trunk/drivers/usb/otg/nop-usb-xceiv.c index c567168f89af..4b933f646f2e 100644 --- a/trunk/drivers/usb/otg/nop-usb-xceiv.c +++ b/trunk/drivers/usb/otg/nop-usb-xceiv.c @@ -36,14 +36,14 @@ struct nop_usb_xceiv { struct device *dev; }; -static u64 nop_xceiv_dmamask = DMA_BIT_MASK(32); +static u64 nop_xceiv_dmamask = DMA_32BIT_MASK; static struct platform_device nop_xceiv_device = { .name = "nop_usb_xceiv", .id = -1, .dev = { .dma_mask = &nop_xceiv_dmamask, - .coherent_dma_mask = DMA_BIT_MASK(32), + .coherent_dma_mask = DMA_32BIT_MASK, .platform_data = NULL, }, }; diff --git a/trunk/drivers/usb/serial/ti_usb_3410_5052.c b/trunk/drivers/usb/serial/ti_usb_3410_5052.c index 9c4c700c7cc6..2620bf6fe5e1 100644 --- a/trunk/drivers/usb/serial/ti_usb_3410_5052.c +++ b/trunk/drivers/usb/serial/ti_usb_3410_5052.c @@ -1215,22 +1215,20 @@ static void ti_bulk_in_callback(struct urb *urb) } tty = tty_port_tty_get(&port->port); - if (tty) { - if (urb->actual_length) { - usb_serial_debug_data(debug, dev, __func__, - urb->actual_length, urb->transfer_buffer); - - if (!tport->tp_is_open) - dbg("%s - port closed, dropping data", - __func__); - else - ti_recv(&urb->dev->dev, tty, + if (tty && urb->actual_length) { + usb_serial_debug_data(debug, dev, __func__, + urb->actual_length, urb->transfer_buffer); + + if (!tport->tp_is_open) + dbg("%s - port closed, dropping data", __func__); + else + ti_recv(&urb->dev->dev, tty, urb->transfer_buffer, urb->actual_length); - spin_lock(&tport->tp_lock); - tport->tp_icount.rx += urb->actual_length; - spin_unlock(&tport->tp_lock); - } + + spin_lock(&tport->tp_lock); + tport->tp_icount.rx += urb->actual_length; + spin_unlock(&tport->tp_lock); tty_kref_put(tty); } diff --git a/trunk/drivers/video/aty/radeon_base.c b/trunk/drivers/video/aty/radeon_base.c index 6c37e8ee5efe..16bb7e3c0310 100644 --- a/trunk/drivers/video/aty/radeon_base.c +++ b/trunk/drivers/video/aty/radeon_base.c @@ -698,8 +698,8 @@ static void __devinit radeon_get_pllinfo(struct radeonfb_info *rinfo) found: /* * Some methods fail to retrieve SCLK and MCLK values, we apply default - * settings in this case (200Mhz). If that really happens often, we - * could fetch from registers instead... + * settings in this case (200Mhz). If that really happne often, we could + * fetch from registers instead... */ if (rinfo->pll.mclk == 0) rinfo->pll.mclk = 20000; diff --git a/trunk/drivers/video/backlight/backlight.c b/trunk/drivers/video/backlight/backlight.c index 157057c79ca3..dd37cbcaf8ce 100644 --- a/trunk/drivers/video/backlight/backlight.c +++ b/trunk/drivers/video/backlight/backlight.c @@ -35,6 +35,8 @@ static int fb_notifier_callback(struct notifier_block *self, return 0; bd = container_of(self, struct backlight_device, fb_notif); + if (!lock_fb_info(evdata->info)) + return -ENODEV; mutex_lock(&bd->ops_lock); if (bd->ops) if (!bd->ops->check_fb || @@ -47,6 +49,7 @@ static int fb_notifier_callback(struct notifier_block *self, backlight_update_status(bd); } mutex_unlock(&bd->ops_lock); + unlock_fb_info(evdata->info); return 0; } diff --git a/trunk/drivers/video/backlight/lcd.c b/trunk/drivers/video/backlight/lcd.c index b6449470106c..0bb13df0fa89 100644 --- a/trunk/drivers/video/backlight/lcd.c +++ b/trunk/drivers/video/backlight/lcd.c @@ -40,6 +40,8 @@ static int fb_notifier_callback(struct notifier_block *self, if (!ld->ops) return 0; + if (!lock_fb_info(evdata->info)) + return -ENODEV; mutex_lock(&ld->ops_lock); if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) { if (event == FB_EVENT_BLANK) { @@ -51,6 +53,7 @@ static int fb_notifier_callback(struct notifier_block *self, } } mutex_unlock(&ld->ops_lock); + unlock_fb_info(evdata->info); return 0; } diff --git a/trunk/drivers/video/cirrusfb.c b/trunk/drivers/video/cirrusfb.c index 4c2bf923418c..d42e385f091c 100644 --- a/trunk/drivers/video/cirrusfb.c +++ b/trunk/drivers/video/cirrusfb.c @@ -567,7 +567,9 @@ static int cirrusfb_check_var(struct fb_var_screeninfo *var, default: dev_dbg(info->device, "Unsupported bpp size: %d\n", var->bits_per_pixel); - return -EINVAL; + assert(false); + /* should never occur */ + break; } if (var->xres_virtual < var->xres) diff --git a/trunk/drivers/video/console/fbcon.c b/trunk/drivers/video/console/fbcon.c index 471a9a60376a..2cd500a304f2 100644 --- a/trunk/drivers/video/console/fbcon.c +++ b/trunk/drivers/video/console/fbcon.c @@ -2263,12 +2263,9 @@ static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info, } - if (!lock_fb_info(info)) - return; event.info = info; event.data = ␣ fb_notifier_call_chain(FB_EVENT_CONBLANK, &event); - unlock_fb_info(info); } static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch) @@ -2959,6 +2956,8 @@ static int fbcon_fb_unregistered(struct fb_info *info) { int i, idx; + if (!lock_fb_info(info)) + return -ENODEV; idx = info->node; for (i = first_fb_vc; i <= last_fb_vc; i++) { if (con2fb_map[i] == idx) @@ -2986,6 +2985,8 @@ static int fbcon_fb_unregistered(struct fb_info *info) if (primary_device == idx) primary_device = -1; + unlock_fb_info(info); + if (!num_registered_fb) unregister_con_driver(&fb_con); @@ -3026,8 +3027,11 @@ static int fbcon_fb_registered(struct fb_info *info) { int ret = 0, i, idx; + if (!lock_fb_info(info)) + return -ENODEV; idx = info->node; fbcon_select_primary(info); + unlock_fb_info(info); if (info_idx == -1) { for (i = first_fb_vc; i <= last_fb_vc; i++) { @@ -3148,23 +3152,53 @@ static int fbcon_event_notify(struct notifier_block *self, switch(action) { case FB_EVENT_SUSPEND: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_suspended(info); + unlock_fb_info(info); break; case FB_EVENT_RESUME: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_resumed(info); + unlock_fb_info(info); break; case FB_EVENT_MODE_CHANGE: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_modechanged(info); + unlock_fb_info(info); break; case FB_EVENT_MODE_CHANGE_ALL: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_set_all_vcs(info); + unlock_fb_info(info); break; case FB_EVENT_MODE_DELETE: mode = event->data; + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } ret = fbcon_mode_deleted(info, mode); + unlock_fb_info(info); break; case FB_EVENT_FB_UNBIND: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } idx = info->node; + unlock_fb_info(info); ret = fbcon_fb_unbind(idx); break; case FB_EVENT_FB_REGISTERED: @@ -3183,14 +3217,29 @@ static int fbcon_event_notify(struct notifier_block *self, con2fb->framebuffer = con2fb_map[con2fb->console - 1]; break; case FB_EVENT_BLANK: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_fb_blanked(info, *(int *)event->data); + unlock_fb_info(info); break; case FB_EVENT_NEW_MODELIST: + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_new_modelist(info); + unlock_fb_info(info); break; case FB_EVENT_GET_REQ: caps = event->data; + if (!lock_fb_info(info)) { + ret = -ENODEV; + goto done; + } fbcon_get_requirement(info, caps); + unlock_fb_info(info); break; } done: diff --git a/trunk/drivers/video/efifb.c b/trunk/drivers/video/efifb.c index 8dea2bc92705..0c5b9a9fd56f 100644 --- a/trunk/drivers/video/efifb.c +++ b/trunk/drivers/video/efifb.c @@ -210,15 +210,12 @@ static int __init efifb_probe(struct platform_device *dev) unsigned int size_total; int request_succeeded = 0; + printk(KERN_INFO "efifb: probing for efifb\n"); + if (!screen_info.lfb_depth) screen_info.lfb_depth = 32; if (!screen_info.pages) screen_info.pages = 1; - if (!screen_info.lfb_base) { - printk(KERN_DEBUG "efifb: invalid framebuffer address\n"); - return -ENODEV; - } - printk(KERN_INFO "efifb: probing for efifb\n"); /* just assume they're all unset if any are */ if (!screen_info.blue_size) { diff --git a/trunk/drivers/video/fbmem.c b/trunk/drivers/video/fbmem.c index d412a1ddc12f..2ac32e6b5953 100644 --- a/trunk/drivers/video/fbmem.c +++ b/trunk/drivers/video/fbmem.c @@ -1097,11 +1097,8 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, return -EINVAL; con2fb.framebuffer = -1; event.data = &con2fb; - if (!lock_fb_info(info)) - return -ENODEV; event.info = info; fb_notifier_call_chain(FB_EVENT_GET_CONSOLE_MAP, &event); - unlock_fb_info(info); ret = copy_to_user(argp, &con2fb, sizeof(con2fb)) ? -EFAULT : 0; break; case FBIOPUT_CON2FBMAP: @@ -1118,11 +1115,8 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, break; } event.data = &con2fb; - if (!lock_fb_info(info)) - return -ENODEV; event.info = info; ret = fb_notifier_call_chain(FB_EVENT_SET_CONSOLE_MAP, &event); - unlock_fb_info(info); break; case FBIOBLANK: if (!lock_fb_info(info)) @@ -1527,10 +1521,7 @@ register_framebuffer(struct fb_info *fb_info) registered_fb[i] = fb_info; event.info = fb_info; - if (!lock_fb_info(fb_info)) - return -ENODEV; fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); - unlock_fb_info(fb_info); return 0; } @@ -1564,12 +1555,8 @@ unregister_framebuffer(struct fb_info *fb_info) goto done; } - - if (!lock_fb_info(fb_info)) - return -ENODEV; event.info = fb_info; ret = fb_notifier_call_chain(FB_EVENT_FB_UNBIND, &event); - unlock_fb_info(fb_info); if (ret) { ret = -EINVAL; @@ -1603,8 +1590,6 @@ void fb_set_suspend(struct fb_info *info, int state) { struct fb_event event; - if (!lock_fb_info(info)) - return; event.info = info; if (state) { fb_notifier_call_chain(FB_EVENT_SUSPEND, &event); @@ -1613,7 +1598,6 @@ void fb_set_suspend(struct fb_info *info, int state) info->state = FBINFO_STATE_RUNNING; fb_notifier_call_chain(FB_EVENT_RESUME, &event); } - unlock_fb_info(info); } /** @@ -1683,11 +1667,8 @@ int fb_new_modelist(struct fb_info *info) err = 1; if (!list_empty(&info->modelist)) { - if (!lock_fb_info(info)) - return -ENODEV; event.info = info; err = fb_notifier_call_chain(FB_EVENT_NEW_MODELIST, &event); - unlock_fb_info(info); } return err; diff --git a/trunk/drivers/video/intelfb/intelfb.h b/trunk/drivers/video/intelfb/intelfb.h index 40984551c927..a50bea614804 100644 --- a/trunk/drivers/video/intelfb/intelfb.h +++ b/trunk/drivers/video/intelfb/intelfb.h @@ -53,7 +53,6 @@ #define PCI_DEVICE_ID_INTEL_830M 0x3577 #define PCI_DEVICE_ID_INTEL_845G 0x2562 #define PCI_DEVICE_ID_INTEL_85XGM 0x3582 -#define PCI_DEVICE_ID_INTEL_854 0x358E #define PCI_DEVICE_ID_INTEL_865G 0x2572 #define PCI_DEVICE_ID_INTEL_915G 0x2582 #define PCI_DEVICE_ID_INTEL_915GM 0x2592 @@ -155,7 +154,6 @@ enum intel_chips { INTEL_85XGM, INTEL_852GM, INTEL_852GME, - INTEL_854, INTEL_855GM, INTEL_855GME, INTEL_865G, diff --git a/trunk/drivers/video/intelfb/intelfb_i2c.c b/trunk/drivers/video/intelfb/intelfb_i2c.c index 487f2be47460..b3065492bb20 100644 --- a/trunk/drivers/video/intelfb/intelfb_i2c.c +++ b/trunk/drivers/video/intelfb/intelfb_i2c.c @@ -156,7 +156,6 @@ void intelfb_create_i2c_busses(struct intelfb_info *dinfo) switch(dinfo->chipset) { case INTEL_830M: case INTEL_845G: - case INTEL_854: case INTEL_855GM: case INTEL_865G: dinfo->output[i].type = INTELFB_OUTPUT_DVO; diff --git a/trunk/drivers/video/intelfb/intelfbdrv.c b/trunk/drivers/video/intelfb/intelfbdrv.c index ace14fe02fc4..6d8e5415c809 100644 --- a/trunk/drivers/video/intelfb/intelfbdrv.c +++ b/trunk/drivers/video/intelfb/intelfbdrv.c @@ -182,7 +182,6 @@ static struct pci_device_id intelfb_pci_table[] __devinitdata = { { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_865G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_865G }, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_854, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_854 }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915G }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_915GM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_915GM }, { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_945G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_945G }, diff --git a/trunk/drivers/video/intelfb/intelfbhw.c b/trunk/drivers/video/intelfb/intelfbhw.c index 0689f97c5238..8b26b27c2db6 100644 --- a/trunk/drivers/video/intelfb/intelfbhw.c +++ b/trunk/drivers/video/intelfb/intelfbhw.c @@ -84,11 +84,6 @@ int intelfbhw_get_chipset(struct pci_dev *pdev, struct intelfb_info *dinfo) dinfo->mobile = 0; dinfo->pll_index = PLLS_I8xx; return 0; - case PCI_DEVICE_ID_INTEL_854: - dinfo->mobile = 1; - dinfo->name = "Intel(R) 854"; - dinfo->chipset = INTEL_854; - return 0; case PCI_DEVICE_ID_INTEL_85XGM: tmp = 0; dinfo->mobile = 1; diff --git a/trunk/drivers/video/s3fb.c b/trunk/drivers/video/s3fb.c index c3fad34309ed..4dcec48a1d78 100644 --- a/trunk/drivers/video/s3fb.c +++ b/trunk/drivers/video/s3fb.c @@ -45,11 +45,11 @@ struct s3fb_info { static const struct svga_fb_format s3fb_formats[] = { { 0, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, FB_TYPE_TEXT, FB_AUX_TEXT_SVGA_STEP4, FB_VISUAL_PSEUDOCOLOR, 8, 16}, - { 4, {0, 4, 0}, {0, 4, 0}, {0, 4, 0}, {0, 0, 0}, 0, + { 4, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 8, 16}, - { 4, {0, 4, 0}, {0, 4, 0}, {0, 4, 0}, {0, 0, 0}, 1, + { 4, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 1, FB_TYPE_INTERLEAVED_PLANES, 1, FB_VISUAL_PSEUDOCOLOR, 8, 16}, - { 8, {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, 0, + { 8, {0, 6, 0}, {0, 6, 0}, {0, 6, 0}, {0, 0, 0}, 0, FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_PSEUDOCOLOR, 4, 8}, {16, {10, 5, 0}, {5, 5, 0}, {0, 5, 0}, {0, 0, 0}, 0, FB_TYPE_PACKED_PIXELS, 0, FB_VISUAL_TRUECOLOR, 2, 4}, diff --git a/trunk/drivers/video/sa1100fb.c b/trunk/drivers/video/sa1100fb.c index 10ddad8e17d6..fad58cf9ef73 100644 --- a/trunk/drivers/video/sa1100fb.c +++ b/trunk/drivers/video/sa1100fb.c @@ -199,20 +199,16 @@ extern void (*sa1100fb_backlight_power)(int on); extern void (*sa1100fb_lcd_power)(int on); -static struct sa1100fb_rgb rgb_4 = { +/* + * IMHO this looks wrong. In 8BPP, length should be 8. + */ +static struct sa1100fb_rgb rgb_8 = { .red = { .offset = 0, .length = 4, }, .green = { .offset = 0, .length = 4, }, .blue = { .offset = 0, .length = 4, }, .transp = { .offset = 0, .length = 0, }, }; -static struct sa1100fb_rgb rgb_8 = { - .red = { .offset = 0, .length = 8, }, - .green = { .offset = 0, .length = 8, }, - .blue = { .offset = 0, .length = 8, }, - .transp = { .offset = 0, .length = 0, }, -}; - static struct sa1100fb_rgb def_rgb_16 = { .red = { .offset = 11, .length = 5, }, .green = { .offset = 5, .length = 6, }, @@ -617,7 +613,7 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel); switch (var->bits_per_pixel) { case 4: - rgbidx = RGB_4; + rgbidx = RGB_8; break; case 8: rgbidx = RGB_8; @@ -1386,7 +1382,6 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) fbi->fb.monspecs = monspecs; fbi->fb.pseudo_palette = (fbi + 1); - fbi->rgb[RGB_4] = &rgb_4; fbi->rgb[RGB_8] = &rgb_8; fbi->rgb[RGB_16] = &def_rgb_16; diff --git a/trunk/drivers/video/sa1100fb.h b/trunk/drivers/video/sa1100fb.h index 1c3b459865d8..86831db9a042 100644 --- a/trunk/drivers/video/sa1100fb.h +++ b/trunk/drivers/video/sa1100fb.h @@ -57,10 +57,9 @@ struct sa1100fb_lcd_reg { unsigned long lccr3; }; -#define RGB_4 (0) -#define RGB_8 (1) -#define RGB_16 (2) -#define NR_RGB 3 +#define RGB_8 (0) +#define RGB_16 (1) +#define NR_RGB 2 struct sa1100fb_info { struct fb_info fb; diff --git a/trunk/drivers/video/sis/sis_main.c b/trunk/drivers/video/sis/sis_main.c index 7e17ee95a97a..346d6458cf76 100644 --- a/trunk/drivers/video/sis/sis_main.c +++ b/trunk/drivers/video/sis/sis_main.c @@ -1129,7 +1129,7 @@ sisfb_bpp_to_var(struct sis_video_info *ivideo, struct fb_var_screeninfo *var) switch(var->bits_per_pixel) { case 8: var->red.offset = var->green.offset = var->blue.offset = 0; - var->red.length = var->green.length = var->blue.length = 8; + var->red.length = var->green.length = var->blue.length = 6; break; case 16: var->red.offset = 11; diff --git a/trunk/drivers/video/skeletonfb.c b/trunk/drivers/video/skeletonfb.c index 89158bc71da2..a439159204a8 100644 --- a/trunk/drivers/video/skeletonfb.c +++ b/trunk/drivers/video/skeletonfb.c @@ -308,11 +308,9 @@ static int xxxfb_setcolreg(unsigned regno, unsigned red, unsigned green, * color depth = SUM(var->{color}.length) * * Pseudocolor: - * var->{color}.offset is 0 unless the palette index takes less than - * bits_per_pixel bits and is stored in the upper - * bits of the pixel value - * var->{color}.length is set so that 1 << length is the number of - * available palette entries + * var->{color}.offset is 0 + * var->{color}.length contains width of DAC or the number of unique + * colors available (color depth) * pseudo_palette is not used * RAMDAC[X] is programmed to (red, green, blue) * color depth = var->{color}.length diff --git a/trunk/drivers/video/uvesafb.c b/trunk/drivers/video/uvesafb.c index 421770b5e6ab..0b370aebdbfd 100644 --- a/trunk/drivers/video/uvesafb.c +++ b/trunk/drivers/video/uvesafb.c @@ -55,7 +55,6 @@ static u16 maxvf __devinitdata; /* maximum vertical frequency */ static u16 maxhf __devinitdata; /* maximum horizontal frequency */ static u16 vbemode __devinitdata; /* force use of a specific VBE mode */ static char *mode_option __devinitdata; -static u8 dac_width = 6; static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX]; static DEFINE_MUTEX(uvfb_lock); @@ -304,10 +303,22 @@ static void uvesafb_setup_var(struct fb_var_screeninfo *var, var->blue.offset = 0; var->transp.offset = 0; - var->red.length = 8; - var->green.length = 8; - var->blue.length = 8; - var->transp.length = 0; + /* + * We're assuming that we can switch the DAC to 8 bits. If + * this proves to be incorrect, we'll update the fields + * later in set_par(). + */ + if (par->vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) { + var->red.length = 8; + var->green.length = 8; + var->blue.length = 8; + var->transp.length = 0; + } else { + var->red.length = 6; + var->green.length = 6; + var->blue.length = 6; + var->transp.length = 0; + } } } @@ -995,7 +1006,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green, struct fb_info *info) { struct uvesafb_pal_entry entry; - int shift = 16 - dac_width; + int shift = 16 - info->var.green.length; int err = 0; if (regno >= info->cmap.len) @@ -1044,7 +1055,7 @@ static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green, static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info) { struct uvesafb_pal_entry *entries; - int shift = 16 - dac_width; + int shift = 16 - info->var.green.length; int i, err = 0; if (info->var.bits_per_pixel == 8) { @@ -1306,9 +1317,13 @@ static int uvesafb_set_par(struct fb_info *info) err = uvesafb_exec(task); if (err || (task->t.regs.eax & 0xffff) != 0x004f || ((task->t.regs.ebx & 0xff00) >> 8) != 8) { - dac_width = 6; - } else { - dac_width = 8; + /* + * We've failed to set the DAC palette format - + * time to correct var. + */ + info->var.red.length = 6; + info->var.green.length = 6; + info->var.blue.length = 6; } } diff --git a/trunk/drivers/video/vfb.c b/trunk/drivers/video/vfb.c index 050d432c7d95..cc919ae46571 100644 --- a/trunk/drivers/video/vfb.c +++ b/trunk/drivers/video/vfb.c @@ -318,16 +318,13 @@ static int vfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, * {hardwarespecific} contains width of RAMDAC * cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset) * RAMDAC[X] is programmed to (red, green, blue) - * + * * Pseudocolor: - * var->{color}.offset is 0 unless the palette index takes less than - * bits_per_pixel bits and is stored in the upper - * bits of the pixel value - * var->{color}.length is set so that 1 << length is the number of available - * palette entries + * uses offset = 0 && length = RAMDAC register width. + * var->{color}.offset is 0 + * var->{color}.length contains widht of DAC * cmap is not used * RAMDAC[X] is programmed to (red, green, blue) - * * Truecolor: * does not use DAC. Usually 3 are present. * var->{color}.offset contains start of bitfield diff --git a/trunk/drivers/watchdog/Kconfig b/trunk/drivers/watchdog/Kconfig index 5eb8f21da82e..63024145215d 100644 --- a/trunk/drivers/watchdog/Kconfig +++ b/trunk/drivers/watchdog/Kconfig @@ -240,6 +240,8 @@ config ORION5X_WATCHDOG To compile this driver as a module, choose M here: the module will be called orion5x_wdt. +# ARM26 Architecture + # AVR32 Architecture config AT32AP700X_WDT diff --git a/trunk/drivers/watchdog/Makefile b/trunk/drivers/watchdog/Makefile index 7f8c56b14f58..806b3eb08536 100644 --- a/trunk/drivers/watchdog/Makefile +++ b/trunk/drivers/watchdog/Makefile @@ -42,6 +42,8 @@ obj-$(CONFIG_IOP_WATCHDOG) += iop_wdt.o obj-$(CONFIG_DAVINCI_WATCHDOG) += davinci_wdt.o obj-$(CONFIG_ORION5X_WATCHDOG) += orion5x_wdt.o +# ARM26 Architecture + # AVR32 Architecture obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o diff --git a/trunk/drivers/watchdog/at91rm9200_wdt.c b/trunk/drivers/watchdog/at91rm9200_wdt.c index 29e52c237a3b..e35d54589232 100644 --- a/trunk/drivers/watchdog/at91rm9200_wdt.c +++ b/trunk/drivers/watchdog/at91rm9200_wdt.c @@ -197,7 +197,7 @@ static struct miscdevice at91wdt_miscdev = { .fops = &at91wdt_fops, }; -static int __devinit at91wdt_probe(struct platform_device *pdev) +static int __init at91wdt_probe(struct platform_device *pdev) { int res; @@ -214,7 +214,7 @@ static int __devinit at91wdt_probe(struct platform_device *pdev) return 0; } -static int __devexit at91wdt_remove(struct platform_device *pdev) +static int __exit at91wdt_remove(struct platform_device *pdev) { int res; @@ -252,7 +252,7 @@ static int at91wdt_resume(struct platform_device *pdev) static struct platform_driver at91wdt_driver = { .probe = at91wdt_probe, - .remove = __devexit_p(at91wdt_remove), + .remove = __exit_p(at91wdt_remove), .shutdown = at91wdt_shutdown, .suspend = at91wdt_suspend, .resume = at91wdt_resume, diff --git a/trunk/drivers/watchdog/i6300esb.c b/trunk/drivers/watchdog/i6300esb.c index 7ba0b11ec525..2dbe83570d65 100644 --- a/trunk/drivers/watchdog/i6300esb.c +++ b/trunk/drivers/watchdog/i6300esb.c @@ -52,10 +52,10 @@ #define ESB_LOCK_REG 0x68 /* WDT lock register */ /* Memory mapped registers */ -#define ESB_TIMER1_REG (BASEADDR + 0x00)/* Timer1 value after each reset */ -#define ESB_TIMER2_REG (BASEADDR + 0x04)/* Timer2 value after each reset */ -#define ESB_GINTSR_REG (BASEADDR + 0x08)/* General Interrupt Status Register */ -#define ESB_RELOAD_REG (BASEADDR + 0x0c)/* Reload register */ +#define ESB_TIMER1_REG BASEADDR + 0x00 /* Timer1 value after each reset */ +#define ESB_TIMER2_REG BASEADDR + 0x04 /* Timer2 value after each reset */ +#define ESB_GINTSR_REG BASEADDR + 0x08 /* General Interrupt Status Register */ +#define ESB_RELOAD_REG BASEADDR + 0x0c /* Reload register */ /* Lock register bits */ #define ESB_WDT_FUNC (0x01 << 2) /* Watchdog functionality */ @@ -68,7 +68,6 @@ #define ESB_WDT_INTTYPE (0x11 << 0) /* Interrupt type on timer1 timeout */ /* Reload register bits */ -#define ESB_WDT_TIMEOUT (0x01 << 9) /* Watchdog timed out */ #define ESB_WDT_RELOAD (0x01 << 8) /* prevent timeout */ /* Magic constants */ @@ -88,6 +87,7 @@ static struct platform_device *esb_platform_device; /* 30 sec default heartbeat (1 < heartbeat < 2*1023) */ #define WATCHDOG_HEARTBEAT 30 static int heartbeat = WATCHDOG_HEARTBEAT; /* in seconds */ + module_param(heartbeat, int, 0); MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (1> 9); + + /* Reset trigger flag and timers */ + esb_unlock_registers(); + writew((0x11 << 8), ESB_RELOAD_REG); + + /* Done */ + return 1; err_release: - pci_release_region(esb_pci, 0); + pci_release_region(esb_pci, 0); err_disable: - pci_disable_device(esb_pci); + pci_disable_device(esb_pci); err_devput: - pci_dev_put(esb_pci); + pci_dev_put(esb_pci); + } return 0; } -static void __devinit esb_initdevice(void) -{ - u8 val1; - u16 val2; - - /* - * Config register: - * Bit 5 : 0 = Enable WDT_OUTPUT - * Bit 2 : 0 = set the timer frequency to the PCI clock - * divided by 2^15 (approx 1KHz). - * Bits 1:0 : 11 = WDT_INT_TYPE Disabled. - * The watchdog has two timers, it can be setup so that the - * expiry of timer1 results in an interrupt and the expiry of - * timer2 results in a reboot. We set it to not generate - * any interrupts as there is not much we can do with it - * right now. - */ - pci_write_config_word(esb_pci, ESB_CONFIG_REG, 0x0003); - - /* Check that the WDT isn't already locked */ - pci_read_config_byte(esb_pci, ESB_LOCK_REG, &val1); - if (val1 & ESB_WDT_LOCK) - printk(KERN_WARNING PFX "nowayout already set\n"); - - /* Set the timer to watchdog mode and disable it for now */ - pci_write_config_byte(esb_pci, ESB_LOCK_REG, 0x00); - - /* Check if the watchdog was previously triggered */ - esb_unlock_registers(); - val2 = readw(ESB_RELOAD_REG); - if (val2 & ESB_WDT_TIMEOUT) - triggered = WDIOF_CARDRESET; - - /* Reset WDT_TIMEOUT flag and timers */ - esb_unlock_registers(); - writew((ESB_WDT_TIMEOUT | ESB_WDT_RELOAD), ESB_RELOAD_REG); - - /* And set the correct timeout value */ - esb_timer_set_heartbeat(heartbeat); -} - static int __devinit esb_probe(struct platform_device *dev) { int ret; @@ -440,17 +441,13 @@ static int __devinit esb_probe(struct platform_device *dev) /* Check that the heartbeat value is within it's range; if not reset to the default */ - if (heartbeat < 0x1 || heartbeat > 2 * 0x03ff) { - heartbeat = WATCHDOG_HEARTBEAT; + if (esb_timer_set_heartbeat(heartbeat)) { + esb_timer_set_heartbeat(WATCHDOG_HEARTBEAT); printk(KERN_INFO PFX "heartbeat value must be 1 wdt_max_duration)) - return -EINVAL; - - /* Set new watchdog time to be used when - * orion5x_wdt_enable() or orion5x_wdt_ping() is called. */ - heartbeat = new_time; - return 0; -} - -static const struct watchdog_info ident = { +static struct watchdog_info ident = { .options = WDIOF_MAGICCLOSE | WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, .identity = "Orion5x Watchdog", }; + static long orion5x_wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -172,7 +152,7 @@ static long orion5x_wdt_ioctl(struct file *file, unsigned int cmd, break; case WDIOC_KEEPALIVE: - orion5x_wdt_ping(); + wdt_enable(); ret = 0; break; @@ -181,11 +161,12 @@ static long orion5x_wdt_ioctl(struct file *file, unsigned int cmd, if (ret) break; - if (orion5x_wdt_settimeout(time)) { + if (time <= 0 || time > wdt_max_duration) { ret = -EINVAL; break; } - orion5x_wdt_ping(); + heartbeat = time; + wdt_enable(); /* Fall through */ case WDIOC_GETTIMEOUT: @@ -206,7 +187,7 @@ static long orion5x_wdt_ioctl(struct file *file, unsigned int cmd, static int orion5x_wdt_release(struct inode *inode, struct file *file) { if (test_bit(WDT_OK_TO_CLOSE, &wdt_status)) - orion5x_wdt_disable(); + wdt_disable(); else printk(KERN_CRIT "WATCHDOG: Device closed unexpectedly - " "timer will not stop\n"); @@ -249,7 +230,7 @@ static int __devinit orion5x_wdt_probe(struct platform_device *pdev) orion5x_wdt_miscdev.parent = &pdev->dev; wdt_max_duration = WDT_MAX_CYCLE_COUNT / wdt_tclk; - if (orion5x_wdt_settimeout(heartbeat)) + if (heartbeat <= 0 || heartbeat > wdt_max_duration) heartbeat = wdt_max_duration; ret = misc_register(&orion5x_wdt_miscdev); @@ -266,7 +247,7 @@ static int __devexit orion5x_wdt_remove(struct platform_device *pdev) int ret; if (test_bit(WDT_IN_USE, &wdt_status)) { - orion5x_wdt_disable(); + wdt_disable(); clear_bit(WDT_IN_USE, &wdt_status); } @@ -277,16 +258,9 @@ static int __devexit orion5x_wdt_remove(struct platform_device *pdev) return ret; } -static void orion5x_wdt_shutdown(struct platform_device *pdev) -{ - if (test_bit(WDT_IN_USE, &wdt_status)) - orion5x_wdt_disable(); -} - static struct platform_driver orion5x_wdt_driver = { .probe = orion5x_wdt_probe, .remove = __devexit_p(orion5x_wdt_remove), - .shutdown = orion5x_wdt_shutdown, .driver = { .owner = THIS_MODULE, .name = "orion5x_wdt", @@ -311,11 +285,10 @@ MODULE_AUTHOR("Sylver Bruneau "); MODULE_DESCRIPTION("Orion5x Processor Watchdog"); module_param(heartbeat, int, 0); -MODULE_PARM_DESC(heartbeat, "Initial watchdog heartbeat in seconds"); +MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds"); module_param(nowayout, int, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" - __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); +MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started"); MODULE_LICENSE("GPL"); MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); diff --git a/trunk/drivers/xen/cpu_hotplug.c b/trunk/drivers/xen/cpu_hotplug.c index bdfd584ad853..5f54c01c1568 100644 --- a/trunk/drivers/xen/cpu_hotplug.c +++ b/trunk/drivers/xen/cpu_hotplug.c @@ -21,41 +21,29 @@ static void disable_hotplug_cpu(int cpu) set_cpu_present(cpu, false); } -static int vcpu_online(unsigned int cpu) +static void vcpu_hotplug(unsigned int cpu) { int err; char dir[32], state[32]; + if (!cpu_possible(cpu)) + return; + sprintf(dir, "cpu/%u", cpu); err = xenbus_scanf(XBT_NIL, dir, "availability", "%s", state); if (err != 1) { printk(KERN_ERR "XENBUS: Unable to read cpu state\n"); - return err; - } - - if (strcmp(state, "online") == 0) - return 1; - else if (strcmp(state, "offline") == 0) - return 0; - - printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", state, cpu); - return -EINVAL; -} -static void vcpu_hotplug(unsigned int cpu) -{ - if (!cpu_possible(cpu)) return; + } - switch (vcpu_online(cpu)) { - case 1: + if (strcmp(state, "online") == 0) { enable_hotplug_cpu(cpu); - break; - case 0: + } else if (strcmp(state, "offline") == 0) { (void)cpu_down(cpu); disable_hotplug_cpu(cpu); - break; - default: - break; + } else { + printk(KERN_ERR "XENBUS: unknown state(%s) on CPU%d\n", + state, cpu); } } @@ -76,20 +64,12 @@ static void handle_vcpu_hotplug_event(struct xenbus_watch *watch, static int setup_cpu_watcher(struct notifier_block *notifier, unsigned long event, void *data) { - int cpu; static struct xenbus_watch cpu_watch = { .node = "cpu", .callback = handle_vcpu_hotplug_event}; (void)register_xenbus_watch(&cpu_watch); - for_each_possible_cpu(cpu) { - if (vcpu_online(cpu) == 0) { - (void)cpu_down(cpu); - cpu_clear(cpu, cpu_present_map); - } - } - return NOTIFY_DONE; } diff --git a/trunk/drivers/xen/manage.c b/trunk/drivers/xen/manage.c index 4b5b84837ee1..0d61db1e7b49 100644 --- a/trunk/drivers/xen/manage.c +++ b/trunk/drivers/xen/manage.c @@ -62,15 +62,14 @@ static int xen_suspend(void *data) gnttab_resume(); xen_mm_unpin_all(); + sysdev_resume(); + if (!*cancelled) { xen_irq_resume(); xen_console_resume(); xen_timer_resume(); } - sysdev_resume(); - device_power_up(PMSG_RESUME); - return 0; } diff --git a/trunk/firmware/.gitignore b/trunk/firmware/.gitignore index d9c69017bc9a..f89a21fffbf1 100644 --- a/trunk/firmware/.gitignore +++ b/trunk/firmware/.gitignore @@ -3,4 +3,3 @@ *.bin *.csp *.dsp -ihex2fw diff --git a/trunk/firmware/Makefile b/trunk/firmware/Makefile index 142c17ab9e57..1e7fd4df16a7 100644 --- a/trunk/firmware/Makefile +++ b/trunk/firmware/Makefile @@ -41,7 +41,6 @@ fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ cxgb3/t3c_psram-1.1.0.bin \ cxgb3/t3fw-7.1.0.bin -fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ e100/d102e_ucode.bin @@ -60,9 +59,14 @@ fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \ sb16/ima_adpcm_init.csp \ sb16/ima_adpcm_playback.csp \ sb16/ima_adpcm_capture.csp +fw-shipped-$(CONFIG_SLICOSS) += slicoss/gbdownload.sys slicoss/gbrcvucode.sys \ + slicoss/oasisdbgdownload.sys \ + slicoss/oasisdownload.sys \ + slicoss/oasisrcvucode.sys +fw-shipped-$(CONFIG_SXG) += sxg/saharadownloadB.sys \ + sxg/saharadbgdownloadB.sys fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \ yamaha/ds1e_ctrl.fw -fw-shipped-$(CONFIG_SND_WAVEFRONT) += yamaha/yss225_registers.bin fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \ tigon/tg3_tso5.bin @@ -119,10 +123,10 @@ quiet_cmd_ihex = IHEX $@ cmd_ihex = $(OBJCOPY) -Iihex -Obinary $< $@ quiet_cmd_ihex2fw = IHEX2FW $@ - cmd_ihex2fw = $(objtree)/$(obj)/ihex2fw $< $@ + cmd_ihex2fw = $(objtree)/scripts/ihex2fw $< $@ quiet_cmd_h16tofw = H16TOFW $@ - cmd_h16tofw = $(objtree)/$(obj)/ihex2fw -w $< $@ + cmd_h16tofw = $(objtree)/scripts/ihex2fw -w $< $@ quiet_cmd_fwbin = MK_FW $@ cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \ @@ -181,27 +185,15 @@ $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/% $(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %) $(call cmd,ihex) -# Don't depend on ihex2fw if we're installing and it already exists. -# Putting it after | in the dependencies doesn't seem sufficient when -# we're installing after a cross-compile, because ihex2fw has dependencies -# on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and -# thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree -# is exported read-only for someone to run 'make install'. -ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw) -ihex2fw_dep := -else -ihex2fw_dep := $(obj)/ihex2fw -endif - # .HEX is also Intel HEX, but where the offset and length in each record # is actually meaningful, because the firmware has to be loaded in a certain # order rather than as a single binary blob. Thus, we convert them into our # more compact binary representation of ihex records () -$(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) +$(obj)/%.fw: $(obj)/%.HEX | $(objtree)/$(obj)/$$(dir %) $(call cmd,ihex2fw) # .H16 is our own modified form of Intel HEX, with 16-bit length for records. -$(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) +$(obj)/%.fw: $(obj)/%.H16 | $(objtree)/$(obj)/$$(dir %) $(call cmd,h16tofw) $(firmware-dirs): @@ -218,5 +210,3 @@ targets := $(fw-shipped-) $(patsubst $(obj)/%,%, \ # Without this, built-in.o won't be created when it's empty, and the # final vmlinux link will fail. obj-n := dummy - -hostprogs-y := ihex2fw diff --git a/trunk/firmware/README.AddingFirmware b/trunk/firmware/README.AddingFirmware deleted file mode 100644 index e24cd8986d8b..000000000000 --- a/trunk/firmware/README.AddingFirmware +++ /dev/null @@ -1,34 +0,0 @@ - - DO NOT ADD FIRMWARE TO THIS DIRECTORY. - ====================================== - -This directory is only here to contain firmware images extracted from old -device drivers which predate the common use of request_firmware(). - -As we update those drivers to use request_firmware() and keep a clean -separation between code and firmware, we put the extracted firmware -here. - -This directory is _NOT_ for adding arbitrary new firmware images. The -place to add those is the separate linux-firmware repository: - - git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git - -That repository contains all these firmware images which have been -extracted from older drivers, as well various new firmware images which -we were never permitted to include in a GPL'd work, but which we _have_ -been permitted to redistribute under separate cover. - -To submit firmware to that repository, please send either a git binary -diff or preferably a git pull request to: - David Woodhouse - -Your commit should include an update to the WHENCE file clearly -identifying the licence under which the firmware is available, and -that it is redistributable. If the licence is long and involved, it's -permitted to include it in a separate file and refer to it from the -WHENCE file. - -Ideally, your commit should contain a Signed-Off-By: from someone -authoritative on the licensing of the firmware in question (i.e. from -within the company that owns the code). diff --git a/trunk/firmware/WHENCE b/trunk/firmware/WHENCE index 10f61c9e5a8a..e4deb511cc73 100644 --- a/trunk/firmware/WHENCE +++ b/trunk/firmware/WHENCE @@ -8,24 +8,6 @@ kernel. -------------------------------------------------------------------------- -Driver: ambassador -- Madge Ambassador (Collage PCI 155 Server) ATM NIC. - -File: firmware/atmsar11.fw - -Licence: Allegedly GPLv2+, but no source visible. Marked: - - Madge Ambassador ATM Adapter microcode. - Copyright (C) 1995-1999 Madge Networks Ltd. - - This microcode data is placed under the terms of the GNU General - Public License. The GPL is contained in /usr/doc/copyright/GPL on a - Debian system and in the file COPYING in the Linux kernel source. - - We would prefer you not to distribute modified versions without - consultation and not to ask for assembly/other microcode source. - --------------------------------------------------------------------------- - Driver: korg1212 -- Korg 1212 IO audio device File: korg/k1212.dsp @@ -408,6 +390,59 @@ Found in hex form in kernel source. -------------------------------------------------------------------------- +Driver: SLICOSS - Alacritech IS-NIC products + +File: slicoss/gbdownload.sys.ihex +File: slicoss/gbrcvucode.sys.ihex +File: slicoss/oasisdbgdownload.sys.ihex +File: slicoss/oasisdownload.sys.ihex +File: slicoss/oasisrcvucode.sys.ihex + +Licence: + Copyright (C) 1999-2009 Alacritech, Inc. + + as an unpublished work. This notice does not imply unrestricted or + public access to the source code from which this firmware image is + derived. Except as noted below this firmware image may not be + reproduced, used, sold or transferred to any third party without + Alacritech's prior written consent. All Rights Reserved. + + Permission is hereby granted for the distribution of this firmware + image as part of a Linux or other Open Source operating system kernel + in text or binary form as required. + + This firmware may not be modified and may only be used with + Alacritech hardware. + +Found in hex form in kernel source. + +-------------------------------------------------------------------------- + +Driver: SXG - Alacritech IS-NIC products + +File: sxg/saharadownloadB.sys.ihex +File: sxg/saharadbgdownloadB.sys.ihex + +Licence: + Copyright (C) 1999-2009 Alacritech, Inc. + + as an unpublished work. This notice does not imply unrestricted or + public access to the source code from which this firmware image is + derived. Except as noted below this firmware image may not be + reproduced, used, sold or transferred to any third party without + Alacritech's prior written consent. All Rights Reserved. + + Permission is hereby granted for the distribution of this firmware + image as part of a Linux or other Open Source operating system kernel + in text or binary form as required. + + This firmware may not be modified and may only be used with + Alacritech hardware. + +Found in hex form in kernel source. + +-------------------------------------------------------------------------- + Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter File: cxgb3/t3b_psram-1.1.0.bin.ihex @@ -627,24 +662,3 @@ Licence: Found in hex form in kernel source. -------------------------------------------------------------------------- - -Driver: DVB AV7110 -- AV7110 cards - -File: av7110/bootcode.bin - -Licence: GPLv2 or later - -ARM assembly source code available at http://www.linuxtv.org/downloads/firmware/Boot.S - --------------------------------------------------------------------------- - -Driver: wavefront - ISA WaveFront sound card - -File: yamaha/yss225_registers.bin - -Licence: Allegedly GPLv2+, but no source visible. - -Found in hex form in kernel source, with the following comment: - Copyright (c) 1998-2002 by Paul Davis - --------------------------------------------------------------------------- diff --git a/trunk/firmware/av7110/Boot.S b/trunk/firmware/av7110/Boot.S deleted file mode 100644 index d562fdc2908f..000000000000 --- a/trunk/firmware/av7110/Boot.S +++ /dev/null @@ -1,109 +0,0 @@ -/* - Boot.S: boot loader for Siemens DVB-S card - - Copyright (C) 2001 Convergence integrated media GmbH - Written by Ralph Metzler - - Copyright (C) 2006 Matthieu CASTET - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - -*/ - -/* - check AV711x_3_1.pdf for some hardware infos - build it with : - $ cc -mbig-endian -c Boot.S - $ ld -Ttext 0x2c000000 -EB -o Boot Boot.o - $ objcopy -Obinary Boot -*/ - - .text - .align - .globl _start -_start: - b reset // reset vector - movs pc, r14 // undefined - subs pc, r14, #4 // SWI - subs pc, r14, #4 // prefetch abort - subs pc, r14, #8 // data abort - subs pc, r14, #4 // reserved - subs pc, r14, #4 // IRQ - subs pc, r14, #4 // FIQ - - .word tbl // table needed by firmware ROM -tbl: .word (endtbl - tbl) - .word 0 - .word conf -endtbl: .word 0 -conf: .word 0xa5a55a5a - .word 0x001f1555 - .word 0x00000009 - -reset: ldr r13, buffer - ldr r4, flag - mov r0, #0 - str r0, [r4] - str r0, [r4, #4] - - ldr r1, wait_address - ldr r2, flag_address - ldr r3, sram - -copycode: // copy the code HW Sram - ldmia r1!, {r5-r12} - stmia r3!, {r5-r12} - cmp r1, r2 - ble copycode - ldr pc, sram // jump to the copied code - -wait: ldrh r1, [r4] // wait for flag!=0 - cmp r1, #0 - beq wait - - mov r1, r13 // buffer address - ldr r3, [r4,#4] // destaddr - - ldrh r2, [r4,#2] // get segment length - add r2, r2, #63 // round length to next 64 bytes - movs r2, r2, lsr #6 // and divide by 64 - moveq r0, #2 // if 0, set flag to 2, else signal - strh r0, [r4] // that buffer is accepted by setting to 0 - beq wait - -copyloop: - ldmia r1!, {r5-r12} - stmia r3!, {r5-r12} - ldmia r1!, {r5-r12} - stmia r3!, {r5-r12} - subs r2, r2, #1 - bne copyloop - - eor r13, r13, #0x1400 // switch to other buffer - b wait - -// flag is stored at 0x2c0003f8, length at 0x2c0003fa, -// destaddr at 0x2c0003fc - -flag: .word 0x2c0003f8 - - -// buffer 1 is at 0x2c000400, buffer 2 at 0x2c001000 - -buffer: .word 0x2c000400 - -sram: .word 0x9e000800 -wait_address: .word wait -flag_address: .word flag diff --git a/trunk/firmware/av7110/bootcode.bin.ihex b/trunk/firmware/av7110/bootcode.bin.ihex deleted file mode 100644 index 26a2993e0723..000000000000 --- a/trunk/firmware/av7110/bootcode.bin.ihex +++ /dev/null @@ -1,15 +0,0 @@ -:10000000EA00000EE1B0F00EE25EF004E25EF00401 -:10001000E25EF008E25EF004E25EF004E25EF0040C -:100020002C0000240000000C000000002C00003414 -:1000300000000000A5A55A5A001F15550000000930 -:10004000E59FD07CE59F4074E3A00000E5840000BC -:10005000E5840004E59F1070E59F2070E59F306403 -:10006000E8B11FE0E8A31FE0E1510002DAFFFFFB67 -:10007000E59FF050E1D410B0E35100000AFFFFFC0F -:10008000E1A0100DE5943004E1D420B2E282203FDB -:10009000E1B0232203A00002E1C400B00AFFFFF494 -:1000A000E8B11FE0E8A31FE0E8B11FE0E8A31FE00C -:1000B000E25220011AFFFFF9E22DDB05EAFFFFEC17 -:1000C0002C0003F82C0004009E0008002C00007493 -:0400D0002C0000C040 -:00000001FF diff --git a/trunk/firmware/slicoss/gbdownload.sys.ihex b/trunk/firmware/slicoss/gbdownload.sys.ihex new file mode 100644 index 000000000000..dc17e639b69a --- /dev/null +++ b/trunk/firmware/slicoss/gbdownload.sys.ihex @@ -0,0 +1,6148 @@ +:10000000020000000080000000000100000000006D +:10001000008000001200004081B200001800004083 +:1000200081B200001E00004081B2000003000040C9 +:1000300081B20000000000A898B001000480A24036 +:10004000FD7F00000900A249DD7D00000000004C9A +:1000500080B2010007000040D1B100000000004C58 +:1000600080B201000900A240757D000060000040E0 +:10007000619901000B00A8B17E3100000900004029 +:1000800081B200001100004081B2000000801FE931 +:1000900018310000000041E980B201000F0040E982 +:1000A00080B2000000000040A59901001600294020 +:1000B00081320000160014BC803200000F0093BC97 +:1000C000803200000000504081B2010000800040FA +:1000D00081B2000010000040A59901001C002940D9 +:1000E000813200001C0014BC80320000110093BC5F +:1000F000803200000000504081B2010001800040C9 +:1001000081B2000020000040A59901002200294092 +:1001100081320000220014BC803200000E0093BC2B +:100120008032000000000049DD8101002B01004009 +:10013000813201003C01004081320100270014BCE3 +:1001400080320000140113BC80320000549500403E +:1001500045990100FFFF0040E599010000002F4094 +:1001600049B1010000000040E1B101000000004B76 +:10017000B7B3010000000040B5B30100D900004052 +:10018000B333010000000040B6D30100320095E80F +:1001900080320000FFFF00E880880100B8002640A0 +:1001A0008132000000000040FDB30100000000406B +:1001B000FFB301003C002250836C000000000045AA +:1001C000FD930100A5A500A6B4A701003C00A25024 +:1001D000B573000000010040813201003C00A245DF +:1001E0008032000000000046FD9301004100004005 +:1001F00081B200007F000020F5CF01001C0100FA51 +:10020000B3330100A5A500DAB5AB01009900A250F7 +:10021000B563000000000044FD930100D5000044D8 +:10022000B333010000000040D5990100000000DA5E +:10023000D7B10100FFFF00DAED8B0100D5000046C9 +:10024000B333010008000040D5990100000000DA36 +:10025000D7B10100FF0000DAEF8B0100FF0000DAE8 +:10026000E38F0100D5000048B33301003C0000409B +:10027000D5990100FF0000DAD78D0100FFFF00DAF9 +:10028000F1DB0100FF0000DAE98B0100000000480B +:10029000E9E30100D500004BB33301002C0000401E +:1002A000D5990100000000DAD7B10100D500004C5B +:1002B000B3330100FFFF00DAEBDB0100D500004E95 +:1002C000B3330100030000DA818801000000005C04 +:1002D00081E00100FFFF00DAB5DB01005C00264091 +:1002E00081320000010000DAB5CF010000F000A764 +:1002F000B4870100000000DA819401000000004092 +:10030000D8B10100D5000050B3330100FFFF00DA7F +:10031000B58B01006200264CB5630000010000DAD5 +:10032000B5CF0100000000DADFB10100D5000052B6 +:10033000B3330100FF0000DA4B890100080000DA46 +:10034000DFF70100FF0000EFDF8B010069002240B2 +:10035000DF7F000000000047FD9301002000004007 +:10036000B39B0100D500004081320100060000402F +:10037000D5990100080000DAD7E50100F80000DA9D +:10038000B38B010034000040D5990100000000D972 +:10039000D7B10100020000D9D5C90100000000DA80 +:1003A000D7B1010022000040B39B0100D5000040FE +:1003B0008132010000000048B5F30100030000DABB +:1003C0007B89010000010040DD9B0100D500005D3C +:1003D000B3330100FFFF00DAE78B01008A002640FB +:1003E0008132000000000041FD9301000000005038 +:1003F000E7E3010000010040D5990100000000F68C +:10040000E7970100000000F3D7B10100D500005EBE +:10041000B3330100FF0000DAE58B01000000004863 +:10042000E5E3010008010040D5990100FF0000DA72 +:10043000B58F0100000000F7B5970100000000DA59 +:10044000D7B101003C010040D5990100000000F83F +:10045000E5970100000000F2D7B101000002004062 +:10046000DD9B0100960022F5813200000000004271 +:10047000FD930100000000EED5B10100000000F680 +:10048000EB970100000000F5D7B10100080000EA79 +:10049000D4C90100000000F7E3970100000000F15B +:1004A000D7B101003C0000EEDDCB0100000000EE02 +:1004B000D5B10100000000F8E9970100000000F448 +:1004C000D7B10100D500004AB3330100FFFF00DAC5 +:1004D000DD890100B700004081B20000000000404B +:1004E000D5990100050000A6D6B101009A1300EBD2 +:1004F000D699010008000040D5990100000200A62D +:10050000D6B10100010000EBD69901002C0000409B +:10051000D5990100050000A6D6B101009A1300EBA1 +:10052000D69901003C010040D5990100000200402D +:10053000D799010000000042FD9301003C000040FB +:10054000D5990100000000A6D6B10100000100EB22 +:10055000D699010000010040D5990100060000A6CF +:10056000D6B101009A1300EBD699010008010040B2 +:10057000D5990100000200A6D6B10100010000EBF0 +:10058000D699010000000040D9B1010000000040F0 +:10059000DFB1010006000040D5990100A00000A6CF +:1005A000D6B10100640000404B99010000000040FA +:1005B0007B99010002040040DD990100B70013BCE3 +:1005C0008032000002080040DD9901000000004C6C +:1005D000DD910100B80095E88430000000002FE9AB +:1005E000FAB3010000000040D1B10100FF00004259 +:1005F000808801003400004080CE0100B800A64091 +:1006000081320000C100004081320100028022409E +:1006100080320000B800004081B200000000004FAE +:1006200081B00100CA0009F981320000C80008F950 +:1006300081320000D4001FFDF9330000C7009EFD89 +:10064000813200000000004AF3930100000080485E +:10065000F3930100000000FDF7B3010000008049A2 +:10066000F3930100000000FC19B10100CF000AF96A +:1006700081320000000040FB81B20100000041FD1A +:1006800081B20100000780F9F38F0100000742F9F1 +:10069000F38F0100D300A2FFF76F0000000043407A +:1006A00081B201000000A2FFFBEF0000000080FC0F +:1006B000E1B101000000804081B00100D80006FED9 +:1006C0008132000000000041B3E301001C0100FA88 +:1006D000B3C30000DA0000428DB00000000000410A +:1006E0008DB001000004004083980100EB00004041 +:1006F000813201000000005083B0010000008496A8 +:1007000080B2000026010040813201002501004036 +:100710002D110100000000402D810100000000DAD1 +:10072000B5EB0100E400849680320000E500004053 +:10073000B593000000000040B5830100DE00A24137 +:1007400083500000000000422D810100260100417D +:100750002D01010000000041B3C30100DA00A241F5 +:100760008D500000000080DAB5BF01000000004B92 +:1007700081B00100000000DB81D00100000000D941 +:10078000B9B3010000000040B8E30100000000DC44 +:10079000B9EB010000000041B8970100150000DC32 +:1007A000B9E70100000000412D810100000000DBDD +:1007B00081B00100270100422D11010025010040F8 +:1007C0002D110100280100402D0101000000004111 +:1007D0002D910100260100408132010025010040D9 +:1007E0002D110100000000402D8101000000A241F8 +:1007F00081D000000000849680320100FF00A0DC60 +:10080000B96B0000F80000412D910000F800004194 +:100810002D810000D8000040B3330100000090DAC1 +:100820008BB000001100004588F401004000004436 +:1008300080CE01000000A44081B200000000A3446B +:1008400089EC00000000004289D001000000004255 +:1008500087B00100D9000043B2330100000000500E +:10086000B5F301000C01A0DA8B400000000000414C +:100870008BC001000000004187C001000801A241B7 +:1008800089500000FFFF00458888010010000045E6 +:100890008AF40100120190448A40000000000041E7 +:1008A0008BC00100FFFF00458AA8010000008050B6 +:1008B0008BE0010000800040F99B010000C0004077 +:1008C000B3CF01001C0100FC193101001C0140DA0A +:1008D00081320100000041DA81B2010000000041D4 +:1008E000F9C3010016019FDA813200000280004046 +:1008F00081B200000000004491B00100000000D966 +:100900002BB101001E019F9480320000180000945A +:1009100092E4010000000048B5F301000000004926 +:10092000B497010000000041B3C301001D01A241C2 +:1009300091500000000080402BB1010029010051BE +:1009400093B000002901004D93B000002901004937 +:1009500093B000000000004293B001002901A241C1 +:10096000935000000000804081B201000000104060 +:1009700081B201000000114081B20100000012406C +:1009800081B201000000134081B201000000144058 +:1009900081B201000000154081B201000000164044 +:1009A00081B201000000174081B201000000184030 +:1009B00081B201000000194081B2010000001A401C +:1009C00081B2010000001B4081B2010000001C4008 +:1009D00081B2010000001D4081B2010000001E40F4 +:1009E00081B2010000001F4081B201000000804080 +:1009F00081B2010000040040A199010000000050F4 +:100A0000A1D10100000000401BB001000000004027 +:100A100019B001000000004017B0010000000040C4 +:100A200015B001000000004013B0010000000040BC +:100A300011B00100000000400FB0010000000040B4 +:100A40000DB00100000000400BB0010000000040AC +:100A500009B001000000004007B0010000000040A4 +:100A600005B001000000004003B00100000000409C +:100A700001B0010044012048A15100000000804065 +:100A800081B201005001224B747D000000008040C3 +:100A900081B201006000004B60990100000000B1CC +:100AA0007EB101005101A840813200004E0100409A +:100AB00081B20000040080409798010000000058B7 +:100AC00007900100F39F004081B200000000004445 +:100AD000A5B30100AF02004081320100C502004011 +:100AE000813201000000005C07900100F39F00408C +:100AF000BFB300005F0122CC857F000000000051E1 +:100B000007900100F39F004081B200000000004008 +:100B100049B10100AE0300CBA3C90100D0140040CD +:100B2000A19B01000000002046B101000000004828 +:100B3000F1B10100000000D0F1B10100000000CAD5 +:100B4000F1B10100000000D5E1B101000700004053 +:100B5000619901002000002062DD01006801A840C9 +:100B600081320000000000CC85930100C5020040E6 +:100B700081320100D014004043990100000000FAC6 +:100B8000BAB30100000000FAA4B30100000000F8AD +:100B9000BCB3010000142F4081B00100000000E749 +:100BA000A7B30100000000D8A9B30100FF0000DDD9 +:100BB000818801000200004080F4010078010040BB +:100BC00080C80100880100DD813200000000004083 +:100BD00010B100008901004081B200008A0100408C +:100BE00081B200008B01004081B200008C01004006 +:100BF00081B200008D01004081B200008F010040F1 +:100C000081B200009101004081B200005501004016 +:100C100081B20000D201004081B2000055010040C5 +:100C200081B20000E001004081B20000E10100401B +:100C300081B200007F02004081B2000080020040CB +:100C400081B20000F19F004081B20000F29F00409D +:100C500081B200007701004181C01A005A01514061 +:100C600081B21A005A01524081B21A005A0155400D +:100C700081B21A005A01564081B21A005501918181 +:100C800080301A005A01454081B21A005501918204 +:100C900080301A005A01464081B200000000004036 +:100CA00089B0010000002F4081B001000014004015 +:100CB00049990100B50122DEE16D00000000004C01 +:100CC00049C101000000004181C001009401A2441B +:100CD000816C00000000004C49D101009C012240C1 +:100CE000E16D00009801A2418150000055010041D2 +:100CF000BFB3000000000042BFB301005501A00FC8 +:100D0000BD6F0000000000DEE1B101000000004402 +:100D100049C10100B701004019990100000042409B +:100D200081B20100000043FF85B00100000000DE39 +:100D300019B10100000042FF87B00100000043FF2D +:100D4000E1B101000000004449C1010000002FFF93 +:100D5000E1B10100081400A480CC0100AC012640E0 +:100D6000813200000000004185C00100AA01A24CB0 +:100D700081500000B60122D281320000B10122412F +:100D8000A56F00005501A2E081320000000000D2F2 +:100D9000C1B301000000005C8990010000004042E6 +:100DA00080B201000000414380B20100000000F069 +:100DB000889401005A010044E0B10000B3010048EA +:100DC00049C10000B101005B89900000B09F00A004 +:100DD0009EB000000000004D81B001000000004303 +:100DE000CB8301000000454081B20100BA01A2415D +:100DF000815000000000454081B2010000004540E4 +:100E000081B20100C4019182823000000000008A9A +:100E100080B00100B69F004080CE0100C301A64013 +:100E200081320000C401564081B20000000000532E +:100E30006F930100F39F00526F9300000000004D7C +:100E400081B0010000000042CD8301000000464057 +:100E500081B20100C701A24181500000000046405C +:100E600081B201000000464081B20100D1019181B0 +:100E7000823000000000008980B00100B69F004071 +:100E800080CE0100D001A64081320000D101554042 +:100E900081B20000000000526F930100F39F0053E5 +:100EA0006F9300000000004083B001000014004078 +:100EB000499901000000234081B00100DA0122DEDF +:100EC000E16D00000000004C49C10100000000413C +:100ED00081C00100D501A244816C0000550100438E +:100EE000BFB30000000000F818B10100000040F896 +:100EF00080B20100000041F080B20100000000401B +:100F0000F1B1010000000040F1B101005A010040C0 +:100F1000E1B10000E201004091B00000000000419A +:100F200091B00100D0142E4049B1010005000040ED +:100F3000A39B0100080000DD81F40100E7010040EF +:100F400080C801000000004010B10000ED01004029 +:100F500081B00000580100DEA1B30000FF01004095 +:100F600081B200000102004081B000000702004091 +:100F700081B20000570100DFE1B10000000000D0A5 +:100F8000BAB30100000000DEA1B10100020000D2EE +:100F9000A5E70100000000D2C1B30100000000007D +:100FA000F0B10100F7012244C1530000F601844171 +:100FB00081400000FA01004081320100000000D0B1 +:100FC00045B10100F1010041A1C10000B1020040A2 +:100FD00081320100C5020040813201005A0100DD6A +:100FE000A1B100000000004081B0010040000040BD +:100FF000A59B0100B102004081320100400000D3F6 +:10100000A7CB0100C50200E0A5B30000030000402B +:10101000A39B0100580100DEA1B3000000000044C2 +:10102000BFB30100000000DE819001005501A2BAAB +:1010300080040000600000DE619901000402A8B194 +:101040008030000057010040E0B10000000000D0F7 +:10105000BAB3010068020040819801005D02004DB2 +:101060008330010000000044E1B3010000000044AF +:10107000E3B3010000000044E5B3010000000044B8 +:10108000E9B3010000000044EBB30100000000449C +:10109000F5B3010000000044F7B301000000004474 +:1010A000F9B30100150222408F6F00007502004065 +:1010B000819801005D0200C7833001007D0200407D +:1010C000819801005D02004283300100000000E8C9 +:1010D000F1B10100000000E9F1B10100000000EAF7 +:1010E000F1B10100000000EBF1B10100000000854A +:1010F000F0B10100000000ECF1B10100000000EDD2 +:10110000F1B10100000000B2F0B10100E09F004029 +:101110008132010000000040F0B1010000000040F9 +:10112000F1B10100000000ABF0B10100000000B817 +:10113000F0B10100000000B9F0B10100000000BAF8 +:10114000F0B10100000000BBF0B101002902B8407D +:101150008130000000000040819001002B02B94066 +:101160008132000000000041819001002D02BA4050 +:101170008132000000000042819001002F02BB403C +:101180008132000000000043819001003102BC4028 +:101190008132000000000044819001003302BD4014 +:1011A0008132000000000045819001003502BE4000 +:1011B0008132000000000046819001003702BF40EC +:1011C0008132000000000047819001003902C840D0 +:1011D0008132000000000048819001003B02C940BC +:1011E0008132000000000049819001003D02CA40A8 +:1011F000813200000000004A819001003F02CB4094 +:10120000813200000000004B819001004102CC407F +:10121000813200000000004C819001004302CD406B +:10122000813200000000004D819001004502CE4057 +:10123000813200000000004E819001004702CF4043 +:10124000813200000000004F81900100000000404A +:10125000F0B1010040000040A59B0100AF0200403A +:1012600081320100C502004081320100D0142E06F7 +:10127000A5B30100400000D3A7CB0100000000F09F +:10128000F1B10100000000F1F1B10100000000F235 +:10129000F1B10100000000F4F1B10100000000F51F +:1012A000F1B10100000000FAF1B10100000000FB03 +:1012B000F1B10100000000FCF1B10100000000EB01 +:1012C000F1B10100000000EEF1B10100000000EFFB +:1012D000F1B10100000000F3F1B10100000000F6DF +:1012E000F1B10100000000FDF1B10100F70100C7FC +:1012F000E1B100000000804081B2010063020048BB +:1013000080320000000051401AB1010000004D4041 +:1013100081B201000000454081B201006002A2419B +:10132000835000005C02494081B20000000052403E +:101330001CB1010000004E4081B201000000464097 +:1013400081B201006502A241835000005C024A4064 +:1013500081B20000000000A09EB0010000000080EB +:10136000D8B30100000000A1D0B30100000000A22A +:10137000D2B30100000000A4D4B30100000000D0EB +:10138000D6B30100000000D1DCB30100000000D2A0 +:10139000DEB3010000000088DAB30100000000D4D1 +:1013A0008EB30100000000D3E6B30100000000ACE2 +:1013B000ECB3010000000099FAB30100000000D571 +:1013C000E0B30100000000D5E2B30100000000D549 +:1013D000E4B30100000000D5E8B30100000000D52F +:1013E000EAB30100000000D5F4B30100000000D50D +:1013F000F6B30100000000D5F8B30100000000C7FB +:10140000A9B101000000004F40B10100810200407D +:1014100091B000000000004191B0010007000040C1 +:10142000A39B0100080000DD81F40100850200405B +:1014300080C801000000004010B100008A02004096 +:1014400081B200009502004081B200009502004682 +:10145000A3B300009802004081B200009E02004049 +:1014600081B200008C022350A56F000000000050E4 +:10147000A5B30100BC020042A5630100C502004003 +:1014800081320100D0142D4049B10100000000D08C +:10149000BAB30100000000DEA1B10100000000F8B5 +:1014A00000B0010094022244A553000091020041C3 +:1014B000A1C100005A0100DDA1B10000BC0200DEA4 +:1014C000A1330100C5020040813201005A010040F1 +:1014D00081B2000000000045BFB301005501A2D257 +:1014E000777D0000000000D261B10100000000DE45 +:1014F00063B101009B02A840813200005A01004004 +:1015000081B20000BC020054A5330100C5020040B6 +:1015100081320100D0142D4049B10100000000F8D3 +:10152000D0B30100000000F8D2B30100000000F8C1 +:10153000D4B30100000000F8D6B30100000000F8A9 +:1015400008B10100A9020040819801005D02004637 +:10155000833001005A01004081B20000000000A069 +:101560009EB00100000000E843B10100000000E966 +:1015700045B10100000000EA49B10100000000EBA4 +:10158000A1B101000000004F40B10100000000E7E0 +:10159000A7B30100000000D8A9B30100000000407B +:1015A00049B10100AE0300CBA3C901000000002037 +:1015B00046B10100000000D2F1B10100000000D3EB +:1015C000F1B10100000000D4F1B10100000000D031 +:1015D000E1B10100000000D161B101002000002054 +:1015E00062DD0100B902A84081320000000080CC19 +:1015F00085930100000000E7A7B30100000000D8B8 +:10160000A9B301000000004049B10100AE0300CBC6 +:10161000A3C901000000002046B10100000000D273 +:10162000F1B10100000000D0F1B10100000000D3D1 +:10163000F1B10100B80200D4E1B100000000A2CC79 +:1016400085FF00000000005081B00100C702A241E8 +:1016500081500000C602A2F280300000000080CC61 +:10166000858301000000004081B00100CB0280A50D +:1016700080320000CC0200A5803200000000004152 +:1016800081C00100CD0280A58032000080010040B1 +:1016900083980100D602204F816C000000010040B9 +:1016A00083980100D602204B816C0000800000402E +:1016B00083980100D6022047816C000000000040A2 +:1016C000839801000000004182DC0100039000418A +:1016D000209901000000004049B1010000142F4C86 +:1016E00083B0010000000040F1B10100DA02A24124 +:1016F00083500000020000A580C80100DD02A2A501 +:10170000806C000020000090209901000000005F24 +:1017100023910100E0021F91803200003000009010 +:10172000209901000000005F23910100E3021F9156 +:10173000803200007000009020A901000000005FCE +:1017400023910100E6021F91803200000000005F3B +:1017500023910100E8021F91803200004068009050 +:1017600020A90100E0000040619901002100004033 +:1017700061990100220000406199010023000040AE +:10178000619901002400004061990100250000409A +:101790006199010026000040619901002700004086 +:1017A00061990100C000004061990100D01400401F +:1017B00045990100020100A680B001000403004029 +:1017C00080980100060500A682B0010008070041CC +:1017D0008298010000000040F0B1010000000041CB +:1017E000E0B10100300300408530010039030040C2 +:1017F00081320100D814004043990100FF02A2F891 +:10180000806C0000000322F0826C000000000042A7 +:1018100021910100D0142040E1B101003003000CFF +:10182000853001003003004D851001003003004E6B +:1018300085100100D014204FE1B101003003004FAA +:10184000851001003903000C85300100D8142043B5 +:1018500081B001000F0322F09E6E00003903004D9D +:1018600085100100D814204281B001000F0322F03E +:101870009E6E00003903004E85100100D8142041EF +:1018800081B001001103A2F09E6E0000000000492B +:1018900081E001000000004020950100030000905D +:1018A000208D010000000043219501000000001B75 +:1018B00089B00100D0142040E1B1010030030017CD +:1018C00085300100300300588510010030030059B5 +:1018D00085100100D014204FE1B101003003005AFF +:1018E000851001003903001785300100D81420400D +:1018F00081B00100230322F09E6E000039030058DE +:1019000085100100D814204181B00100230322F08A +:101910009E6E00003903005985100100D814204242 +:1019200081B001002703A2F09E6E0000030000902A +:10193000208D0100000000402095010000000018EB +:1019400089B001000000004088E001002F03A2429E +:10195000217D0000A5A5004081980100D014204001 +:10196000E0B101003003004484300100390300403D +:1019700081320100D814204081B201002F03A2F06F +:10198000806C00000000004189E00100E000804020 +:10199000619901007015004047990100000000485E +:1019A000F1B1010000000042F0B10100D01400408C +:1019B000F19901000000005587B4010004000040C7 +:1019C0006199010070150043629901003603A84037 +:1019D000813200004103004081B2000070150040D8 +:1019E0004799010000000048F1B10100D8140040FF +:1019F000F199010000000042F0B101000000005523 +:101A000087B4010002000040619901007015004395 +:101A1000629901003F03A8408132000000000048A5 +:101A200087B001004203A241875000000000A2F2EB +:101A300086B00000100000F186F40100410326404A +:101A4000813200000400004081B200000000004725 +:101A500084B001000000A248848400000000005F00 +:101A600061B101000000005C8F90010000000047A0 +:101A700062B101004903A84081320000F59F004790 +:101A800098300100000800478EC801004703005C41 +:101A90008F800000E00000406199010058152D4042 +:101AA0008DB00100D0142DF088B00100000000FAC4 +:101AB0008AB001000000004581B001000700004528 +:101AC00082880100000000438BF001000000004804 +:101AD00083E00100000000468294010020000041E4 +:101AE00060990100000000418DC001006403225F85 +:101AF0008D6C00005503A24181500000530300404B +:101B000081B20000080000408598010000000044F8 +:101B100082B001000000004186B00100001C0043BB +:101B200086D801000000A6418550010060030041F5 +:101B300083E000005E0300408132010000000048A5 +:101B400085E00100D0142F4684940100200000425B +:101B500060990100C00000406199010000008040D0 +:101B600081B20100070000458088010000000043A9 +:101B70008BF0010000040040839801006F03A04136 +:101B8000815000006D03004182E8000000008041A8 +:101B90008EC00100AE030040A39901000000005474 +:101BA00081B00100601500408598010008000040E8 +:101BB00040E401000000005A419401000000005080 +:101BC00041E001000000004240940100000000419B +:101BD00081C001000000A355816C0100000000419C +:101BE000A3C101007303005085C000000000004045 +:101BF00049B1010000020040839801000016004036 +:101C00004599010000000040F1B101007E03A241AE +:101C1000835000000000004085B001000B0000442C +:101C200082F401001A1500A686B00100701500406C +:101C30004599010000080040F199010000000042B0 +:101C4000F0B1010000160040E199010004000040DD +:101C50006199010070150043629901008803A84052 +:101C6000813200008A03225A737D00007A0000400E +:101C7000619901008B03A8B17E3100000008004289 +:101C800084C801008303A24183500000000080400B +:101C900081B201000400004081B200000400004055 +:101CA00081B200000400004081B200000400004046 +:101CB00081B200000400004081B200000400004036 +:101CC00081B200000400004081B200000400004026 +:101CD00081B200000400004081B200000400004016 +:101CE00081B200000400004081B200000400004006 +:101CF00081B200000400004081B2000004000040F6 +:101D000081B200000400004081B2000004000040E5 +:101D100081B200000400004081B2000004000040D5 +:101D200081B200000400004081B2000004000040C5 +:101D300081B200000400004081B2000004000040B5 +:101D400081B200000400004081B2000004000040A5 +:101D500081B200000400004081B200000400004095 +:101D600081B200000400004081B200000400004085 +:101D700081B200000400004081B200000400004075 +:101D800081B200000400004081B200000400004065 +:101D900081B200000400004081B200000400004055 +:101DA00081B200000400004081B200000400004045 +:101DB00081B200000400004081B200000400004035 +:101DC00081B200000400004081B200000400004025 +:101DD00081B200000400004081B200000400004015 +:101DE00081B200000400004081B200000400004005 +:101DF00081B200000400004081B2000004000040F5 +:101E000081B200000400004081B2000004000040E4 +:101E100081B200000400004081B2000004000040D4 +:101E200081B200000400004081B2000004000040C4 +:101E300081B200000400004081B2000004000040B4 +:101E400081B200000400004081B2000004000040A4 +:101E500081B200000400004081B200000400004094 +:101E600081B200000400004081B200000400004084 +:101E700081B200000400004081B200000400004074 +:101E800081B200000400004081B200000400004064 +:101E900081B200000400004081B200000400004054 +:101EA00081B200000400004081B200000400004044 +:101EB00081B200000400004081B200000400004034 +:101EC00081B200000400004081B200000400004024 +:101ED00081B200000400004081B200000400004014 +:101EE00081B200000400004081B200000400004004 +:101EF00081B200000400004081B2000004000040F4 +:101F000081B200000400004081B2000004000040E3 +:101F100081B200000400004081B2000004000040D3 +:101F200081B200000400004081B2000004000040C3 +:101F300081B200000400004081B2000004000040B3 +:101F400081B200000400004081B2000004000040A3 +:101F500081B200000400004081B200000400004093 +:101F600081B200000400004081B200000400004083 +:101F700081B200000400004081B200000400004073 +:101F800081B200000400004081B200000400004063 +:101F900081B200000400004081B200000400004053 +:101FA00081B200000400004081B200000400004043 +:101FB00081B200000400004081B200000400004033 +:101FC00081B200000400004081B200000400004023 +:101FD00081B200000400004081B200000400004013 +:101FE00081B200000400004081B200000400004003 +:101FF00081B200000400004081B2000004000040F3 +:1020000081B200000400004081B2000004000040E2 +:1020100081B200000400004081B2000004000040D2 +:1020200081B200000400004081B2000004000040C2 +:1020300081B200000400004081B2000004000040B2 +:1020400081B200000400004081B2000004000040A2 +:1020500081B200000400004081B200000400004092 +:1020600081B200000400004081B200000400004082 +:1020700081B200000400004081B200000400004072 +:1020800081B200000400004081B200000400004062 +:1020900081B200000400004081B200000400004052 +:1020A00081B200000400004081B200000400004042 +:1020B00081B200000400004081B200000400004032 +:1020C00081B200000400004081B200000400004022 +:1020D00081B200000400004081B200000400004012 +:1020E00081B200000400004081B200000400004002 +:1020F00081B200000400004081B2000004000040F2 +:1021000081B200000400004081B2000004000040E1 +:1021100081B200000400004081B2000004000040D1 +:1021200081B200000400004081B2000004000040C1 +:1021300081B200000400004081B2000004000040B1 +:1021400081B200000400004081B2000004000040A1 +:1021500081B200000400004081B200000400004091 +:1021600081B200000400004081B200000400004081 +:1021700081B200000400004081B200000400004071 +:1021800081B200000400004081B200000400004061 +:1021900081B200000400004081B200000400004051 +:1021A00081B200000400004081B200000400004041 +:1021B00081B200000400004081B200000400004031 +:1021C00081B200000400004081B200000400004021 +:1021D00081B200000400004081B200000400004011 +:1021E00081B200000400004081B200000400004001 +:1021F00081B200000400004081B2000004000040F1 +:1022000081B200000400004081B2000004000040E0 +:1022100081B200000400004081B2000004000040D0 +:1022200081B200000400004081B2000004000040C0 +:1022300081B200000400004081B2000004000040B0 +:1022400081B200000400004081B2000004000040A0 +:1022500081B200000400004081B200000400004090 +:1022600081B200000400004081B200000400004080 +:1022700081B200000400004081B200000400004070 +:1022800081B200000400004081B200000400004060 +:1022900081B200000400004081B200000400004050 +:1022A00081B200000400004081B200000400004040 +:1022B00081B200000400004081B200000400004030 +:1022C00081B200000400004081B200000400004020 +:1022D00081B200000400004081B200000400004010 +:1022E00081B200000400004081B200000400004000 +:1022F00081B200000400004081B2000004000040F0 +:1023000081B200000400004081B2000004000040DF +:1023100081B200000400004081B2000004000040CF +:1023200081B200000400004081B2000004000040BF +:1023300081B200000400004081B2000004000040AF +:1023400081B200000400004081B20000040000409F +:1023500081B200000400004081B20000040000408F +:1023600081B200000400004081B20000040000407F +:1023700081B200000400004081B20000040000406F +:1023800081B200000400004081B20000040000405F +:1023900081B200000400004081B20000040000404F +:1023A00081B200000400004081B20000040000403F +:1023B00081B200000400004081B20000040000402F +:1023C00081B200000400004081B20000040000401F +:1023D00081B200000400004081B20000040000400F +:1023E00081B200000400004081B2000004000040FF +:1023F00081B200000400004081B2000004000040EF +:1024000081B200000400004081B2000004000040DE +:1024100081B200000400004081B2000004000040CE +:1024200081B200000400004081B2000004000040BE +:1024300081B200000400004081B2000004000040AE +:1024400081B200000400004081B20000040000409E +:1024500081B200000400004081B20000040000408E +:1024600081B200000400004081B20000040000407E +:1024700081B200000400004081B20000040000406E +:1024800081B200000400004081B20000040000405E +:1024900081B200000400004081B20000040000404E +:1024A00081B200000400004081B20000040000403E +:1024B00081B200000400004081B20000040000402E +:1024C00081B200000400004081B20000040000401E +:1024D00081B200000400004081B20000040000400E +:1024E00081B200000400004081B2000004000040FE +:1024F00081B200000400004081B2000004000040EE +:1025000081B200000400004081B2000004000040DD +:1025100081B200000400004081B2000004000040CD +:1025200081B200000400004081B2000004000040BD +:1025300081B200000400004081B2000004000040AD +:1025400081B200000400004081B20000040000409D +:1025500081B200000400004081B20000040000408D +:1025600081B200000400004081B20000040000407D +:1025700081B200000400004081B20000040000406D +:1025800081B200000400004081B20000040000405D +:1025900081B200000400004081B20000040000404D +:1025A00081B200000400004081B20000040000403D +:1025B00081B200000400004081B20000040000402D +:1025C00081B200000400004081B20000040000401D +:1025D00081B200000400004081B20000040000400D +:1025E00081B200000400004081B2000004000040FD +:1025F00081B200000400004081B2000004000040ED +:1026000081B200000400004081B2000004000040DC +:1026100081B200000400004081B2000004000040CC +:1026200081B200000400004081B2000004000040BC +:1026300081B200000400004081B2000004000040AC +:1026400081B200000400004081B20000040000409C +:1026500081B200000400004081B20000040000408C +:1026600081B200000400004081B20000040000407C +:1026700081B200000400004081B20000040000406C +:1026800081B200000400004081B20000040000405C +:1026900081B200000400004081B20000040000404C +:1026A00081B200000400004081B20000040000403C +:1026B00081B200000400004081B20000040000402C +:1026C00081B200000400004081B20000040000401C +:1026D00081B200000400004081B20000040000400C +:1026E00081B200000400004081B2000004000040FC +:1026F00081B200000400004081B2000004000040EC +:1027000081B200000400004081B2000004000040DB +:1027100081B200000400004081B2000004000040CB +:1027200081B200000400004081B2000004000040BB +:1027300081B200000400004081B2000004000040AB +:1027400081B200000400004081B20000040000409B +:1027500081B200000400004081B20000040000408B +:1027600081B200000400004081B20000040000407B +:1027700081B200000400004081B20000040000406B +:1027800081B200000400004081B20000040000405B +:1027900081B200000400004081B20000040000404B +:1027A00081B200000400004081B20000040000403B +:1027B00081B200000400004081B20000040000402B +:1027C00081B200000400004081B20000040000401B +:1027D00081B200000400004081B20000040000400B +:1027E00081B200000400004081B2000004000040FB +:1027F00081B200000400004081B2000004000040EB +:1028000081B200000400004081B2000004000040DA +:1028100081B200000400004081B2000004000040CA +:1028200081B200000400004081B2000004000040BA +:1028300081B200000400004081B2000004000040AA +:1028400081B200000400004081B20000040000409A +:1028500081B200000400004081B20000040000408A +:1028600081B200000400004081B20000040000407A +:1028700081B200000400004081B20000040000406A +:1028800081B200000400004081B20000040000405A +:1028900081B200000400004081B20000040000404A +:1028A00081B200000400004081B20000040000403A +:1028B00081B200000400004081B20000040000402A +:1028C00081B200000400004081B20000040000401A +:1028D00081B200000400004081B20000040000400A +:1028E00081B200000400004081B2000004000040FA +:1028F00081B200000400004081B2000004000040EA +:1029000081B200000400004081B2000004000040D9 +:1029100081B200000400004081B2000004000040C9 +:1029200081B200000400004081B2000004000040B9 +:1029300081B200000400004081B2000004000040A9 +:1029400081B200000400004081B200000400004099 +:1029500081B200000400004081B200000400004089 +:1029600081B200000400004081B200000400004079 +:1029700081B200000400004081B200000400004069 +:1029800081B200000400004081B200000400004059 +:1029900081B200000400004081B200000400004049 +:1029A00081B200000400004081B200000400004039 +:1029B00081B200000400004081B200000400004029 +:1029C00081B200000400004081B200000400004019 +:1029D00081B200000400004081B200000400004009 +:1029E00081B200000400004081B2000004000040F9 +:1029F00081B200000400004081B2000004000040E9 +:102A000081B200000400004081B2000004000040D8 +:102A100081B200000400004081B2000004000040C8 +:102A200081B200000400004081B2000004000040B8 +:102A300081B200000400004081B2000004000040A8 +:102A400081B200000400004081B200000400004098 +:102A500081B200000400004081B200000400004088 +:102A600081B200000400004081B200000400004078 +:102A700081B200000400004081B200000400004068 +:102A800081B200000400004081B200000400004058 +:102A900081B200000400004081B200000400004048 +:102AA00081B200000400004081B200000400004038 +:102AB00081B200000400004081B200000400004028 +:102AC00081B200000400004081B200000400004018 +:102AD00081B200000400004081B200000400004008 +:102AE00081B200000400004081B2000004000040F8 +:102AF00081B200000400004081B2000004000040E8 +:102B000081B200000400004081B2000004000040D7 +:102B100081B200000400004081B2000004000040C7 +:102B200081B200000400004081B2000004000040B7 +:102B300081B200000400004081B2000004000040A7 +:102B400081B200000400004081B200000400004097 +:102B500081B200000400004081B200000400004087 +:102B600081B200000400004081B200000400004077 +:102B700081B200000400004081B200000400004067 +:102B800081B200000400004081B200000400004057 +:102B900081B200000400004081B200000400004047 +:102BA00081B200000400004081B200000400004037 +:102BB00081B200000400004081B200000400004027 +:102BC00081B200000400004081B200000400004017 +:102BD00081B200000400004081B200000400004007 +:102BE00081B200000400004081B2000004000040F7 +:102BF00081B200000400004081B2000004000040E7 +:102C000081B200000400004081B2000004000040D6 +:102C100081B200000400004081B2000004000040C6 +:102C200081B200000400004081B2000004000040B6 +:102C300081B200000400004081B2000004000040A6 +:102C400081B200000400004081B200000400004096 +:102C500081B200000400004081B200000400004086 +:102C600081B200000400004081B200000400004076 +:102C700081B200000400004081B200000400004066 +:102C800081B200000400004081B200000400004056 +:102C900081B200000400004081B200000400004046 +:102CA00081B200000400004081B200000400004036 +:102CB00081B200000400004081B200000400004026 +:102CC00081B200000400004081B200000400004016 +:102CD00081B200000400004081B200000400004006 +:102CE00081B200000400004081B2000004000040F6 +:102CF00081B200000400004081B2000004000040E6 +:102D000081B200000400004081B2000004000040D5 +:102D100081B200000400004081B2000004000040C5 +:102D200081B200000400004081B2000004000040B5 +:102D300081B200000400004081B2000004000040A5 +:102D400081B200000400004081B200000400004095 +:102D500081B200000400004081B200000400004085 +:102D600081B200000400004081B200000400004075 +:102D700081B200000400004081B200000400004065 +:102D800081B200000400004081B200000400004055 +:102D900081B200000400004081B200000400004045 +:102DA00081B200000400004081B200000400004035 +:102DB00081B200000400004081B200000400004025 +:102DC00081B200000400004081B200000400004015 +:102DD00081B200000400004081B200000400004005 +:102DE00081B200000400004081B2000004000040F5 +:102DF00081B200000400004081B2000004000040E5 +:102E000081B200000400004081B2000004000040D4 +:102E100081B200000400004081B2000004000040C4 +:102E200081B200000400004081B2000004000040B4 +:102E300081B200000400004081B2000004000040A4 +:102E400081B200000400004081B200000400004094 +:102E500081B200000400004081B200000400004084 +:102E600081B200000400004081B200000400004074 +:102E700081B200000400004081B200000400004064 +:102E800081B200000400004081B200000400004054 +:102E900081B200000400004081B200000400004044 +:102EA00081B200000400004081B200000400004034 +:102EB00081B200000400004081B200000400004024 +:102EC00081B200000400004081B200000400004014 +:102ED00081B200000400004081B200000400004004 +:102EE00081B200000400004081B2000004000040F4 +:102EF00081B200000400004081B2000004000040E4 +:102F000081B200000400004081B2000004000040D3 +:102F100081B200000400004081B2000004000040C3 +:102F200081B200000400004081B2000004000040B3 +:102F300081B200000400004081B2000004000040A3 +:102F400081B200000400004081B200000400004093 +:102F500081B200000400004081B200000400004083 +:102F600081B200000400004081B200000400004073 +:102F700081B200000400004081B200000400004063 +:102F800081B200000400004081B200000400004053 +:102F900081B200000400004081B200000400004043 +:102FA00081B200000400004081B200000400004033 +:102FB00081B200000400004081B200000400004023 +:102FC00081B200000400004081B200000400004013 +:102FD00081B200000400004081B200000400004003 +:102FE00081B200000400004081B2000004000040F3 +:102FF00081B200000400004081B2000004000040E3 +:1030000081B200000400004081B2000004000040D2 +:1030100081B200000400004081B2000004000040C2 +:1030200081B200000400004081B2000004000040B2 +:1030300081B200000400004081B2000004000040A2 +:1030400081B200000400004081B200000400004092 +:1030500081B200000400004081B200000400004082 +:1030600081B200000400004081B200000400004072 +:1030700081B200000400004081B200000400004062 +:1030800081B200000400004081B200000400004052 +:1030900081B200000400004081B200000400004042 +:1030A00081B200000400004081B200000400004032 +:1030B00081B200000400004081B200000400004022 +:1030C00081B200000400004081B200000400004012 +:1030D00081B200000400004081B200000400004002 +:1030E00081B200000400004081B2000004000040F2 +:1030F00081B200000400004081B2000004000040E2 +:1031000081B200000400004081B2000004000040D1 +:1031100081B200000400004081B2000004000040C1 +:1031200081B200000400004081B2000004000040B1 +:1031300081B200000400004081B2000004000040A1 +:1031400081B200000400004081B200000400004091 +:1031500081B200000400004081B200000400004081 +:1031600081B200000400004081B200000400004071 +:1031700081B200000400004081B200000400004061 +:1031800081B200000400004081B200000400004051 +:1031900081B200000400004081B200000400004041 +:1031A00081B200000400004081B200000400004031 +:1031B00081B200000400004081B200000400004021 +:1031C00081B200000400004081B200000400004011 +:1031D00081B200000400004081B200000400004001 +:1031E00081B200000400004081B2000004000040F1 +:1031F00081B200000400004081B2000004000040E1 +:1032000081B200000400004081B2000004000040D0 +:1032100081B200000400004081B2000004000040C0 +:1032200081B200000400004081B2000004000040B0 +:1032300081B200000400004081B2000004000040A0 +:1032400081B200000400004081B200000400004090 +:1032500081B200000400004081B200000400004080 +:1032600081B200000400004081B200000400004070 +:1032700081B200000400004081B200000400004060 +:1032800081B200000400004081B200000400004050 +:1032900081B200000400004081B200000400004040 +:1032A00081B200000400004081B200000400004030 +:1032B00081B200000400004081B200000400004020 +:1032C00081B200000400004081B200000400004010 +:1032D00081B200000400004081B200000400004000 +:1032E00081B200000400004081B2000004000040F0 +:1032F00081B200000400004081B2000004000040E0 +:1033000081B200000400004081B2000004000040CF +:1033100081B200000400004081B2000004000040BF +:1033200081B200000400004081B2000004000040AF +:1033300081B200000400004081B20000040000409F +:1033400081B200000400004081B20000040000408F +:1033500081B200000400004081B20000040000407F +:1033600081B200000400004081B20000040000406F +:1033700081B200000400004081B20000040000405F +:1033800081B200000400004081B20000040000404F +:1033900081B200000400004081B20000040000403F +:1033A00081B200000400004081B20000040000402F +:1033B00081B200000400004081B20000040000401F +:1033C00081B200000400004081B20000040000400F +:1033D00081B200000400004081B2000004000040FF +:1033E00081B200000400004081B2000004000040EF +:1033F00081B200000400004081B2000004000040DF +:1034000081B200000400004081B2000004000040CE +:1034100081B200000400004081B2000004000040BE +:1034200081B200000400004081B2000004000040AE +:1034300081B200000400004081B20000040000409E +:1034400081B200000400004081B20000040000408E +:1034500081B200000400004081B20000040000407E +:1034600081B200000400004081B20000040000406E +:1034700081B200000400004081B20000040000405E +:1034800081B200000400004081B20000040000404E +:1034900081B200000400004081B20000040000403E +:1034A00081B200000400004081B20000040000402E +:1034B00081B200000400004081B20000040000401E +:1034C00081B200000400004081B20000040000400E +:1034D00081B200000400004081B2000004000040FE +:1034E00081B200000400004081B2000004000040EE +:1034F00081B200000400004081B2000004000040DE +:1035000081B200000400004081B2000004000040CD +:1035100081B200000400004081B2000004000040BD +:1035200081B200000400004081B2000004000040AD +:1035300081B200000400004081B20000040000409D +:1035400081B200000400004081B20000040000408D +:1035500081B200000400004081B20000040000407D +:1035600081B200000400004081B20000040000406D +:1035700081B200000400004081B20000040000405D +:1035800081B200000400004081B20000040000404D +:1035900081B200000400004081B20000040000403D +:1035A00081B200000400004081B20000040000402D +:1035B00081B200000400004081B20000040000401D +:1035C00081B200000400004081B20000040000400D +:1035D00081B200000400004081B2000004000040FD +:1035E00081B200000400004081B2000004000040ED +:1035F00081B200000400004081B2000004000040DD +:1036000081B200000400004081B2000004000040CC +:1036100081B200000400004081B2000004000040BC +:1036200081B200000400004081B2000004000040AC +:1036300081B200000400004081B20000040000409C +:1036400081B200000400004081B20000040000408C +:1036500081B200000400004081B20000040000407C +:1036600081B200000400004081B20000040000406C +:1036700081B200000400004081B20000040000405C +:1036800081B200000400004081B20000040000404C +:1036900081B200000400004081B20000040000403C +:1036A00081B200000400004081B20000040000402C +:1036B00081B200000400004081B20000040000401C +:1036C00081B200000400004081B20000040000400C +:1036D00081B200000400004081B2000004000040FC +:1036E00081B200000400004081B2000004000040EC +:1036F00081B200000400004081B2000004000040DC +:1037000081B200000400004081B2000004000040CB +:1037100081B200000400004081B2000004000040BB +:1037200081B200000400004081B2000004000040AB +:1037300081B200000400004081B20000040000409B +:1037400081B200000400004081B20000040000408B +:1037500081B200000400004081B20000040000407B +:1037600081B200000400004081B20000040000406B +:1037700081B200000400004081B20000040000405B +:1037800081B200000400004081B20000040000404B +:1037900081B200000400004081B20000040000403B +:1037A00081B200000400004081B20000040000402B +:1037B00081B200000400004081B20000040000401B +:1037C00081B200000400004081B20000040000400B +:1037D00081B200000400004081B2000004000040FB +:1037E00081B200000400004081B2000004000040EB +:1037F00081B200000400004081B2000004000040DB +:1038000081B200000400004081B2000004000040CA +:1038100081B200000400004081B2000004000040BA +:1038200081B200000400004081B2000004000040AA +:1038300081B200000400004081B20000040000409A +:1038400081B200000400004081B20000040000408A +:1038500081B200000400004081B20000040000407A +:1038600081B200000400004081B20000040000406A +:1038700081B200000400004081B20000040000405A +:1038800081B200000400004081B20000040000404A +:1038900081B200000400004081B20000040000403A +:1038A00081B200000400004081B20000040000402A +:1038B00081B200000400004081B20000040000401A +:1038C00081B200000400004081B20000040000400A +:1038D00081B200000400004081B2000004000040FA +:1038E00081B200000400004081B2000004000040EA +:1038F00081B200000400004081B2000004000040DA +:1039000081B200000400004081B2000004000040C9 +:1039100081B200000400004081B2000004000040B9 +:1039200081B200000400004081B2000004000040A9 +:1039300081B200000400004081B200000400004099 +:1039400081B200000400004081B200000400004089 +:1039500081B200000400004081B200000400004079 +:1039600081B200000400004081B200000400004069 +:1039700081B200000400004081B200000400004059 +:1039800081B200000400004081B200000400004049 +:1039900081B200000400004081B200000400004039 +:1039A00081B200000400004081B200000400004029 +:1039B00081B200000400004081B200000400004019 +:1039C00081B200000400004081B200000400004009 +:1039D00081B200000400004081B2000004000040F9 +:1039E00081B200000400004081B2000004000040E9 +:1039F00081B200000400004081B2000004000040D9 +:103A000081B200000400004081B2000004000040C8 +:103A100081B200000400004081B2000004000040B8 +:103A200081B200000400004081B2000004000040A8 +:103A300081B200000400004081B200000400004098 +:103A400081B200000400004081B200000400004088 +:103A500081B200000400004081B200000400004078 +:103A600081B200000400004081B200000400004068 +:103A700081B200000400004081B200000400004058 +:103A800081B200000400004081B200000400004048 +:103A900081B200000400004081B200000400004038 +:103AA00081B200000400004081B200000400004028 +:103AB00081B200000400004081B200000400004018 +:103AC00081B200000400004081B200000400004008 +:103AD00081B200000400004081B2000004000040F8 +:103AE00081B200000400004081B2000004000040E8 +:103AF00081B200000400004081B2000004000040D8 +:103B000081B200000400004081B2000004000040C7 +:103B100081B200000400004081B2000004000040B7 +:103B200081B200000400004081B2000004000040A7 +:103B300081B200000400004081B200000400004097 +:103B400081B200000400004081B200000400004087 +:103B500081B200000400004081B200000400004077 +:103B600081B200000400004081B200000400004067 +:103B700081B200000400004081B200000400004057 +:103B800081B200000400004081B200000400004047 +:103B900081B200000400004081B200000400004037 +:103BA00081B200000400004081B200000400004027 +:103BB00081B200000400004081B200000400004017 +:103BC00081B200000400004081B200000400004007 +:103BD00081B200000400004081B2000004000040F7 +:103BE00081B200000400004081B2000004000040E7 +:103BF00081B200000400004081B2000004000040D7 +:103C000081B200000400004081B2000004000040C6 +:103C100081B200000400004081B2000004000040B6 +:103C200081B200000400004081B2000004000040A6 +:103C300081B200000400004081B200000400004096 +:103C400081B200000400004081B200000400004086 +:103C500081B200000400004081B200000400004076 +:103C600081B200000400004081B200000400004066 +:103C700081B200000400004081B200000400004056 +:103C800081B200000400004081B200000400004046 +:103C900081B200000400004081B200000400004036 +:103CA00081B200000400004081B200000400004026 +:103CB00081B200000400004081B200000400004016 +:103CC00081B200000400004081B200000400004006 +:103CD00081B200000400004081B2000004000040F6 +:103CE00081B200000400004081B2000004000040E6 +:103CF00081B200000400004081B2000004000040D6 +:103D000081B200000400004081B2000004000040C5 +:103D100081B200000400004081B2000004000040B5 +:103D200081B200000400004081B2000004000040A5 +:103D300081B200000400004081B200000400004095 +:103D400081B200000400004081B200000400004085 +:103D500081B200000400004081B200000400004075 +:103D600081B200000400004081B200000400004065 +:103D700081B200000400004081B200000400004055 +:103D800081B200000400004081B200000400004045 +:103D900081B200000400004081B200000400004035 +:103DA00081B200000400004081B200000400004025 +:103DB00081B200000400004081B200000400004015 +:103DC00081B200000400004081B200000400004005 +:103DD00081B200000400004081B2000004000040F5 +:103DE00081B200000400004081B2000004000040E5 +:103DF00081B200000400004081B2000004000040D5 +:103E000081B200000400004081B2000004000040C4 +:103E100081B200000400004081B2000004000040B4 +:103E200081B200000400004081B2000004000040A4 +:103E300081B200000400004081B200000400004094 +:103E400081B200000400004081B200000400004084 +:103E500081B200000400004081B200000400004074 +:103E600081B200000400004081B200000400004064 +:103E700081B200000400004081B200000400004054 +:103E800081B200000400004081B200000400004044 +:103E900081B200000400004081B200000400004034 +:103EA00081B200000400004081B200000400004024 +:103EB00081B200000400004081B200000400004014 +:103EC00081B200000400004081B200000400004004 +:103ED00081B200000400004081B2000004000040F4 +:103EE00081B200000400004081B2000004000040E4 +:103EF00081B200000400004081B2000004000040D4 +:103F000081B200000400004081B2000004000040C3 +:103F100081B200000400004081B2000004000040B3 +:103F200081B200000400004081B2000004000040A3 +:103F300081B200000400004081B200000400004093 +:103F400081B200000400004081B200000400004083 +:103F500081B200000400004081B200000400004073 +:103F600081B200000400004081B200000400004063 +:103F700081B200000400004081B200000400004053 +:103F800081B200000400004081B200000400004043 +:103F900081B200000400004081B200000400004033 +:103FA00081B200000400004081B200000400004023 +:103FB00081B200000400004081B200000400004013 +:103FC00081B200000400004081B200000400004003 +:103FD00081B200000400004081B2000004000040F3 +:103FE00081B200000400004081B2000004000040E3 +:103FF00081B200000400004081B2000004000040D3 +:1040000081B200000400004081B2000004000040C2 +:1040100081B200000400004081B2000004000040B2 +:1040200081B200000400004081B2000004000040A2 +:1040300081B200000400004081B200000400004092 +:1040400081B200000400004081B200000400004082 +:1040500081B200000400004081B200000400004072 +:1040600081B200000400004081B200000400004062 +:1040700081B200000400004081B200000400004052 +:1040800081B200000400004081B200000400004042 +:1040900081B200000400004081B200000400004032 +:1040A00081B200000400004081B200000400004022 +:1040B00081B200000400004081B200000400004012 +:1040C00081B200000400004081B200000400004002 +:1040D00081B200000400004081B2000004000040F2 +:1040E00081B200000400004081B2000004000040E2 +:1040F00081B200000400004081B2000004000040D2 +:1041000081B200000400004081B2000004000040C1 +:1041100081B200000400004081B2000004000040B1 +:1041200081B200000400004081B2000004000040A1 +:1041300081B200000400004081B200000400004091 +:1041400081B200000400004081B200000400004081 +:1041500081B200000400004081B200000400004071 +:1041600081B200000400004081B200000400004061 +:1041700081B200000400004081B200000400004051 +:1041800081B200000400004081B200000400004041 +:1041900081B200000400004081B200000400004031 +:1041A00081B200000400004081B200000400004021 +:1041B00081B200000400004081B200000400004011 +:1041C00081B200000400004081B200000400004001 +:1041D00081B200000400004081B2000004000040F1 +:1041E00081B200000400004081B2000004000040E1 +:1041F00081B200000400004081B2000004000040D1 +:1042000081B200000400004081B2000004000040C0 +:1042100081B200000400004081B2000004000040B0 +:1042200081B200000400004081B2000004000040A0 +:1042300081B200000400004081B200000400004090 +:1042400081B200000400004081B200000400004080 +:1042500081B200000400004081B200000400004070 +:1042600081B200000400004081B200000400004060 +:1042700081B200000400004081B200000400004050 +:1042800081B200000400004081B200000400004040 +:1042900081B200000400004081B200000400004030 +:1042A00081B200000400004081B200000400004020 +:1042B00081B200000400004081B200000400004010 +:1042C00081B200000400004081B200000400004000 +:1042D00081B200000400004081B2000004000040F0 +:1042E00081B200000400004081B2000004000040E0 +:1042F00081B200000400004081B2000004000040D0 +:1043000081B200000400004081B2000004000040BF +:1043100081B200000400004081B2000004000040AF +:1043200081B200000400004081B20000040000409F +:1043300081B200000400004081B20000040000408F +:1043400081B200000400004081B20000040000407F +:1043500081B200000400004081B20000040000406F +:1043600081B200000400004081B20000040000405F +:1043700081B200000400004081B20000040000404F +:1043800081B200000400004081B20000040000403F +:1043900081B200000400004081B20000040000402F +:1043A00081B200000400004081B20000040000401F +:1043B00081B200000400004081B20000040000400F +:1043C00081B200000400004081B2000004000040FF +:1043D00081B200000400004081B2000004000040EF +:1043E00081B200000400004081B2000004000040DF +:1043F00081B200000400004081B2000004000040CF +:1044000081B200000400004081B2000004000040BE +:1044100081B200000400004081B2000004000040AE +:1044200081B200000400004081B20000040000409E +:1044300081B200000400004081B20000040000408E +:1044400081B200000400004081B20000040000407E +:1044500081B200000400004081B20000040000406E +:1044600081B200000400004081B20000040000405E +:1044700081B200000400004081B20000040000404E +:1044800081B200000400004081B20000040000403E +:1044900081B200000400004081B20000040000402E +:1044A00081B200000400004081B20000040000401E +:1044B00081B200000400004081B20000040000400E +:1044C00081B200000400004081B2000004000040FE +:1044D00081B200000400004081B2000004000040EE +:1044E00081B200000400004081B2000004000040DE +:1044F00081B200000400004081B2000004000040CE +:1045000081B200000400004081B2000004000040BD +:1045100081B200000400004081B2000004000040AD +:1045200081B200000400004081B20000040000409D +:1045300081B200000400004081B20000040000408D +:1045400081B200000400004081B20000040000407D +:1045500081B200000400004081B20000040000406D +:1045600081B200000400004081B20000040000405D +:1045700081B200000400004081B20000040000404D +:1045800081B200000400004081B20000040000403D +:1045900081B200000400004081B20000040000402D +:1045A00081B200000400004081B20000040000401D +:1045B00081B200000400004081B20000040000400D +:1045C00081B200000400004081B2000004000040FD +:1045D00081B200000400004081B2000004000040ED +:1045E00081B200000400004081B2000004000040DD +:1045F00081B200000400004081B2000004000040CD +:1046000081B200000400004081B2000004000040BC +:1046100081B200000400004081B2000004000040AC +:1046200081B200000400004081B20000040000409C +:1046300081B200000400004081B20000040000408C +:1046400081B200000400004081B20000040000407C +:1046500081B200000400004081B20000040000406C +:1046600081B200000400004081B20000040000405C +:1046700081B200000400004081B20000040000404C +:1046800081B200000400004081B20000040000403C +:1046900081B200000400004081B20000040000402C +:1046A00081B200000400004081B20000040000401C +:1046B00081B200000400004081B20000040000400C +:1046C00081B200000400004081B2000004000040FC +:1046D00081B200000400004081B2000004000040EC +:1046E00081B200000400004081B2000004000040DC +:1046F00081B200000400004081B2000004000040CC +:1047000081B200000400004081B2000004000040BB +:1047100081B200000400004081B2000004000040AB +:1047200081B200000400004081B20000040000409B +:1047300081B200000400004081B20000040000408B +:1047400081B200000400004081B20000040000407B +:1047500081B200000400004081B20000040000406B +:1047600081B200000400004081B20000040000405B +:1047700081B200000400004081B20000040000404B +:1047800081B200000400004081B20000040000403B +:1047900081B200000400004081B20000040000402B +:1047A00081B200000400004081B20000040000401B +:1047B00081B200000400004081B20000040000400B +:1047C00081B200000400004081B2000004000040FB +:1047D00081B200000400004081B2000004000040EB +:1047E00081B200000400004081B2000004000040DB +:1047F00081B200000400004081B2000004000040CB +:1048000081B200000400004081B2000004000040BA +:1048100081B200000400004081B2000004000040AA +:1048200081B200000400004081B20000040000409A +:1048300081B200000400004081B20000040000408A +:1048400081B200000400004081B20000040000407A +:1048500081B200000400004081B20000040000406A +:1048600081B200000400004081B20000040000405A +:1048700081B200000400004081B20000040000404A +:1048800081B200000400004081B20000040000403A +:1048900081B200000400004081B20000040000402A +:1048A00081B200000400004081B20000040000401A +:1048B00081B200000400004081B20000040000400A +:1048C00081B200000400004081B2000004000040FA +:1048D00081B200000400004081B2000004000040EA +:1048E00081B200000400004081B2000004000040DA +:1048F00081B200000400004081B2000004000040CA +:1049000081B200000400004081B2000004000040B9 +:1049100081B200000400004081B2000004000040A9 +:1049200081B200000400004081B200000400004099 +:1049300081B200000400004081B200000400004089 +:1049400081B200000400004081B200000400004079 +:1049500081B200000400004081B200000400004069 +:1049600081B200000400004081B200000400004059 +:1049700081B200000400004081B200000400004049 +:1049800081B200000400004081B200000400004039 +:1049900081B200000400004081B200000400004029 +:1049A00081B200000400004081B200000400004019 +:1049B00081B200000400004081B200000400004009 +:1049C00081B200000400004081B2000004000040F9 +:1049D00081B200000400004081B2000004000040E9 +:1049E00081B200000400004081B2000004000040D9 +:1049F00081B200000400004081B2000004000040C9 +:104A000081B200000400004081B2000004000040B8 +:104A100081B200000400004081B2000004000040A8 +:104A200081B200000400004081B200000400004098 +:104A300081B200000400004081B200000400004088 +:104A400081B200000400004081B200000400004078 +:104A500081B200000400004081B200000400004068 +:104A600081B200000400004081B200000400004058 +:104A700081B200000400004081B200000400004048 +:104A800081B200000400004081B200000400004038 +:104A900081B200000400004081B200000400004028 +:104AA00081B200000400004081B200000400004018 +:104AB00081B200000400004081B200000400004008 +:104AC00081B200000400004081B2000004000040F8 +:104AD00081B200000400004081B2000004000040E8 +:104AE00081B200000400004081B2000004000040D8 +:104AF00081B200000400004081B2000004000040C8 +:104B000081B200000400004081B2000004000040B7 +:104B100081B200000400004081B2000004000040A7 +:104B200081B200000400004081B200000400004097 +:104B300081B200000400004081B200000400004087 +:104B400081B200000400004081B200000400004077 +:104B500081B200000400004081B200000400004067 +:104B600081B200000400004081B200000400004057 +:104B700081B200000400004081B200000400004047 +:104B800081B200000400004081B200000400004037 +:104B900081B200000400004081B200000400004027 +:104BA00081B200000400004081B200000400004017 +:104BB00081B200000400004081B200000400004007 +:104BC00081B200000400004081B2000004000040F7 +:104BD00081B200000400004081B2000004000040E7 +:104BE00081B200000400004081B2000004000040D7 +:104BF00081B200000400004081B2000004000040C7 +:104C000081B200000400004081B2000004000040B6 +:104C100081B200000400004081B2000004000040A6 +:104C200081B200000400004081B200000400004096 +:104C300081B200000400004081B200000400004086 +:104C400081B200000400004081B200000400004076 +:104C500081B200000400004081B200000400004066 +:104C600081B200000400004081B200000400004056 +:104C700081B200000400004081B200000400004046 +:104C800081B200000400004081B200000400004036 +:104C900081B200000400004081B200000400004026 +:104CA00081B200000400004081B200000400004016 +:104CB00081B200000400004081B200000400004006 +:104CC00081B200000400004081B2000004000040F6 +:104CD00081B200000400004081B2000004000040E6 +:104CE00081B200000400004081B2000004000040D6 +:104CF00081B200000400004081B2000004000040C6 +:104D000081B200000400004081B2000004000040B5 +:104D100081B200000400004081B2000004000040A5 +:104D200081B200000400004081B200000400004095 +:104D300081B200000400004081B200000400004085 +:104D400081B200000400004081B200000400004075 +:104D500081B200000400004081B200000400004065 +:104D600081B200000400004081B200000400004055 +:104D700081B200000400004081B200000400004045 +:104D800081B200000400004081B200000400004035 +:104D900081B200000400004081B200000400004025 +:104DA00081B200000400004081B200000400004015 +:104DB00081B200000400004081B200000400004005 +:104DC00081B200000400004081B2000004000040F5 +:104DD00081B200000400004081B2000004000040E5 +:104DE00081B200000400004081B2000004000040D5 +:104DF00081B200000400004081B2000004000040C5 +:104E000081B200000400004081B2000004000040B4 +:104E100081B200000400004081B2000004000040A4 +:104E200081B200000400004081B200000400004094 +:104E300081B200000400004081B200000400004084 +:104E400081B200000400004081B200000400004074 +:104E500081B200000400004081B200000400004064 +:104E600081B200000400004081B200000400004054 +:104E700081B200000400004081B200000400004044 +:104E800081B200000400004081B200000400004034 +:104E900081B200000400004081B200000400004024 +:104EA00081B200000400004081B200000400004014 +:104EB00081B200000400004081B200000400004004 +:104EC00081B200000400004081B2000004000040F4 +:104ED00081B200000400004081B2000004000040E4 +:104EE00081B200000400004081B2000004000040D4 +:104EF00081B200000400004081B2000004000040C4 +:104F000081B200000400004081B2000004000040B3 +:104F100081B200000400004081B2000004000040A3 +:104F200081B200000400004081B200000400004093 +:104F300081B200000400004081B200000400004083 +:104F400081B200000400004081B200000400004073 +:104F500081B200000400004081B200000400004063 +:104F600081B200000400004081B200000400004053 +:104F700081B200000400004081B200000400004043 +:104F800081B200000400004081B200000400004033 +:104F900081B200000400004081B200000400004023 +:104FA00081B200000400004081B200000400004013 +:104FB00081B200000400004081B200000400004003 +:104FC00081B200000400004081B2000004000040F3 +:104FD00081B200000400004081B2000004000040E3 +:104FE00081B200000400004081B2000004000040D3 +:104FF00081B200000400004081B2000004000040C3 +:1050000081B200000400004081B2000004000040B2 +:1050100081B200000400004081B2000004000040A2 +:1050200081B200000400004081B200000400004092 +:1050300081B200000400004081B200000400004082 +:1050400081B200000400004081B200000400004072 +:1050500081B200000400004081B200000400004062 +:1050600081B200000400004081B200000400004052 +:1050700081B200000400004081B200000400004042 +:1050800081B200000400004081B200000400004032 +:1050900081B200000400004081B200000400004022 +:1050A00081B200000400004081B200000400004012 +:1050B00081B200000400004081B200000400004002 +:1050C00081B200000400004081B2000004000040F2 +:1050D00081B200000400004081B2000004000040E2 +:1050E00081B200000400004081B2000004000040D2 +:1050F00081B200000400004081B2000004000040C2 +:1051000081B200000400004081B2000004000040B1 +:1051100081B200000400004081B2000004000040A1 +:1051200081B200000400004081B200000400004091 +:1051300081B200000400004081B200000400004081 +:1051400081B200000400004081B200000400004071 +:1051500081B200000400004081B200000400004061 +:1051600081B200000400004081B200000400004051 +:1051700081B200000400004081B200000400004041 +:1051800081B200000400004081B200000400004031 +:1051900081B200000400004081B200000400004021 +:1051A00081B200000400004081B200000400004011 +:1051B00081B200000400004081B200000400004001 +:1051C00081B200000400004081B2000004000040F1 +:1051D00081B200000400004081B2000004000040E1 +:1051E00081B200000400004081B2000004000040D1 +:1051F00081B200000400004081B2000004000040C1 +:1052000081B200000400004081B2000004000040B0 +:1052100081B200000400004081B2000004000040A0 +:1052200081B200000400004081B200000400004090 +:1052300081B200000400004081B200000400004080 +:1052400081B200000400004081B200000400004070 +:1052500081B200000400004081B200000400004060 +:1052600081B200000400004081B200000400004050 +:1052700081B200000400004081B200000400004040 +:1052800081B200000400004081B200000400004030 +:1052900081B200000400004081B200000400004020 +:1052A00081B200000400004081B200000400004010 +:1052B00081B200000400004081B200000400004000 +:1052C00081B200000400004081B2000004000040F0 +:1052D00081B200000400004081B2000004000040E0 +:1052E00081B200000400004081B2000004000040D0 +:1052F00081B200000400004081B2000004000040C0 +:1053000081B200000400004081B2000004000040AF +:1053100081B200000400004081B20000040000409F +:1053200081B200000400004081B20000040000408F +:1053300081B200000400004081B20000040000407F +:1053400081B200000400004081B20000040000406F +:1053500081B200000400004081B20000040000405F +:1053600081B200000400004081B20000040000404F +:1053700081B200000400004081B20000040000403F +:1053800081B200000400004081B20000040000402F +:1053900081B200000400004081B20000040000401F +:1053A00081B200000400004081B20000040000400F +:1053B00081B200000400004081B2000004000040FF +:1053C00081B200000400004081B2000004000040EF +:1053D00081B200000400004081B2000004000040DF +:1053E00081B200000400004081B2000004000040CF +:1053F00081B200000400004081B2000004000040BF +:1054000081B200000400004081B2000004000040AE +:1054100081B200000400004081B20000040000409E +:1054200081B200000400004081B20000040000408E +:1054300081B200000400004081B20000040000407E +:1054400081B200000400004081B20000040000406E +:1054500081B200000400004081B20000040000405E +:1054600081B200000400004081B20000040000404E +:1054700081B200000400004081B20000040000403E +:1054800081B200000400004081B20000040000402E +:1054900081B200000400004081B20000040000401E +:1054A00081B200000400004081B20000040000400E +:1054B00081B200000400004081B2000004000040FE +:1054C00081B200000400004081B2000004000040EE +:1054D00081B200000400004081B2000004000040DE +:1054E00081B200000400004081B2000004000040CE +:1054F00081B200000400004081B2000004000040BE +:1055000081B200000400004081B2000004000040AD +:1055100081B200000400004081B20000040000409D +:1055200081B200000400004081B20000040000408D +:1055300081B200000400004081B20000040000407D +:1055400081B200000400004081B20000040000406D +:1055500081B200000400004081B20000040000405D +:1055600081B200000400004081B20000040000404D +:1055700081B200000400004081B20000040000403D +:1055800081B200000400004081B20000040000402D +:1055900081B200000400004081B20000040000401D +:1055A00081B200000400004081B20000040000400D +:1055B00081B200000400004081B2000004000040FD +:1055C00081B200000400004081B2000004000040ED +:1055D00081B200000400004081B2000004000040DD +:1055E00081B200000400004081B2000004000040CD +:1055F00081B200000400004081B2000004000040BD +:1056000081B200000400004081B2000004000040AC +:1056100081B200000400004081B20000040000409C +:1056200081B200000400004081B20000040000408C +:1056300081B200000400004081B20000040000407C +:1056400081B200000400004081B20000040000406C +:1056500081B200000400004081B20000040000405C +:1056600081B200000400004081B20000040000404C +:1056700081B200000400004081B20000040000403C +:1056800081B200000400004081B20000040000402C +:1056900081B200000400004081B20000040000401C +:1056A00081B200000400004081B20000040000400C +:1056B00081B200000400004081B2000004000040FC +:1056C00081B200000400004081B2000004000040EC +:1056D00081B200000400004081B2000004000040DC +:1056E00081B200000400004081B2000004000040CC +:1056F00081B200000400004081B2000004000040BC +:1057000081B200000400004081B2000004000040AB +:1057100081B200000400004081B20000040000409B +:1057200081B200000400004081B20000040000408B +:1057300081B200000400004081B20000040000407B +:1057400081B200000400004081B20000040000406B +:1057500081B200000400004081B20000040000405B +:1057600081B200000400004081B20000040000404B +:1057700081B200000400004081B20000040000403B +:1057800081B200000400004081B20000040000402B +:1057900081B200000400004081B20000040000401B +:1057A00081B200000400004081B20000040000400B +:1057B00081B200000400004081B2000004000040FB +:1057C00081B200000400004081B2000004000040EB +:1057D00081B200000400004081B2000004000040DB +:1057E00081B200000400004081B2000004000040CB +:1057F00081B200000400004081B2000004000040BB +:1058000081B200000400004081B2000004000040AA +:1058100081B200000400004081B20000040000409A +:1058200081B200000400004081B20000040000408A +:1058300081B200000400004081B20000040000407A +:1058400081B200000400004081B20000040000406A +:1058500081B200000400004081B20000040000405A +:1058600081B200000400004081B20000040000404A +:1058700081B200000400004081B20000040000403A +:1058800081B200000400004081B20000040000402A +:1058900081B200000400004081B20000040000401A +:1058A00081B200000400004081B20000040000400A +:1058B00081B200000400004081B2000004000040FA +:1058C00081B200000400004081B2000004000040EA +:1058D00081B200000400004081B2000004000040DA +:1058E00081B200000400004081B2000004000040CA +:1058F00081B200000400004081B2000004000040BA +:1059000081B200000400004081B2000004000040A9 +:1059100081B200000400004081B200000400004099 +:1059200081B200000400004081B200000400004089 +:1059300081B200000400004081B200000400004079 +:1059400081B200000400004081B200000400004069 +:1059500081B200000400004081B200000400004059 +:1059600081B200000400004081B200000400004049 +:1059700081B200000400004081B200000400004039 +:1059800081B200000400004081B200000400004029 +:1059900081B200000400004081B200000400004019 +:1059A00081B200000400004081B200000400004009 +:1059B00081B200000400004081B2000004000040F9 +:1059C00081B200000400004081B2000004000040E9 +:1059D00081B200000400004081B2000004000040D9 +:1059E00081B200000400004081B2000004000040C9 +:1059F00081B200000400004081B2000004000040B9 +:105A000081B200000400004081B2000004000040A8 +:105A100081B200000400004081B200000400004098 +:105A200081B200000400004081B200000400004088 +:105A300081B200000400004081B200000400004078 +:105A400081B200000400004081B200000400004068 +:105A500081B200000400004081B200000400004058 +:105A600081B200000400004081B200000400004048 +:105A700081B200000400004081B200000400004038 +:105A800081B200000400004081B200000400004028 +:105A900081B200000400004081B200000400004018 +:105AA00081B200000400004081B200000400004008 +:105AB00081B200000400004081B2000004000040F8 +:105AC00081B200000400004081B2000004000040E8 +:105AD00081B200000400004081B2000004000040D8 +:105AE00081B200000400004081B2000004000040C8 +:105AF00081B200000400004081B2000004000040B8 +:105B000081B200000400004081B2000004000040A7 +:105B100081B200000400004081B200000400004097 +:105B200081B200000400004081B200000400004087 +:105B300081B200000400004081B200000400004077 +:105B400081B200000400004081B200000400004067 +:105B500081B200000400004081B200000400004057 +:105B600081B200000400004081B200000400004047 +:105B700081B200000400004081B200000400004037 +:105B800081B200000400004081B200000400004027 +:105B900081B200000400004081B200000400004017 +:105BA00081B200000400004081B200000400004007 +:105BB00081B200000400004081B2000004000040F7 +:105BC00081B200000400004081B2000004000040E7 +:105BD00081B200000400004081B2000004000040D7 +:105BE00081B200000400004081B2000004000040C7 +:105BF00081B200000400004081B2000004000040B7 +:105C000081B200000400004081B2000004000040A6 +:105C100081B200000400004081B200000400004096 +:105C200081B200000400004081B200000400004086 +:105C300081B200000400004081B200000400004076 +:105C400081B200000400004081B200000400004066 +:105C500081B200000400004081B200000400004056 +:105C600081B200000400004081B200000400004046 +:105C700081B200000400004081B200000400004036 +:105C800081B200000400004081B200000400004026 +:105C900081B200000400004081B200000400004016 +:105CA00081B200000400004081B200000400004006 +:105CB00081B200000400004081B2000004000040F6 +:105CC00081B200000400004081B2000004000040E6 +:105CD00081B200000400004081B2000004000040D6 +:105CE00081B200000400004081B2000004000040C6 +:105CF00081B200000400004081B2000004000040B6 +:105D000081B200000400004081B2000004000040A5 +:105D100081B200000400004081B200000400004095 +:105D200081B200000400004081B200000400004085 +:105D300081B200000400004081B200000400004075 +:105D400081B200000400004081B200000400004065 +:105D500081B200000400004081B200000400004055 +:105D600081B200000400004081B200000400004045 +:105D700081B200000400004081B200000400004035 +:105D800081B200000400004081B200000400004025 +:105D900081B200000400004081B200000400004015 +:105DA00081B200000400004081B200000400004005 +:105DB00081B200000400004081B2000004000040F5 +:105DC00081B200000400004081B2000004000040E5 +:105DD00081B200000400004081B2000004000040D5 +:105DE00081B200000400004081B2000004000040C5 +:105DF00081B200000400004081B2000004000040B5 +:105E000081B200000400004081B2000004000040A4 +:105E100081B200000400004081B200000400004094 +:105E200081B200000400004081B200000400004084 +:105E300081B200000400004081B200000400004074 +:105E400081B200000400004081B200000400004064 +:105E500081B200000400004081B200000400004054 +:105E600081B200000400004081B200000400004044 +:105E700081B200000400004081B200000400004034 +:105E800081B200000400004081B200000400004024 +:105E900081B200000400004081B200000400004014 +:105EA00081B200000400004081B200000400004004 +:105EB00081B200000400004081B2000004000040F4 +:105EC00081B200000400004081B2000004000040E4 +:105ED00081B200000400004081B2000004000040D4 +:105EE00081B200000400004081B2000004000040C4 +:105EF00081B200000400004081B2000004000040B4 +:105F000081B200000400004081B2000004000040A3 +:105F100081B200000400004081B200000400004093 +:105F200081B200000400004081B200000400004083 +:105F300081B200000400004081B200000400004073 +:105F400081B200000400004081B200000400004063 +:105F500081B200000400004081B200000400004053 +:105F600081B200000400004081B200000400004043 +:105F700081B200000400004081B200000400004033 +:105F800081B200000400004081B200000400004023 +:105F900081B200000400004081B200000400004013 +:105FA00081B200000400004081B200000400004003 +:105FB00081B200000400004081B2000004000040F3 +:105FC00081B200000400004081B2000004000040E3 +:105FD00081B200000400004081B2000004000040D3 +:105FE00081B200000400004081B2000004000040C3 +:105FF00081B200000400004081B2000004000040B3 +:1060000081B200000400004081B2000004000040A2 +:1060100081B200000400004081B200000400004092 +:1060200081B200000400004081B200000400004082 +:1060300081B200000400004081B200000400004072 +:1060400081B200000400004081B200000400004062 +:1060500081B200000400004081B200000400004052 +:1060600081B200000400004081B200000400004042 +:1060700081B200000400004081B200000400004032 +:1060800081B200000400004081B200000400004022 +:1060900081B200000400004081B200000400004012 +:1060A00081B200000400004081B200000400004002 +:1060B00081B200000400004081B2000004000040F2 +:1060C00081B200000400004081B2000004000040E2 +:1060D00081B200000400004081B2000004000040D2 +:1060E00081B200000400004081B2000004000040C2 +:1060F00081B200000400004081B2000004000040B2 +:1061000081B200000400004081B2000004000040A1 +:1061100081B200000400004081B200000400004091 +:1061200081B200000400004081B200000400004081 +:1061300081B200000400004081B200000400004071 +:1061400081B200000400004081B200000400004061 +:1061500081B200000400004081B200000400004051 +:1061600081B200000400004081B200000400004041 +:1061700081B200000400004081B200000400004031 +:1061800081B200000400004081B200000400004021 +:1061900081B200000400004081B200000400004011 +:1061A00081B200000400004081B200000400004001 +:1061B00081B200000400004081B2000004000040F1 +:1061C00081B200000400004081B2000004000040E1 +:1061D00081B200000400004081B2000004000040D1 +:1061E00081B200000400004081B2000004000040C1 +:1061F00081B200000400004081B2000004000040B1 +:1062000081B200000400004081B2000004000040A0 +:1062100081B200000400004081B200000400004090 +:1062200081B200000400004081B200000400004080 +:1062300081B200000400004081B200000400004070 +:1062400081B200000400004081B200000400004060 +:1062500081B200000400004081B200000400004050 +:1062600081B200000400004081B200000400004040 +:1062700081B200000400004081B200000400004030 +:1062800081B200000400004081B200000400004020 +:1062900081B200000400004081B200000400004010 +:1062A00081B200000400004081B200000400004000 +:1062B00081B200000400004081B2000004000040F0 +:1062C00081B200000400004081B2000004000040E0 +:1062D00081B200000400004081B2000004000040D0 +:1062E00081B200000400004081B2000004000040C0 +:1062F00081B200000400004081B2000004000040B0 +:1063000081B200000400004081B20000040000409F +:1063100081B200000400004081B20000040000408F +:1063200081B200000400004081B20000040000407F +:1063300081B200000400004081B20000040000406F +:1063400081B200000400004081B20000040000405F +:1063500081B200000400004081B20000040000404F +:1063600081B200000400004081B20000040000403F +:1063700081B200000400004081B20000040000402F +:1063800081B200000400004081B20000040000401F +:1063900081B200000400004081B20000040000400F +:1063A00081B200000400004081B2000004000040FF +:1063B00081B200000400004081B2000004000040EF +:1063C00081B200000400004081B2000004000040DF +:1063D00081B200000400004081B2000004000040CF +:1063E00081B200000400004081B2000004000040BF +:1063F00081B200000400004081B2000004000040AF +:1064000081B200000400004081B20000040000409E +:1064100081B200000400004081B20000040000408E +:1064200081B200000400004081B20000040000407E +:1064300081B200000400004081B20000040000406E +:1064400081B200000400004081B20000040000405E +:1064500081B200000400004081B20000040000404E +:1064600081B200000400004081B20000040000403E +:1064700081B200000400004081B20000040000402E +:1064800081B200000400004081B20000040000401E +:1064900081B200000400004081B20000040000400E +:1064A00081B200000400004081B2000004000040FE +:1064B00081B200000400004081B2000004000040EE +:1064C00081B200000400004081B2000004000040DE +:1064D00081B200000400004081B2000004000040CE +:1064E00081B200000400004081B2000004000040BE +:1064F00081B200000400004081B2000004000040AE +:1065000081B200000400004081B20000040000409D +:1065100081B200000400004081B20000040000408D +:1065200081B200000400004081B20000040000407D +:1065300081B200000400004081B20000040000406D +:1065400081B200000400004081B20000040000405D +:1065500081B200000400004081B20000040000404D +:1065600081B200000400004081B20000040000403D +:1065700081B200000400004081B20000040000402D +:1065800081B200000400004081B20000040000401D +:1065900081B200000400004081B20000040000400D +:1065A00081B200000400004081B2000004000040FD +:1065B00081B200000400004081B2000004000040ED +:1065C00081B200000400004081B2000004000040DD +:1065D00081B200000400004081B2000004000040CD +:1065E00081B200000400004081B2000004000040BD +:1065F00081B200000400004081B2000004000040AD +:1066000081B200000400004081B20000040000409C +:1066100081B200000400004081B20000040000408C +:1066200081B200000400004081B20000040000407C +:1066300081B200000400004081B20000040000406C +:1066400081B200000400004081B20000040000405C +:1066500081B200000400004081B20000040000404C +:1066600081B200000400004081B20000040000403C +:1066700081B200000400004081B20000040000402C +:1066800081B200000400004081B20000040000401C +:1066900081B200000400004081B20000040000400C +:1066A00081B200000400004081B2000004000040FC +:1066B00081B200000400004081B2000004000040EC +:1066C00081B200000400004081B2000004000040DC +:1066D00081B200000400004081B2000004000040CC +:1066E00081B200000400004081B2000004000040BC +:1066F00081B200000400004081B2000004000040AC +:1067000081B200000400004081B20000040000409B +:1067100081B200000400004081B20000040000408B +:1067200081B200000400004081B20000040000407B +:1067300081B200000400004081B20000040000406B +:1067400081B200000400004081B20000040000405B +:1067500081B200000400004081B20000040000404B +:1067600081B200000400004081B20000040000403B +:1067700081B200000400004081B20000040000402B +:1067800081B200000400004081B20000040000401B +:1067900081B200000400004081B20000040000400B +:1067A00081B200000400004081B2000004000040FB +:1067B00081B200000400004081B2000004000040EB +:1067C00081B200000400004081B2000004000040DB +:1067D00081B200000400004081B2000004000040CB +:1067E00081B200000400004081B2000004000040BB +:1067F00081B200000400004081B2000004000040AB +:1068000081B200000400004081B20000040000409A +:1068100081B200000400004081B20000040000408A +:1068200081B200000400004081B20000040000407A +:1068300081B200000400004081B20000040000406A +:1068400081B200000400004081B20000040000405A +:1068500081B200000400004081B20000040000404A +:1068600081B200000400004081B20000040000403A +:1068700081B200000400004081B20000040000402A +:1068800081B200000400004081B20000040000401A +:1068900081B200000400004081B20000040000400A +:1068A00081B200000400004081B2000004000040FA +:1068B00081B200000400004081B2000004000040EA +:1068C00081B200000400004081B2000004000040DA +:1068D00081B200000400004081B2000004000040CA +:1068E00081B200000400004081B2000004000040BA +:1068F00081B200000400004081B2000004000040AA +:1069000081B200000400004081B200000400004099 +:1069100081B200000400004081B200000400004089 +:1069200081B200000400004081B200000400004079 +:1069300081B200000400004081B200000400004069 +:1069400081B200000400004081B200000400004059 +:1069500081B200000400004081B200000400004049 +:1069600081B200000400004081B200000400004039 +:1069700081B200000400004081B200000400004029 +:1069800081B200000400004081B200000400004019 +:1069900081B200000400004081B200000400004009 +:1069A00081B200000400004081B2000004000040F9 +:1069B00081B200000400004081B2000004000040E9 +:1069C00081B200000400004081B2000004000040D9 +:1069D00081B200000400004081B2000004000040C9 +:1069E00081B200000400004081B2000004000040B9 +:1069F00081B200000400004081B2000004000040A9 +:106A000081B200000400004081B200000400004098 +:106A100081B200000400004081B200000400004088 +:106A200081B200000400004081B200000400004078 +:106A300081B200000400004081B200000400004068 +:106A400081B200000400004081B200000400004058 +:106A500081B200000400004081B200000400004048 +:106A600081B200000400004081B200000400004038 +:106A700081B200000400004081B200000400004028 +:106A800081B200000400004081B200000400004018 +:106A900081B200000400004081B200000400004008 +:106AA00081B200000400004081B2000004000040F8 +:106AB00081B200000400004081B2000004000040E8 +:106AC00081B200000400004081B2000004000040D8 +:106AD00081B200000400004081B2000004000040C8 +:106AE00081B200000400004081B2000004000040B8 +:106AF00081B200000400004081B2000004000040A8 +:106B000081B200000400004081B200000400004097 +:106B100081B200000400004081B200000400004087 +:106B200081B200000400004081B200000400004077 +:106B300081B200000400004081B200000400004067 +:106B400081B200000400004081B200000400004057 +:106B500081B200000400004081B200000400004047 +:106B600081B200000400004081B200000400004037 +:106B700081B200000400004081B200000400004027 +:106B800081B200000400004081B200000400004017 +:106B900081B200000400004081B200000400004007 +:106BA00081B200000400004081B2000004000040F7 +:106BB00081B200000400004081B2000004000040E7 +:106BC00081B200000400004081B2000004000040D7 +:106BD00081B200000400004081B2000004000040C7 +:106BE00081B200000400004081B2000004000040B7 +:106BF00081B200000400004081B2000004000040A7 +:106C000081B200000400004081B200000400004096 +:106C100081B200000400004081B200000400004086 +:106C200081B200000400004081B200000400004076 +:106C300081B200000400004081B200000400004066 +:106C400081B200000400004081B200000400004056 +:106C500081B200000400004081B200000400004046 +:106C600081B200000400004081B200000400004036 +:106C700081B200000400004081B200000400004026 +:106C800081B200000400004081B200000400004016 +:106C900081B200000400004081B200000400004006 +:106CA00081B200000400004081B2000004000040F6 +:106CB00081B200000400004081B2000004000040E6 +:106CC00081B200000400004081B2000004000040D6 +:106CD00081B200000400004081B2000004000040C6 +:106CE00081B200000400004081B2000004000040B6 +:106CF00081B200000400004081B2000004000040A6 +:106D000081B200000400004081B200000400004095 +:106D100081B200000400004081B200000400004085 +:106D200081B200000400004081B200000400004075 +:106D300081B200000400004081B200000400004065 +:106D400081B200000400004081B200000400004055 +:106D500081B200000400004081B200000400004045 +:106D600081B200000400004081B200000400004035 +:106D700081B200000400004081B200000400004025 +:106D800081B200000400004081B200000400004015 +:106D900081B200000400004081B200000400004005 +:106DA00081B200000400004081B2000004000040F5 +:106DB00081B200000400004081B2000004000040E5 +:106DC00081B200000400004081B2000004000040D5 +:106DD00081B200000400004081B2000004000040C5 +:106DE00081B200000400004081B2000004000040B5 +:106DF00081B200000400004081B2000004000040A5 +:106E000081B200000400004081B200000400004094 +:106E100081B200000400004081B200000400004084 +:106E200081B200000400004081B200000400004074 +:106E300081B200000400004081B200000400004064 +:106E400081B200000400004081B200000400004054 +:106E500081B200000400004081B200000400004044 +:106E600081B200000400004081B200000400004034 +:106E700081B200000400004081B200000400004024 +:106E800081B200000400004081B200000400004014 +:106E900081B200000400004081B200000400004004 +:106EA00081B200000400004081B2000004000040F4 +:106EB00081B200000400004081B2000004000040E4 +:106EC00081B200000400004081B2000004000040D4 +:106ED00081B200000400004081B2000004000040C4 +:106EE00081B200000400004081B2000004000040B4 +:106EF00081B200000400004081B2000004000040A4 +:106F000081B200000400004081B200000400004093 +:106F100081B200000400004081B200000400004083 +:106F200081B200000400004081B200000400004073 +:106F300081B200000400004081B200000400004063 +:106F400081B200000400004081B200000400004053 +:106F500081B200000400004081B200000400004043 +:106F600081B200000400004081B200000400004033 +:106F700081B200000400004081B200000400004023 +:106F800081B200000400004081B200000400004013 +:106F900081B200000400004081B200000400004003 +:106FA00081B200000400004081B2000004000040F3 +:106FB00081B200000400004081B2000004000040E3 +:106FC00081B200000400004081B2000004000040D3 +:106FD00081B200000400004081B2000004000040C3 +:106FE00081B200000400004081B2000004000040B3 +:106FF00081B200000400004081B2000004000040A3 +:1070000081B200000400004081B200000400004092 +:1070100081B200000400004081B200000400004082 +:1070200081B200000400004081B200000400004072 +:1070300081B200000400004081B200000400004062 +:1070400081B200000400004081B200000400004052 +:1070500081B200000400004081B200000400004042 +:1070600081B200000400004081B200000400004032 +:1070700081B200000400004081B200000400004022 +:1070800081B200000400004081B200000400004012 +:1070900081B200000400004081B200000400004002 +:1070A00081B200000400004081B2000004000040F2 +:1070B00081B200000400004081B2000004000040E2 +:1070C00081B200000400004081B2000004000040D2 +:1070D00081B200000400004081B2000004000040C2 +:1070E00081B200000400004081B2000004000040B2 +:1070F00081B200000400004081B2000004000040A2 +:1071000081B200000400004081B200000400004091 +:1071100081B200000400004081B200000400004081 +:1071200081B200000400004081B200000400004071 +:1071300081B200000400004081B200000400004061 +:1071400081B200000400004081B200000400004051 +:1071500081B200000400004081B200000400004041 +:1071600081B200000400004081B200000400004031 +:1071700081B200000400004081B200000400004021 +:1071800081B200000400004081B200000400004011 +:1071900081B200000400004081B200000400004001 +:1071A00081B200000400004081B2000004000040F1 +:1071B00081B200000400004081B2000004000040E1 +:1071C00081B200000400004081B2000004000040D1 +:1071D00081B200000400004081B2000004000040C1 +:1071E00081B200000400004081B2000004000040B1 +:1071F00081B200000400004081B2000004000040A1 +:1072000081B200000400004081B200000400004090 +:1072100081B200000400004081B200000400004080 +:1072200081B200000400004081B200000400004070 +:1072300081B200000400004081B200000400004060 +:1072400081B200000400004081B200000400004050 +:1072500081B200000400004081B200000400004040 +:1072600081B200000400004081B200000400004030 +:1072700081B200000400004081B200000400004020 +:1072800081B200000400004081B200000400004010 +:1072900081B200000400004081B200000400004000 +:1072A00081B200000400004081B2000004000040F0 +:1072B00081B200000400004081B2000004000040E0 +:1072C00081B200000400004081B2000004000040D0 +:1072D00081B200000400004081B2000004000040C0 +:1072E00081B200000400004081B2000004000040B0 +:1072F00081B200000400004081B2000004000040A0 +:1073000081B200000400004081B20000040000408F +:1073100081B200000400004081B20000040000407F +:1073200081B200000400004081B20000040000406F +:1073300081B200000400004081B20000040000405F +:1073400081B200000400004081B20000040000404F +:1073500081B200000400004081B20000040000403F +:1073600081B200000400004081B20000040000402F +:1073700081B200000400004081B20000040000401F +:1073800081B200000400004081B20000040000400F +:1073900081B200000400004081B2000004000040FF +:1073A00081B200000400004081B2000004000040EF +:1073B00081B200000400004081B2000004000040DF +:1073C00081B200000400004081B2000004000040CF +:1073D00081B200000400004081B2000004000040BF +:1073E00081B200000400004081B2000004000040AF +:1073F00081B200000400004081B20000040000409F +:1074000081B200000400004081B20000040000408E +:1074100081B200000400004081B20000040000407E +:1074200081B200000400004081B20000040000406E +:1074300081B200000400004081B20000040000405E +:1074400081B200000400004081B20000040000404E +:1074500081B200000400004081B20000040000403E +:1074600081B200000400004081B20000040000402E +:1074700081B200000400004081B20000040000401E +:1074800081B200000400004081B20000040000400E +:1074900081B200000400004081B2000004000040FE +:1074A00081B200000400004081B2000004000040EE +:1074B00081B200000400004081B2000004000040DE +:1074C00081B200000400004081B2000004000040CE +:1074D00081B200000400004081B2000004000040BE +:1074E00081B200000400004081B2000004000040AE +:1074F00081B200000400004081B20000040000409E +:1075000081B200000400004081B20000040000408D +:1075100081B200000400004081B20000040000407D +:1075200081B200000400004081B20000040000406D +:1075300081B200000400004081B20000040000405D +:1075400081B200000400004081B20000040000404D +:1075500081B200000400004081B20000040000403D +:1075600081B200000400004081B20000040000402D +:1075700081B200000400004081B20000040000401D +:1075800081B200000400004081B20000040000400D +:1075900081B200000400004081B2000004000040FD +:1075A00081B200000400004081B2000004000040ED +:1075B00081B200000400004081B2000004000040DD +:1075C00081B200000400004081B2000004000040CD +:1075D00081B200000400004081B2000004000040BD +:1075E00081B200000400004081B2000004000040AD +:1075F00081B200000400004081B20000040000409D +:1076000081B200000400004081B20000040000408C +:1076100081B200000400004081B20000040000407C +:1076200081B200000400004081B20000040000406C +:1076300081B200000400004081B20000040000405C +:1076400081B200000400004081B20000040000404C +:1076500081B200000400004081B20000040000403C +:1076600081B200000400004081B20000040000402C +:1076700081B200000400004081B20000040000401C +:1076800081B200000400004081B20000040000400C +:1076900081B200000400004081B2000004000040FC +:1076A00081B200000400004081B2000004000040EC +:1076B00081B200000400004081B2000004000040DC +:1076C00081B200000400004081B2000004000040CC +:1076D00081B200000400004081B2000004000040BC +:1076E00081B200000400004081B2000004000040AC +:1076F00081B200000400004081B20000040000409C +:1077000081B200000400004081B20000040000408B +:1077100081B200000400004081B20000040000407B +:1077200081B200000400004081B20000040000406B +:1077300081B200000400004081B20000040000405B +:1077400081B200000400004081B20000040000404B +:1077500081B200000400004081B20000040000403B +:1077600081B200000400004081B20000040000402B +:1077700081B200000400004081B20000040000401B +:1077800081B200000400004081B20000040000400B +:1077900081B200000400004081B2000004000040FB +:1077A00081B200000400004081B2000004000040EB +:1077B00081B200000400004081B2000004000040DB +:1077C00081B200000400004081B2000004000040CB +:1077D00081B200000400004081B2000004000040BB +:1077E00081B200000400004081B2000004000040AB +:1077F00081B200000400004081B20000040000409B +:1078000081B200000400004081B20000040000408A +:1078100081B200000400004081B20000040000407A +:1078200081B200000400004081B20000040000406A +:1078300081B200000400004081B20000040000405A +:1078400081B200000400004081B20000040000404A +:1078500081B200000400004081B20000040000403A +:1078600081B200000400004081B20000040000402A +:1078700081B200000400004081B20000040000401A +:1078800081B200000400004081B20000040000400A +:1078900081B200000400004081B2000004000040FA +:1078A00081B200000400004081B2000004000040EA +:1078B00081B200000400004081B2000004000040DA +:1078C00081B200000400004081B2000004000040CA +:1078D00081B200000400004081B2000004000040BA +:1078E00081B200000400004081B2000004000040AA +:1078F00081B200000400004081B20000040000409A +:1079000081B200000400004081B200000400004089 +:1079100081B200000400004081B200000400004079 +:1079200081B200000400004081B200000400004069 +:1079300081B200000400004081B200000400004059 +:1079400081B200000400004081B200000400004049 +:1079500081B200000400004081B200000400004039 +:1079600081B200000400004081B200000400004029 +:1079700081B200000400004081B200000400004019 +:1079800081B200000400004081B200000400004009 +:1079900081B200000400004081B2000004000040F9 +:1079A00081B200000400004081B2000004000040E9 +:1079B00081B200000400004081B2000004000040D9 +:1079C00081B200000400004081B2000004000040C9 +:1079D00081B200000400004081B2000004000040B9 +:1079E00081B200000400004081B2000004000040A9 +:1079F00081B200000400004081B200000400004099 +:107A000081B200000400004081B200000400004088 +:107A100081B200000400004081B200000400004078 +:107A200081B200000400004081B200000400004068 +:107A300081B200000400004081B200000400004058 +:107A400081B200000400004081B200000400004048 +:107A500081B200000400004081B200000400004038 +:107A600081B200000400004081B200000400004028 +:107A700081B200000400004081B200000400004018 +:107A800081B200000400004081B200000400004008 +:107A900081B200000400004081B2000004000040F8 +:107AA00081B200000400004081B2000004000040E8 +:107AB00081B200000400004081B2000004000040D8 +:107AC00081B200000400004081B2000004000040C8 +:107AD00081B200000400004081B2000004000040B8 +:107AE00081B200000400004081B2000004000040A8 +:107AF00081B200000400004081B200000400004098 +:107B000081B200000400004081B200000400004087 +:107B100081B200000400004081B200000400004077 +:107B200081B200000400004081B200000400004067 +:107B300081B200000400004081B200000400004057 +:107B400081B200000400004081B200000400004047 +:107B500081B200000400004081B200000400004037 +:107B600081B200000400004081B200000400004027 +:107B700081B200000400004081B200000400004017 +:107B800081B200000400004081B200000400004007 +:107B900081B200000400004081B2000004000040F7 +:107BA00081B200000400004081B2000004000040E7 +:107BB00081B200000400004081B2000004000040D7 +:107BC00081B200000400004081B2000004000040C7 +:107BD00081B200000400004081B2000004000040B7 +:107BE00081B200000400004081B2000004000040A7 +:107BF00081B200000400004081B200000400004097 +:107C000081B200000400004081B200000400004086 +:107C100081B200000400004081B200000400004076 +:107C200081B200000400004081B200000400004066 +:107C300081B200000400004081B200000400004056 +:107C400081B200000400004081B200000400004046 +:107C500081B200000400004081B200000400004036 +:107C600081B200000400004081B200000400004026 +:107C700081B200000400004081B200000400004016 +:107C800081B200000400004081B200000400004006 +:107C900081B200000400004081B2000004000040F6 +:107CA00081B200000400004081B2000004000040E6 +:107CB00081B200000400004081B2000004000040D6 +:107CC00081B200000400004081B2000004000040C6 +:107CD00081B200000400004081B2000004000040B6 +:107CE00081B200000400004081B2000004000040A6 +:107CF00081B200000400004081B200000400004096 +:107D000081B200000400004081B200000400004085 +:107D100081B200000400004081B200000400004075 +:107D200081B200000400004081B200000400004065 +:107D300081B200000400004081B200000400004055 +:107D400081B200000400004081B200000400004045 +:107D500081B200000400004081B200000400004035 +:107D600081B200000400004081B200000400004025 +:107D700081B200000400004081B200000400004015 +:107D800081B200000400004081B200000400004005 +:107D900081B200000400004081B2000004000040F5 +:107DA00081B200000400004081B2000004000040E5 +:107DB00081B200000400004081B2000004000040D5 +:107DC00081B200000400004081B2000004000040C5 +:107DD00081B200000400004081B2000004000040B5 +:107DE00081B200000400004081B2000004000040A5 +:107DF00081B200000400004081B200000400004095 +:107E000081B200000400004081B200000400004084 +:107E100081B200000400004081B200000400004074 +:107E200081B200000400004081B200000400004064 +:107E300081B200000400004081B200000400004054 +:107E400081B200000400004081B200000400004044 +:107E500081B200000400004081B200000400004034 +:107E600081B200000400004081B200000400004024 +:107E700081B200000400004081B200000400004014 +:107E800081B200000400004081B200000400004004 +:107E900081B200000400004081B2000004000040F4 +:107EA00081B200000400004081B2000004000040E4 +:107EB00081B200000400004081B2000004000040D4 +:107EC00081B200000400004081B2000004000040C4 +:107ED00081B200000400004081B2000004000040B4 +:107EE00081B200000400004081B2000004000040A4 +:107EF00081B200000400004081B200000400004094 +:107F000081B200000400004081B200000400004083 +:107F100081B200000400004081B200000400004073 +:107F200081B200000400004081B200000400004063 +:107F300081B200000400004081B200000400004053 +:107F400081B200000400004081B200000400004043 +:107F500081B200000400004081B200000400004033 +:107F600081B200000400004081B200000400004023 +:107F700081B200000400004081B200000400004013 +:107F800081B200000400004081B200000400004003 +:107F900081B200000400004081B2000004000040F3 +:107FA00081B200000400004081B2000004000040E3 +:107FB00081B200000400004081B2000004000040D3 +:107FC00081B200000400004081B20000F70F00BC45 +:107FD00080B200000380004081B2000003800040B6 +:107FE00081B200000380004081B2000003800040A5 +:107FF00081B200000380004081B200000380004095 +:1080000081B200000380004081B200000380004084 +:1080100081B200003180004081B200003480004015 +:1080200081B200003580004081B2000004000040B1 +:1080300081B200001B80818080320000EC89A24068 +:10804000916F00000000004C90B301005C952EA2DF +:1080500080B00100FF000080F489010090952AC8DB +:10806000E5B10100000000A1F0B1010000000040F6 +:10807000F0B10100000000A4F0B10100000000D048 +:10808000F0B10100000000D1F0B10100000000D209 +:10809000F0B101000000004CF0B10100000000D47C +:1080A000F0B10100000000D3F0B10100000000EECB +:1080B000F0B101000000004EF0B1010000000040EE +:1080C00044B1010018801181983000000000514037 +:1080D00081B201001A8011829830000000005240E5 +:1080E00081B20100EC890048FD930000B603004016 +:1080F000A19901002380A242FD7F00002080008022 +:1081000080320000228011818230000022805140A4 +:1081100081B2000022801182823000002280524011 +:1081200081B200002C800048FD9300002780008071 +:10813000803200002680A253077C000000005153CB +:10814000079001002A800052079000002980A25267 +:10815000077C00000000525207900100000000530D +:108160000790010000000048FD9301000000004559 +:10817000F39301005C952EA252B30100FF00008032 +:10818000F48901000000004CE4B10100000000A9E6 +:1081900045B101003080004C80B200000000454035 +:1081A00081B201000000554081B201001B840540EE +:1081B00049B100001B84054049B1000000000540A2 +:1081C00049B10100E1800040813201000000004B14 +:1081D000DEB20100770000404B9901000000004032 +:1081E000FD93010000000048FD83010002000040F3 +:1081F0009B9B0100000000A59CB30100F699004084 +:108200008132010058952044E0B1010000C000A671 +:1082100036B10100D014004047990100050000402C +:10822000F599010000380040F59901000006004072 +:10823000F599010000000040F59901000518004083 +:10824000F599010002090040F59901000400004081 +:10825000F599010050030040813201007B0300408A +:1082600081320100E083004081320100108400402F +:108270008132010008840040813201006095204075 +:10828000E1B1010070952040E1B10100000000491A +:10829000DD9101000000004091B3010000000040AA +:1082A00085B301005C952040E1B101001A820040D5 +:1082B0008132010071830040813201000200009789 +:1082C00080980100000000402EB101000200004033 +:1082D0002EDD01009001004093980100290100402B +:1082E000813201005C810040AF3301007999004088 +:1082F000813201000000454081B20100000055407C +:1083000081B201004984004081B2000004000040B5 +:1083100081B200000400004081B20000040000406F +:1083200081B200000400004081B20000040000405F +:1083300081B200000400004081B20000040000404F +:1083400081B200000400004081B20000040000403F +:1083500081B200007701004181C00000718051406E +:1083600081B200007280524081B20000738055409B +:1083700081B200007480564081B2000055019181A5 +:10838000803000005A01454081B2000055019182C1 +:10839000803000005A01464081B200005A01004876 +:1083A000FD9300005A010048FD9300005A01004966 +:1083B000FD8300005A01004AFD83000000000040D8 +:1083C00049B10100AE0300CBA3C9010000000020A9 +:1083D00046B10100000000D2F1B10100000000D35D +:1083E000F1B1010000000042F0B1010000000045C1 +:1083F00061B101002000002062DD01000000A8D072 +:10840000E1B100007C80004081B20000000000A8C3 +:1084100098B00100048000408BB30000B10300401D +:10842000A19901008480A241976F000000000045DF +:10843000A1C101000000000080B001000000A20402 +:108440008094000080153F4297E301000000004047 +:1084500049B10100000060030294010000000040E7 +:1084600007B00100040000CB99CB0100000000CC54 +:10847000F38301008E80A241976F0000000000CBC3 +:10848000F3930100AE0300CBA3C90100000000205C +:1084900044B1010000000044F1B1010000000000FF +:1084A000F0B1010000000004F0B10100000000A1E3 +:1084B000E0B10100050000406199010020000020AA +:1084C00062DD01009580A84081320000C6020020D4 +:1084D000423101000000A241056C0100000080CB88 +:1084E000DB910100000019418BB3010060000040E6 +:1084F000619901009B80A8B18C33000060000040AE +:10850000619901009D80A8B194330000A38014C636 +:1085100081320000180000C683F401006A84224FF3 +:10852000830400007F80004081B20000FF0100C68C +:1085300081880100000000C697A301007F801F5CB6 +:10854000975300009E831DC68132000000002F4318 +:1085500081F00100A980004010C9000005810040A1 +:1085600081B200003681004081B20000DA8100CA89 +:1085700063B300002D81004081B200001481004DE2 +:1085800083B000001E81004E61B100000D810040EB +:1085900085B000001481004C83B00000F0800040E2 +:1085A00085B000009181004049B100003D8100404C +:1085B000C1B100008D81004081B200000D810040FA +:1085C00085B00000DD81004049B100006A8400CA26 +:1085D0009BB3000046810040C1B100004E810040C5 +:1085E000C1B1000055810040C1B10000568100407A +:1085F000C1B1000057810040C1B100005881004066 +:10860000C1B100005981004081B000005981004192 +:1086100081B00000CE81004081B20000DD8300BB4C +:10862000ABB30000DB8100CACFB30000D3800040B1 +:1086300049B10000DF80004081B20000DC810040D1 +:1086400081B200006A84004081B20000DA800040FC +:1086500081B200006A8400CA77B300001581004D22 +:1086600083B000001C81004E61B100000D8100BB91 +:1086700085B000001581004C83B000000D8100BB67 +:1086800085B00000F08000BB85B00000E2800040B3 +:1086900081B200006A8400CA4DB3000064820040C9 +:1086A00049B100008F82004049B10000C8142EBBC0 +:1086B00085B00100000000EE82B001000000004122 +:1086C000E0B10100FF7F00A2A08B01000000004488 +:1086D000A5B30100758000CAA733010002810040E4 +:1086E00081B200004E01004D933001004E01004E5A +:1086F000933001004E01004C93300100088400408B +:10870000813201006A84004081B20000549500402B +:10871000459901006A8400CAE5B10000000080406C +:1087200097B00100E88022428F6F0000EA8022416A +:108730008F6F0000EC801ECA81320000EE801FCADD +:1087400081320000000000CAC9B101006A84004201 +:108750008FB30000000000CACDB101006A8400415F +:108760008FB30000000000CACFB101006A8400404E +:108770008FB30000008100A6C6B101006A840040EA +:1087800081B20000008000A6C6B101006A840040EA +:108790008FB30000781800404999010010002F9C09 +:1087A00089B00100078100403933010018002F9B78 +:1087B00089B00100078100403733010000002F9A83 +:1087C00089B00100078100403533010008002F996E +:1087D00089B001000781004033330100008000AE02 +:1087E00047C9010080000040F1990100000000CA63 +:1087F000F1B1010000000042F0B10100401800405A +:10880000E19901000000004561B10100200000AEC7 +:1088100063DD01000281284081320000FF800040BA +:1088200081B2000002814240813200000000005C01 +:10883000699301006A841A449393000005814240C1 +:108840008132000004810058699300000000004458 +:10885000F0D101000000A44081B200000C81A240D0 +:10886000E16D00000000004445D10100000080409F +:10887000E1B1010000008041E1D101000D81375CD0 +:10888000613100000000004262B101001181284006 +:10889000813200000E81004081B20000000000CA59 +:1088A00063B101001181A840813200006A84174041 +:1088B00081B200001681004081B00000168100BB2B +:1088C00081B000000000004160B1010000000040E4 +:1088D00062B101001781A84081320000000000CA87 +:1088E00063B101006A842840813200001981004090 +:1088F00081B2000050950040479901001F8100BBE4 +:1089000087B0000050952F4087B0010021812240A0 +:10891000957F00006A8460409583000002002DF07E +:1089200084B0010022813640813200000000004204 +:1089300062B101002381A8408132000000000043A1 +:1089400062B101002581A84081320000000000CA08 +:1089500063B101002781A840813200000000164069 +:1089600081B201006A84224143510000000800CA1C +:1089700095CB01002281004185C000002F81A242D9 +:10898000676F00000000004167B301002F81424083 +:10899000813200000000004065B30100000000408B +:1089A0009383010000001ACA699701006A84264077 +:1089B0008132000034814240813200006A841A44CE +:1089C000939300006A842043956F00006A8480CAF4 +:1089D000673300006A842240656F00006A84006F7C +:1089E000DB910000C100004081320100358022404F +:1089F000803200006A84004081B200000000005F05 +:108A0000959301004281A244216F00000000005FA5 +:108A1000958301000000005E95930100000000575F +:108A200095930100000000CAC3B101004581225B9B +:108A3000957F00000000004BFD9301006A84004018 +:108A400081B2000049812240AF6F00001BF500CACF +:108A5000959B01004A81004081B200001BFD00CAC5 +:108A6000959B0100000000CA7FB30100260100CAE7 +:108A7000C53101000000005F958301006A8400CACF +:108A8000C5B10000DF6F00CA959B010000000055D2 +:108A900095930100000000CAC7B101006A84225FFB +:108AA000957F000026010040813201000000005F38 +:108AB000958301006A8400CAC7B100006A8400CAB5 +:108AC000C9B100006A8400CACBB100006A8400CA40 +:108AD000CDB100006A8400CACFB1000000002E4270 +:108AE00081E001009814004048C901006A8400CA6E +:108AF000E1B100000000004009B10100200000A623 +:108B000082B001005E81A25E0B7D0000008000410A +:108B1000089901006081A25E0B7D0000208000A604 +:108B200008B1010062819F85823000006181A24FFF +:108B30000B7D00000000004121B30100028000A66F +:108B400082B00100C9810040813201001000004163 +:108B500084E40100038000A682B00100C9810040C6 +:108B600081320100F0FF00418688010000000043CF +:108B7000849401000F0000A686B0010010C40043D9 +:108B8000869801007581A243846C000000000043B8 +:108B900021B30100200000A682B001001C000041AA +:108BA00082DC01007281A25E0B7D000004000041A6 +:108BB000089901007E81004081B20000410100A6B9 +:108BC00086B00100500C0043869801007A81A243D0 +:108BD000846C00000000004121B301007E81004050 +:108BE00081B20000410100A686B00100600C004384 +:108BF000869801007E81A243846C00000000004240 +:108C000021B30100200000A682B001007F81A25E96 +:108C10000B7D000040130041089901008781224329 +:108C2000216F0000200000A682B001001200004168 +:108C300082DC01008481A25E0B7D00000004004103 +:108C4000089901008C81004081B20000200000A63C +:108C500082B001001900004182DC01008981A25E1E +:108C60000B7D000000A00041089901008C810040AC +:108C700081B200000000804081B20100200000A607 +:108C800080B00100000000CA819401008F81A25EC3 +:108C90000B7D00006A84004008B10000C8142EBBA0 +:108CA00085B001009281A25E0B7D000000000040B3 +:108CB00087B00100A1812243216F0000B0812244CE +:108CC000216F0000118000A682B00100C981004020 +:108CD00081320100B881224A837C000000000040FC +:108CE000879001009C81224D837C000000000041A0 +:108CF000879001009E81224F837C0000000000438A +:108D000087900100A081224E837C00000000004279 +:108D100087900100B881004081B20000018000A668 +:108D200082B00100C981004081320100018000A6AB +:108D300082B00100C981004081320100B881224225 +:108D4000837C000000000040879001001C8000A68A +:108D500082B00100C981004081320100AB8122450F +:108D6000837C00000000004187900100AD81224417 +:108D7000837C00000000004387900100AF81224304 +:108D8000837C00000000004287900100B881004011 +:108D900081B20000018000A682B00100C9810040BC +:108DA00081320100018000A682B00100C98100402B +:108DB00081320100B8812242837C00000000004023 +:108DC00087900100000000438790010000000041EF +:108DD00087900100008000A682B00100C981004098 +:108DE00081320100BC81224B837C000000000040E6 +:108DF0008780010000000043E0B101000000004056 +:108E0000AFB30100C5812240877C0000C581A2412B +:108E1000877C000000000041AEB30100000000406C +:108E200081B30100C4812242877C0000C581000B10 +:108E30007DB300000000000F7DB30100FF7F00A2A2 +:108E4000A08B010000000044A5B30100758000CA9A +:108E5000A73301000281004081B2000020000041E0 +:108E600082DC0100CA81A25E0B7D0000000000418F +:108E700008B10100CC819F85823000000000804055 +:108E800081B20100D18114F781300000D181A24963 +:108E9000FD7F000000000048FD930100D48115F81B +:108EA00081140000D481A24AFD7F00000000004828 +:108EB000FD930100D681A2C881320000400000402D +:108EC00080DC01000010004080DC01000000004058 +:108ED000EFB30100D8814240F1330000048100402B +:108EE000689700006A8400BB6BB300006A8400BB13 +:108EF000B1B300006A84004081B20000CC142E405F +:108F000087B00100FF7F00A2A08B0100D8000043C2 +:108F1000B2330100000068DA89B001007C00004033 +:108F20008B9801000000005089F001000000004112 +:108F300089D0010003000044888C01000000004239 +:108F400087C0010000000041A5B30100D800004324 +:108F5000B2330100000000DAF1B10100000000426C +:108F600087C0010000000041A5C30100F881224430 +:108F700089500000F88122448B500000E781A25004 +:108F8000A56F000000000042A5E30100000000CA38 +:108F9000A7B30100758000BB85300100CC142ED230 +:108FA00095C30100AE0300CBA3C90100000000205F +:108FB00042B101000000005081B00100F581A241E2 +:108FC00081500000F481A2F280300000E78100406F +:108FD000A5B3000000000042A5E30100000000CAA4 +:108FE000A7B30100758000BB8530010002810040FD +:108FF00081B20000D9000041B3730100000080502D +:10900000B5F30100D8000041B3F30000000000D91F +:10901000B3FB0100003000A6B8B30100F20000402D +:1090200081320100250100422D01010000020040B3 +:1090300083980100EB0000408132010000000050E5 +:1090400081B001002601004081320100098210DA5E +:10905000B56B00000A8200412D8100000000004134 +:109060002D910100280100408132010025010040BE +:109070002D110100000000402D8101000682A24157 +:1090800081500000260100422D0101002501004011 +:1090900081320100260100422D110100250100400E +:1090A0002D110100158204402D0100002501004012 +:1090B000813201001182004081B20000280100408D +:1090C00081320100250100422D010100F200004023 +:1090D000B9330100000000422D81010000008041F1 +:1090E0002D8101000000804081B20100000300409A +:1090F000819801000000004018B10100800000408C +:109100008398010000190040459901000000424089 +:1091100081B20100000043FFF1B10100000000FF37 +:10912000F1B101000000004181C0010000000040D9 +:1091300018B101001F82A2418350000000160040B8 +:1091400045990100001900404399010000000047C3 +:1091500043C101000000004083B00100000000F3A3 +:1091600080B001000000005B81D0010000000041E0 +:1091700080D0010000000040F6B101000000005B5B +:1091800043C101000000004183C001002982A254B4 +:10919000836C000000000040F7B1010000000041B6 +:1091A00083C001003082A206836C00000000804072 +:1091B00081B201000000800791B00100E180004011 +:1091C000813201003982A240976C000028000040E3 +:1091D000B39B01003A82004081B2000028000040A9 +:1091E000B39B0100FC81004081320100000000DAE5 +:1091F000F5B10100FC810042B3430100000000DA38 +:10920000F5B10100FC810042B3430100000000DA27 +:10921000F5B101004E000040B39B0100FC8100400D +:1092200081320100080000DAF7F50100500000402B +:1092300091980100000000478FB00100FC810048B8 +:10924000B2330100000000DAF7B10100080000DAD3 +:10925000F7F501000000004291C001004582A241E3 +:109260008F5000000000004145D10100080000407F +:10927000B39B0100FC81004081320100000000DA54 +:10928000FDB101000A000040B39B0100FC810040D9 +:1092900081320100000000DAFDB101001800004039 +:1092A000B39B0100FC81004081320100000000DA24 +:1092B000FDB1010016000040B39B0100FC8100409D +:1092C00081320100000000DAFDB10100348200406B +:1092D000813201001E000048B2CB0100FC81004039 +:1092E00081320100000000DA91C001000000004856 +:1092F000B2CB0100FC8100408132010000006EDA37 +:109300008FB0010002000048B2CB0100FC81004098 +:1093100081320100000000DAFDB1010004000048C4 +:10932000B2CB0100FC81004081320100000080DAF4 +:10933000FDB101006F822250FD7F00006F82224547 +:10934000FD7F000040160040459901003582004035 +:109350004931010008000048B2CB0100FE81004005 +:10936000813201006D82A2408F6C00007282222047 +:10937000B56F00006F82004081B20000DB820040C8 +:109380008132010072822240976C00006F8242405D +:10939000813200000000004F6993010004810058F1 +:1093A000699300005416004047990100000000FE38 +:1093B000F4B101000000004081B20100000000FE95 +:1093C000F4B101000000004081B20100000000FE85 +:1093D000F4B101000000004081B20100000000FE75 +:1093E000F4B101000000004081B20100000000FE65 +:1093F000F4B101000000004081B20100000000FE55 +:10940000F4B101000000004081B20100000000FE44 +:10941000F4B1010046000040B39B0100FC81004014 +:1094200081320100080000DAF7F501004800004031 +:10943000959801000000004497B00100FC81004AAB +:10944000B2330100000000DAF7B10100080000DAD1 +:10945000F7F501000000004295C001008582A2419D +:10946000975000002A000040A59B010040160040D4 +:10947000A19B0100000000CAA7B30100758000BBDA +:10948000853001000281004081B20000A7822245A0 +:10949000FD7F0000E0150040479901001A0000A27E +:1094A00080DC010000000050F1B10100F015004027 +:1094B000F1990100000000CAF1B10100070000406D +:1094C00061990100A000004062DD01009682A8BB06 +:1094D000E13100000000005083B001009982A241F8 +:1094E000835000009882A2F282300000E1800040A8 +:1094F000813201009F82A240976C0000280000404A +:10950000B39B0100A082004081B20000280000400F +:10951000B39B0100F015004043990100FC8100401D +:1095200081320100A782A2FAB46F0000FC810042E0 +:10953000B3430100A782A2FAB46F0000FC8100428D +:10954000B3430100AA8222FAB46F0000A78242400E +:10955000813200000000004E699301000481005830 +:109560006993000040160040459901003582004093 +:1095700049310100F6150040439901005C16004096 +:109580004599010000006EFA8EB001000000004015 +:1095900081B20100000000FEF4B1010000000040B3 +:1095A00081B20100000000FEF4B1010000000040A3 +:1095B00081B20100000000F0B4B30100B882A24003 +:1095C0008F6C0000FC152020E1B10100BD8200403D +:1095D00081B20000DB82004081320100BD82224066 +:1095E000976C0000BA824240813200000000004FB8 +:1095F000699301000481005869930000348200409F +:10960000813201001E000048B2CB0100FC81004005 +:1096100081320100C2822250B56F0000000000506C +:1096200091C0010000000048B2CB0100F6150040D7 +:1096300043990100FF8100F2B433010002000048A9 +:10964000B2CB0100F815004043990100FF8100F200 +:10965000B433010004000048B2CB0100FA15004009 +:1096600043990100FF8100F2B43301000800004873 +:10967000B2CB0100FC15004043990100000000F04E +:1096800094B00100FFFF004AB48B0100FF8100404D +:10969000813201000A000048B2CB01001000004AEC +:1096A000B4F70100FF8100408132010034820040A4 +:1096B000813201001E000048B2CB0100FC81004055 +:1096C00081320100D8822250B56F0000D98200504B +:1096D000B5B3000000000040B5B30100FF810040B9 +:1096E000813201000281004081B20000001600407A +:1096F0004799010030310040F599010032330040B4 +:10970000F599010034350040F599010036370040E5 +:10971000F599010038390040F599010041420040B7 +:10972000F599010043440040F59901004546004089 +:10973000F599010047480040F5990100494A004069 +:10974000F59901002C0000408398010000000040C2 +:10975000F7B10100E782A2418350000080162E0677 +:1097600083B00100360000FBF6A90100EA82A241A5 +:10977000835000002200004083980100000000FB9D +:10978000F6B10100ED82A24183500000620000406A +:1097900095980100008300408132010000162D06DB +:1097A00083B0010080160040459901005C0000FB79 +:1097B000F6A90100F382A24183500000000000706E +:1097C000F9B1010000000071F9B101000000007260 +:1097D000F9B1010000000073F9B10100000000744C +:1097E000F9B1010054000040959801000083004049 +:1097F000813201000000007095B00100FF822270EC +:10980000B56F00000000804197B00100000080406B +:1098100097B00100456700A6E0B201000123007087 +:10982000E19A0100CDEF00A6E2B2010089AB007120 +:10983000E39A0100BA9800A6E4B20100FEDC0072CF +:10984000E59A0100321000A6E6B2010076540073DA +:10985000E79A0100D2C300A6E8B20100F0E100746B +:10986000E99A01008016004A44C90100000000077F +:1098700081B001000000004A80D0010000000040DB +:10988000F7B101000D83A241815000008016004A0B +:1098900044C90100FC162A47E7B501000300004A4D +:1098A000E8E50100000000408DB0010050030040D9 +:1098B000A399010080163D468DE001000000005094 +:1098C00089B00100000000FC40B001000000004130 +:1098D000A3C101001683A24189500000000000705E +:1098E000EBB2010000000071EDB201000000007257 +:1098F000EFB2010000000073F1B20100000000743B +:10990000F3B201000000004083B001000F000041ED +:109910008088010050030040A2C901003383A05099 +:10992000836C00000D00004098C801000000004F4B +:10993000998401005003004CA2C9010000000020DE +:1099400086B001000800004098C801000000004FE8 +:10995000998401005003004CA2C9010000000020BE +:1099600086A401000200004098C801000000004FDA +:10997000998401005003004CA2C90100000000209E +:1099800086A4010050030040A2C90100000000436A +:1099900040A401000100002088E401000000005FF5 +:1099A00041F00100000000444094010005000075F2 +:1099B00089E401001B00007585F4010000000044EB +:1099C000849401003D83A353836C00000000007663 +:1099D00089B0010000000077898401000000007652 +:1099E0008BB00100000000208BA401000000007873 +:1099F0008B8401004C8300458894000027000041BF +:109A000080CE01004283AA4081320000000000762F +:109A100089B001000000007789A401004C83007820 +:109A200089A400003B00004180CE01003F83AA4092 +:109A3000813200000000007689B00100000000774C +:109A400089840100000000768BB0010000000078DE +:109A50008B8401000000004588940100000000771D +:109A60008BB00100000000788B8401004C8300451E +:109A7000889400000000004484C0010000000079C8 +:109A800085C001000000002084C001005383A3535F +:109A9000836C0000825A00A684C0010099790042BC +:109AA00084C801006083004081B2000027000041AB +:109AB00080CE01005883AA4081320000D96E00A6F2 +:109AC00084C00100A1EB004284C801006083004013 +:109AD00081B200003B00004180CE01005D83AA40BE +:109AE000813200001B8F00A684C00100DCBC004254 +:109AF00084C801006083004081B2000062CA00A6F1 +:109B000084C00100D6C1004284C8010060830040C7 +:109B100081B2000000000078F3B20100000000777D +:109B2000F1B201001E00007689E401000200007617 +:109B3000EFF6010000000044EE9601000000007501 +:109B4000EDB2010000000042EAB201000000004155 +:109B500083C001004F00004180CE01001F832A40D6 +:109B60008132000000000075E1C2010000000076B3 +:109B7000E3C2010000000077E5C2010000000078A8 +:109B8000E7C2010000000079E9C2010013838141AE +:109B90008D4000000000804081B201009D83A24BF7 +:109BA000B76F00009D83A2412F7D00000000005090 +:109BB000FD930100401600404599010035820040A8 +:109BC000493101009C8322408F6C0000080000484E +:109BD000B2CB0100FE81004081320100DB820040F7 +:109BE000813201009C83A240976C00005E16004009 +:109BF000439901007C1620F6E0B10100000000400E +:109C000031B301008083224F8F7C0000000000519F +:109C1000FD930100828322408F7C000086830054E4 +:109C2000FD930000848322428F7C000000000052DC +:109C3000FD930100868322418F7C000000000053C9 +:109C4000FD9301009A832251FD7F00003482004081 +:109C5000813201000C000048B2CB0100FC810040C1 +:109C6000813201009583A240B56F00001E000048BC +:109C7000B2CB0100FC81004896300100000000DA00 +:109C800097C001000400004BB2CB0100FC810040F2 +:109C9000813201000E000048B2CB0100FF8100407C +:109CA000813201000C000048B2CB010000000030FE +:109CB000B5B30100FF810040813201000E00004871 +:109CC000B2CB0100FC810040813201009983224027 +:109CD000B56F00009D830054FD930000000000510B +:109CE000FD8301001C0000FE7FD901009D83A6407A +:109CF0008132000000000055FD930100000080400B +:109D000081B20100B6030040A199010000002F417B +:109D100099B30100A8832244816C0000B0832248DB +:109D2000816C0000AA83224C816C0000B483225015 +:109D3000816C0000B5832254816C0000B7832258E7 +:109D4000816C0000BC83225C816C000055010040E6 +:109D500081B20000000000BC09B001006A8400CAA2 +:109D600001B000000000004003B00100000000410D +:109D7000F3830100AE83A242056C000000000041A5 +:109D800005B001006A8422CA071400006A840045F5 +:109D9000F39300006A842043956F00006A8480CAB0 +:109DA000053000006A842201803000006A8400CB04 +:109DB000DB9100005C0100BCABB30000000000BC04 +:109DC000B1B301006A8400CACFB30000FF0000CA2B +:109DD000818801006A84A240747D000060002040F8 +:109DE00060990100B983A8B182300000B8830040B7 +:109DF00081B200006A8400CA79B300000000004EFE +:109E000081B0010000000043CB8301000000454009 +:109E100081B20100BF83A241815000000000454093 +:109E200081B201000000454081B20100CA839182E5 +:109E3000823000000000008A80B00100B69F004020 +:109E400080CE0100C883A64081320000CA835640FC +:109E500081B20000B6030040A19901000000005348 +:109E600007900100B6030040A199010000000052D4 +:109E700007900100F39F00418BB300000000004EEB +:109E800081B0010000000042CD8301000000464087 +:109E900081B20100CF83A241815000000000464002 +:109EA00081B201000000464081B20100DA83918155 +:109EB000823000000000008980B00100B69F0040A1 +:109EC00080CE0100D883A64081320000DA8355405D +:109ED00081B20000B6030040A199010000000052C9 +:109EE00007900100B6030040A19901000000005353 +:109EF00007900100F39F00418BB30000B1030040C5 +:109F0000A1990100C4142F4099B301005C010040E5 +:109F100049B1000058152D408DB00100D0142DF02E +:109F200088B00100000000408FB00100010000A6D1 +:109F300090B0010000F80048909801000000004532 +:109F400093B00100000000FA8AB001006A030040EB +:109F500081320100020000A680B00100EC832240A3 +:109F6000826C0000F0830040813201004703004012 +:109F700081320100000000418DC00100F583225FA5 +:109F80008D6C0000E783A24193500000E583004000 +:109F900081B20000FF070047848801000000A6404E +:109FA00081B20000F59F00478030010000020047A9 +:109FB0008EC80100F083004081B200000000004420 +:109FC00050B30100FB832018896C0000040000A638 +:109FD00084B00100200000A686B0010000100040FF +:109FE000559B0100FE83004081B20000040000A6E2 +:109FF00084B00100200000A686B0010000100040DF +:10A00000559B01000000004250D30100000000A851 +:10A010004FB30100000000434ED301005E03004037 +:10A02000813201006C03004280300100F083004067 +:10A0300081320100078422A78F6C00004903004091 +:10A04000813201000484004081B2000000008040A1 +:10A0500081B20100A0942E4397B00100000000409F +:10A06000F1B101000984A2419750000050952040B1 +:10A07000E1B10100AC942E4397B001000000004014 +:10A08000F1B101000D84A241975000000000804012 +:10A0900081B20100AE030040A3990100000000401E +:10A0A00081B0010060150040859801000800004063 +:10A0B00040E40100000000594194010000000050FC +:10A0C00041E0010000000042409401000000004116 +:10A0D00081C001000000A341816C0100000000412B +:10A0E000A3C101001384005085C000004984A2412F +:10A0F000017D000021842258737D0000780000401B +:10A10000619901001C84A8B19C30000030003845E2 +:10A110009DE001000100000E10C90000218433C43D +:10A12000813000002484A1AD9D2000001B841340D9 +:10A1300081B200000000134E5A8301003000384500 +:10A140009DE001002C8422AB800400002A84A24000 +:10A15000017D00002C84225F577D0000278A00408B +:10A1600081B200002C84225E577D00008A8A004064 +:10A1700081B2000031842254737D000074000040DD +:10A18000619901002C84A8B1003000000086A25F14 +:10A19000017C00006289004081B200003384A25F2C +:10A1A000592700003584A25C737D00003C84A25EC8 +:10A1B000737D00004684225C737D00004784374035 +:10A1C000813200007C000040619901003684A8B112 +:10A1D000363000007C000040619901003884A8B14D +:10A1E000003000001F000000028801002F86174089 +:10A1F00081B2000047843440813200007E0000407C +:10A20000619901003D84A8B11230000044845221BC +:10A2100013040000000014412FC30100FF3F000998 +:10A22000008C01000000004301F00100878400342D +:10A2300013840000FF3F1409008C0100E7840043F1 +:10A2400001F000000000004081B20100478433406B +:10A25000813200001B84134E5A930000EC89A248FF +:10A26000FD7F00004E842259737D0000790000407C +:10A27000619901004A8428B17E3100004B8400407E +:10A2800081B20000528421AC9C20000000000041FB +:10A290001FC301000400A05F9D6C00000000004E81 +:10A2A000589101005684225A737D00007A000040C4 +:10A2B000619901005384A8B17E310000010000CFF4 +:10A2C00011C900005C84A240937F00005C8422449A +:10A2D000937F0000588442A5803000005B84A24038 +:10A2E000937F000071841A409393000000001A408D +:10A2F00081B201009A80A240737D0000A1892244AE +:10A30000216F000098892240657D0000A689A25B2C +:10A31000737D00000400A249337D0000668422485A +:10A32000337D0000FF01009980D80100000000503B +:10A3300081E00100A8982F4033B1010000000040E7 +:10A34000E0C1010069842240AF6F000069842240AF +:10A35000816F0000F5891FA5826F000049840040CD +:10A3600081B200001B8400408BB300000000005845 +:10A3700061B101000000004E62B101001B84284061 +:10A38000813200006C84004081B200006F84334051 +:10A390001F3000001B84134E5A9300007384A0CE1C +:10A3A000815000008584A0CD816C0000000000A5D4 +:10A3B0009CB30100000000B181B00100858422B58A +:10A3C0008114000080152F4049B10100778442407C +:10A3D00081320000000060B465970100D0152E4066 +:10A3E00069B3010000001A44938301001A0000A21F +:10A3F00080DC010000000044F1B10100000000B168 +:10A40000F1B10100000000B5F1B10100050000400C +:10A41000619901000000004062B101008084A8A1A0 +:10A42000E03100005C8400889EB300005C84A2419F +:10A43000676F00005C84006FDB9100008584424000 +:10A44000813200005C841A40938300000099000967 +:10A4500046C901003F0000F30C8801009084A64229 +:10A460001360000055970095033001008B84454030 +:10A470008132000075000040619901008C84A8B110 +:10A480000C3000005C971D1094300100918400583E +:10A490001F9000004E970095033001001B84008838 +:10A4A0001CB0000000002D0348B1010004002DF095 +:10A4B0002EB00100EE070040979801009884234BCE +:10A4C000E46D00009884224BFD7F000000000040F6 +:10A4D0001F90010022002F4081B201009B8483174E +:10A4E0008032000026000040479901009D848517B6 +:10A4F000803200000000004847C10100A3842255BB +:10A500002F7C00000000004243D101000F0000FA40 +:10A51000968801000000004297E001000000004220 +:10A5200097D00100A484004B44C10000120000A297 +:10A5300044C90100280000F602CC01000A0000A175 +:10A5400042C90100000000F816B00100000028F028 +:10A5500010B00100000000F01AB00100000000A2DD +:10A560002AB00100C0283C460DE0010000002D4447 +:10A5700095B00100B084A2F80E300000C0842241E2 +:10A580009550000000002D5049C10100AC840040EE +:10A5900081B20000AD84A2F8166C0000AD84A2F870 +:10A5A000106C0000AD84A2F01A6C0000BE8422582A +:10A5B0001F7C000000993F4213F00100B584474022 +:10A5C00081320000B984A2F3740600000000000686 +:10A5D000E6950100BE841F4081B200000000000625 +:10A5E00096B001003F001FF30C88010000000055E9 +:10A5F00061B101000000004B62B10100BC84A840C1 +:10A6000081320000BE84474081320000C6841F4171 +:10A610002DC30000C48422581F7C00000000005598 +:10A6200061B101000000000662B10100C284A840CF +:10A6300081320000C484474081320000EE841F4113 +:10A640002DC30000030000071AF401002196000743 +:10A6500016300100D5842241816C0000CC84224256 +:10A66000816C00001B8400881CB00000D484225F31 +:10A670000F7C00001597005F01100100D28422407A +:10A68000956C00000480000342C90100000000F244 +:10A6900002B001008A960052953001009196004B5D +:10A6A00002B000006797000996300100058A00405B +:10A6B0000FB00000DD84A25A1F7C00009B95004073 +:10A6C00081320100DD842220856C0000DA849C0F39 +:10A6D000803200001B8400881CB000007C96005C67 +:10A6E0001F0001009B980042613101001B8400881B +:10A6F0001CB00000E69900079630010000002D050F +:10A7000048B10100E08482F0183000006C8B0045F5 +:10A710008FB00000282000A696B00100E484221724 +:10A72000960400000B98004B953001006C8B004B99 +:10A730008FB000002197000348310100FC940040D5 +:10A74000813001006C8B004081B2000000002E10AF +:10A7500048B101000000685003B001000000000390 +:10A76000F0B101000000004261B1010000000010E2 +:10A7700062B10100EB84A800E03100001B84008876 +:10A780001CB0000000002D0348B101000000004093 +:10A790000FB00100000000F82EB00100000000F230 +:10A7A00002B001000000004017B00100004100A607 +:10A7B00096B00100EE072E47979001000185221701 +:10A7C00096040000FF84224BFD7F0000FF8423A23B +:10A7D000026C00008A96005295300100040022416C +:10A7E000975000000C002D0012B00100000000F096 +:10A7F00000B001000000005C018001009196004B58 +:10A8000002B000000000000900B00100000000508C +:10A8100003B001001E85005C1790000013852243E1 +:10A820002F7C0000000000451F9001000C85225F76 +:10A830002F7C000000002E1048B1010000000058DD +:10A84000F1B1010010000003F0C901001000000088 +:10A85000E0C9010008854542613100000000001098 +:10A8600062B101000985A840813200001B841D8867 +:10A870001CB0000020002D0348B10100FF0F00F6BE +:10A88000808801001085A2A6816C0000138500F26B +:10A890003AB00000FD85A24BFD7F0000E29500402C +:10A8A000813201001B8A004081B200001E85224ACD +:10A8B0002F7C00001E8522482F7C00000A002D03FB +:10A8C00048B101003F0000F2868801001F000043EC +:10A8D000848801000500004380F4010098943D4203 +:10A8E00081E001001E85A242E07D0000FD85A24BB3 +:10A8F000FD7F0000E2950040813201001B8A00408C +:10A9000081B200001E85474081320000000000A394 +:10A9100009B0010000001F4147C30100248522A1A6 +:10A92000096C00006B8400881CB0000021850003C6 +:10A9300048B100005E85A392036C00000A990040B4 +:10A94000953001000000004143C3010000000016E3 +:10A9500080B201001B8A2708803200002B85225C10 +:10A96000177C00002C8500002AB0000012000000B7 +:10A970002AC801000200000880C801003085A243F7 +:10A980002F7C00000E980040813201004C85005E53 +:10A9900017900000040000018CCC01000E98004CC0 +:10A9A0000330010000002E4602B00100100000102C +:10A9B00048C901000C000001F0CD01002C0000404E +:10A9C000F0C9010000000016F0B1010010000015F0 +:10A9D000E0C901000000004361B10100A00000A433 +:10A9E00062DD01003985A854171000004C85005E17 +:10A9F00017900000120000002AC801004B85224376 +:10AA00002F7C0000040000018CCC01000000004CF1 +:10AA100003B001002F9800436131010000002E4671 +:10AA200002B001001000001048C901000C00000134 +:10AA3000F0CD01000C000009F0C901000000001871 +:10AA4000F0B1010010000015E0C901000000004352 +:10AA500061B10100A00000A462DD01004C85285412 +:10AA6000171000004885004081B200002F98004375 +:10AA7000613101004E8522502F7C000000000056FD +:10AA80001790010007000017988801005185A24126 +:10AA9000996C000000000055179001000000004371 +:10AAA00061B101004000001062DD01005285A84044 +:10AAB000813200001B8400881CB000001698004002 +:10AAC00081320100598522432F7C0000168000034B +:10AAD00044C901000000001DE4B10100B797005E09 +:10AAE000051001005C85A25F2F7C0000CE94000160 +:10AAF00038430100E2950040813201001B8A00408A +:10AB000081B200006085A24BFD7F0000FA85004104 +:10AB100043C300000000004027B0010000000040D7 +:10AB20002DB001000000004011B001006385350127 +:10AB3000863000006D000040619901006B8528B1EE +:10AB4000303000006485224D757D00000000001645 +:10AB500080B20100EA85A740116C000000000041AE +:10AB600043C30100F985004081B200006D00004040 +:10AB7000619901006B85A8B1123000000000001639 +:10AB800080B201007585A740116C000000000041F3 +:10AB900043C301000000000910B0010000000018CC +:10ABA0002CB00100DE07004380CE01006485AA407E +:10ABB000813200007A85004081B2000040003E43AF +:10ABC00027E0010000000009F0B1010000000018BA +:10ABD000E0B101000000004127C001006485A30B23 +:10ABE00087500000000015401BB00100000000402D +:10ABF00023B00100120000002AC8010040002D40CF +:10AC000039B001008285A240276C000022000008B4 +:10AC100012C80100DE07004025980100858500402C +:10AC200081B20000000000F812B00100000000F046 +:10AC300030B001000000000B25B001000000001042 +:10AC400032B0010014002001E0B10100EE07004025 +:10AC5000379801008A852301366C0000000000014E +:10AC600036B001009585824123400000208000100D +:10AC700042C9010091852240E36D000000000043BD +:10AC800061B101004000001062DD01008E85A84026 +:10AC9000813200001B8400881CB000000196004334 +:10ACA000233001000000001032B00100000000411C +:10ACB00023B001000000000348B10100008000192A +:10ACC00044C90100A48522451F7C00000000004CFF +:10ACD000F1B1010000000009F0B10100000000180E +:10ACE000F0B101000000004361B101002000001933 +:10ACF00062DD01009B85A815E031000000000050D6 +:10AD000003D001000000005033C001000000004CDF +:10AD100025D001000C002D4C13C001000000005094 +:10AD200037D00100000000502BC001008A8500458B +:10AD30001F800000A685A312366C0000A785681B43 +:10AD400028B000000000681228B0010000000009CF +:10AD5000F0B1010000000018F0B101000000004354 +:10AD600061B101002000001962DD0100AA85A8156B +:10AD7000E0310000D0852214025000000000005095 +:10AD800033C001000000001424D001000C002D1479 +:10AD900012C00100C985A21436500000BA85225C99 +:10ADA0001F7C00003080001042C90100B88522409D +:10ADB000E36D00000000004261B10100400000109E +:10ADC00062DD0100B585A840813200001B84008847 +:10ADD0001CB000000000000348B101000C002D5C15 +:10ADE0001F800100100000F02AC801000000005C74 +:10ADF0002B800100F007004037980100BF85230138 +:10AE0000366C00000000000136B00100CA85221B2C +:10AE1000026C00003000001048C9010000002E5CE8 +:10AE20001F90010000000050F1B10100000000037C +:10AE3000F0B10100FF070015E08D010000000042A5 +:10AE400061B10100A00000A462DD0100C685A84038 +:10AE500081320000CA85000348B1000000000014E0 +:10AE60002AC001008A85A240256C00000000004134 +:10AE700039C0010040003D4339E001000000000BF3 +:10AE800025B00100000000F812B001008A8500F032 +:10AE900030B000000080001942C90100D685224070 +:10AEA000E36D00000000004361B1010040000019A3 +:10AEB00062DD0100D385A840813200001B84008838 +:10AEC0001CB00000019600402B30010018002E033A +:10AED00048B10100DA8522502F7C000000000056A6 +:10AEE000179001000700001798880100DD85A24136 +:10AEF000996C00000000005517900100E085224386 +:10AF00002F7C000000000054179001001600201D47 +:10AF1000E4B10100E285A340276C0000E485605F96 +:10AF2000179000000084000B16DC01000000601385 +:10AF300016940100B797005E051001001B8AA25FFE +:10AF40002F7C00001480000342C90100000000F2C1 +:10AF500002B00100CE940001384301001B8A00407A +:10AF600081B200000000004083B001000000004DED +:10AF700061B101000000001662B10100EC85A8403B +:10AF8000813200000000000862B10100EE85A84097 +:10AF900081320000F9852213826C000040003D439D +:10AFA00083E00100000000F810B00100000000F094 +:10AFB0002CB001000000001662B10100F485A84029 +:10AFC000813200000000000862B10100F685A8404F +:10AFD00081320000F085004183C000000000154070 +:10AFE00081B20100008200A604B00100A0980040D8 +:10AFF00047990100E9890041893001008A96005291 +:10B00000953001009196004B02B000001B8A004071 +:10B010000FB000000000005F018001001000000080 +:10B020000EF401003F00000000880100030000074B +:10B030001AF4010021960007163001000B86224108 +:10B04000816C000009862242816C00001B8400880C +:10B050001CB000000A86225F0F7C0000058A0040B9 +:10B060000FB000001386A25A1F7C00009B95004081 +:10B070008132010013862220856C000010869C0F0F +:10B08000803200001B8400881CB000007C96005CAD +:10B090001F0001009B980042613101001B84008861 +:10B0A0001CB00000E69900079630010000002D0555 +:10B0B00048B10100000000F018B001001986223AE2 +:10B0C000016C0000000000008EB001006C8B00409D +:10B0D00001B000000000004081B201002E002D05EB +:10B0E00048B101001D86A240E76D00000A00004043 +:10B0F0008F9801006C8B004001B000006695004005 +:10B10000813201004E970095033001001B840088B6 +:10B110001CB0000000002D0348B1010022002DF0FA +:10B120002EB00100282000A696B001002686221726 +:10B13000960400000B98004B953001006C8B004C7E +:10B140008FB0000028868317803200000000004482 +:10B1500043C101002A8685178032000000000048A4 +:10B1600043C10100280000F602CC0100120000A13A +:10B170002AC801002197004081320100FC9400415F +:10B18000813001006C8B004081B2000000000001A2 +:10B1900000D0010000002E1048B10100280000403E +:10B1A000F199010000000003F0B10100000000006F +:10B1B000F0B1010034864647613100000000001004 +:10B1C00062B101003586A81BE03100001B841E8897 +:10B1D0001CB000000000004503E0010008002D0342 +:10B1E00048B101005A8601FB08300000AD8687FB9C +:10B1F00022300000000000FA0EB00100000000F84C +:10B2000014B00100030000071AF4010021960007A2 +:10B210001630010050862241816C00004486224293 +:10B22000816C00001B8400881CB000004F86225FE8 +:10B230000F7C0000380000047E8901004886A65F6C +:10B240000F00000074950040053001004D8600405D +:10B2500081B20000130000408798010000002D0318 +:10B2600048B101000C002DF082B00100000000F098 +:10B2700084B0010000970040053001000000005C30 +:10B280001F900100058A00400FB000005886A25AA6 +:10B290001F7C00009B9500408132010058862220CF +:10B2A000856C000055869C0F803200001B8400884E +:10B2B0001CB000007C96005C1F0001009B980042BF +:10B2C000613101001B8400881CB00000E699000772 +:10B2D0009630010000002D0548B10100000000F08B +:10B2E00018B001005C862104802000005D860040CB +:10B2F00010C90000AE8A004B81B000007C8600437C +:10B3000081B00000808600FB22B00000AE8A0041C0 +:10B3100081B000006C8B004E8FB000007886005A20 +:10B320008FB00000658600478FB00000AE8A0053E2 +:10B3300081B00000AE8A005681B0000032002D05B9 +:10B3400048B101006C8BA00AE46D00006B86A2413D +:10B35000197C00006A86220A803200006C8B005340 +:10B360008FB000006C8B00548FB000007486220AEE +:10B37000803200006E86A20AE46D00006C8B005DD6 +:10B380008FB00000000000F280B001000000000A51 +:10B3900080D001007286A091816C00006C8B005EF1 +:10B3A0008FB00000250000408F9801006C8B00409A +:10B3B00081B2000076862091E56D00006C8B005410 +:10B3C0008FB00000210000408F9801006C8B00407E +:10B3D00081B2000032002D0548B101006C8BA00A3B +:10B3E000E46D0000240000408F9801006C8B004049 +:10B3F00081B2000037002D0548B10100040000F3C0 +:10B4000082F40100AE8AA042836C0000AE8A005430 +:10B4100081B00000000000F20EB001000300000740 +:10B420001AF4010000B5000D42C901000700000731 +:10B43000168801008986220BE67D00000A00004084 +:10B4400087980100559900408132010000000040BA +:10B450000FB00100058A005C1F9000009B862250FF +:10B46000FD7F00009686A254FD7F00008E86225547 +:10B47000FD7F000082000040879801008686004022 +:10B4800081B2000086862253FD7F000014800003F5 +:10B4900042C90100000000F096B001001000004B0E +:10B4A00080F401000CBC004087980100968622437E +:10B4B000806C0000FFFF004B808801008686A2435D +:10B4C000806C00007C9600404799010097864340BD +:10B4D000813200009A86A0F0306F00008C861B40FD +:10B4E00081B2000000001B4131C30100A59500405E +:10B4F000253001009F869C0F803200001B8400884D +:10B500001CB000007C96005C1F000100148000034A +:10B5100042C90100000000F096B0010000002F05B4 +:10B5200048B101001000000718E401000008000CF9 +:10B53000E0990100E69900079630010000B5000D82 +:10B5400046C90100A6863040813200000000000B91 +:10B55000E6910100000200A146C901000000000BB5 +:10B56000E691010004002E0548B1010000001040E2 +:10B57000E1B10100AE8A004081B00000000000FB94 +:10B5800028B00100000000FB86B00100000000F8B8 +:10B5900014B00100B7862246237C0000B386224007 +:10B5A000877C0000000000481F900100B586224102 +:10B5B000877C0000000000471F900100B7862242F0 +:10B5C000877C0000000000451F900100B786471BE4 +:10B5D0002C300000000000A013B0010000001F414B +:10B5E00041C30100E6862392156C0000E686A24561 +:10B5F0001F7C0000EA86224BFD7F0000170000D070 +:10B60000A2C901000000004027B001000200000AAA +:10B6100024C80100DD9500400F300100E4862208B7 +:10B620004030000000000041A3C10100F0070012FB +:10B6300024CC0100C086AA4127400000010000136D +:10B6400080CC0100E086264023300000000000404E +:10B6500083B001006000000384C8010010000010E6 +:10B6600048CD0100170000D0A2C90100CD86A2403C +:10B67000836C0000D986004183B000000080004246 +:10B6800044990100000068213896010000002E5006 +:10B6900049C10100D286A244236C0000300000039F +:10B6A00048C9010000000044F1B101000C00002075 +:10B6B000F0C901000000004461B10100A00000A435 +:10B6C00062DD0100D586A842E031000000000044A0 +:10B6D00085C001000000004123C0010000000041BE +:10B6E000A3C10100CB86A24181500000E086224028 +:10B6F000236C00000000004461B101004000001014 +:10B7000062DD0100DD86A840813200001B840088D4 +:10B710001CB000000000000348B10100EE0700402B +:10B7200025980100170000D02AC80100F3860017F1 +:10B7300010B00000C097004081320100EA8600404E +:10B7400081B20000DD95009225300100000000402C +:10B7500031B00100EA8622082E300000F386004155 +:10B7600027B00000808000A604B001000600004061 +:10B77000879801005599000A8C30010000000040B4 +:10B780000FB001000000005C1F900100F286229FB4 +:10B79000136C0000020000881CCC01006B84004088 +:10B7A00081B20000058A00413FC300000000004054 +:10B7B0000FB001002800000180CE010007872A4059 +:10B7C000813000000080001044C9010040000040AA +:10B7D00081980100FC86A2481F7C0000FC86A247DD +:10B7E0001F7C0000FC86A307036C00008000004063 +:10B7F00081980100FF86A340026C00002800000130 +:10B80000F0CD0100018700400FB00000280000408B +:10B81000F0CD0100040000400ECC01002800000320 +:10B82000F0C9010028000000F0C901000000001666 +:10B83000E0B101000000004761B1010020000010EC +:10B8400062DD01000587A85C1F10000000000040B9 +:10B8500043990100000000F008B00100A0012D4054 +:10B8600000C00100ED88220F4205000018879C0FE0 +:10B87000803200000000005C1F800100008000108A +:10B8800042C9010013872240E36D00000000004719 +:10B8900061B101004000001062DD01001087A84086 +:10B8A000813200001B8400881CB00000188722072A +:10B8B000803200000000000342B1010000000007D8 +:10B8C00042C10100008000A1469901000000005F14 +:10B8D000E1910100D787A2451F7C00001000000302 +:10B8E00048C9010000002D5429C00100000000F8E3 +:10B8F00018B00100000000F804B00100000000F8DA +:10B900000EB00100420000030AC801000C0000A4B0 +:10B910000CC801000000004017B001000000001436 +:10B9200002B001000000001424D001000000001447 +:10B9300010C001001200000810C801000000004003 +:10B9400023B00100FE7F000544C90100298720942F +:10B95000156C00002A870094E5B100000000000A81 +:10B96000E4B10100438722018032000000003C4422 +:10B9700023E0010000002EA480B0010000000010B0 +:10B9800048C101003087A307026C000031876801BD +:10B990001AB00000000068071AB001000000000D96 +:10B9A00002D0010000000005F0B101000000000C11 +:10B9B000F0B1010000000002E0B101000000000D44 +:10B9C0000AC001003D872240036C00003D872242EF +:10B9D000236C00000000004123C00100000000476C +:10B9E00061B10100A00000A462DD0100658728406C +:10B9F000813200003A87004081B200000000001050 +:10BA000080C001000000004761B10100000000405B +:10BA100062B101003F87A840233000001B840088EA +:10BA20001CB000006587004081B2000000003C446B +:10BA300023E00100000000A486B0010000002E10E9 +:10BA400048C101004887A3120E6C000049876807AF +:10BA50001AB00000000068121AB001004C8780087C +:10BA6000F03100000100001198C801000000004CF6 +:10BA70001E9001000000000CF0B101000000000267 +:10BA8000E0B101000000001086C001000000004687 +:10BA900061B10100011F004362DD01005087A85C15 +:10BAA0001F1000008387220D146C00005687220DA2 +:10BAB000246C00000000000D10C001005A87000D2A +:10BAC00024D00000000000412BC001000000001540 +:10BAD000A2B101001000002010C80100F0070040D2 +:10BAE000259801005C872242236C00006587004195 +:10BAF00023C000000000004661B1010040000010BA +:10BB000062DD01005D87A85C1F0000001B840088C7 +:10BB10001CB000000000001048B1010063872247FC +:10BB20001F7C000011960043233001000E00000F1F +:10BB30001E8C01000000004023B001008387220D0D +:10BB4000145000008287A20D0E500000718722461B +:10BB50001F7C0000000000461F80010030800010A4 +:10BB600042C901006F872240E36D000000000047DA +:10BB700061B101004000001062DD01006C87A84047 +:10BB8000813200001B8400881CB00000208000036C +:10BB9000469901000000005FE191010000002D06C0 +:10BBA00048B10100000000F818B00100000000F8E2 +:10BBB00004B0010076871FF00E3000002A87004C89 +:10BBC0000DC0000000002E5F0F8001002A872307B0 +:10BBD000146C00003000001048C90100240000402F +:10BBE000F199010000000003F0B101000000000025 +:10BBF000F0B1010000000016F0B1010024000000C7 +:10BC000000C801000000004761B10100A00000A4CD +:10BC100062DD01007F87A8461F1000002A8700030D +:10BC20000CB000002A87000D18C0000004002E147C +:10BC30000AD001001200000548CD0100FE7F00057A +:10BC400042C901000C002AF2E0B1010089872240BC +:10BC5000316C000000006018389601001E000040A2 +:10BC600043990100008100F680CE01008D87A64037 +:10BC7000813200000000004443C101008F87220B85 +:10BC8000ED6D0000080000A142C90100020000A102 +:10BC900046C901000F0000FA948801000200004A22 +:10BCA00086E40100000000F60EB0010097872247ED +:10BCB0001F7C000004001F430E5000009787A04621 +:10BCC0000F400000000000410FC001009B87224888 +:10BCD0001F7C00000000004091B0010004000FA292 +:10BCE000423100009E87004089B000000C0000A295 +:10BCF00042C901000000004389B001000000004378 +:10BD000095D00100000000FC82B00100A187A04195 +:10BD1000904000000000004191C00100A68722472A +:10BD20001F7C0000A687A043896C0000A6872045E1 +:10BD3000896C0000A687A0410E4000000000004171 +:10BD40000FC001000000004189C001009E87A24190 +:10BD500095500000AF8722481F7C0000100000486B +:10BD600092F40100FFFF004890880100AD879048E1 +:10BD7000924000000000004193C001000A0000A2B0 +:10BD800044C901000000662093A401003080001027 +:10BD900044C9010012000014F0C90100000000179E +:10BDA000F0B1010012000005E0CD010030000010EC +:10BDB00080C801000000004461B101002000004083 +:10BDC00062DD0100B587A84081320000C287225C95 +:10BDD0001F7C000000003C4423E0010000002D1007 +:10BDE00048C10100BF872240E36D0000000000460B +:10BDF00061B101004000001062DD0100BC87A84075 +:10BE0000813200001B8400881CB00000C287875C60 +:10BE10001F0000000000001048B101001196004111 +:10BE200023400100C487A2471F7C000058890017E7 +:10BE300010B0000000002F0348B10100C787A00721 +:10BE4000164000000000004117C001000000000B78 +:10BE5000E4B101000000005017F00100CB8790F220 +:10BE6000164000000000004117C0010000006620DD +:10BE700017A40100100000142AC80100000000509F +:10BE80002BE00100000000F22A9401003080001035 +:10BE900042C90100D5872240E36D00000000004444 +:10BEA00061B101004000001062DD0100D287A840AE +:10BEB000813200001B8400881CB000000080001745 +:10BEC00010DC01005889004081B20000A5950040B7 +:10BED00081320100DB87225C1F7C00001B8400880C +:10BEE0001CB000007C96005C1F0001000080000573 +:10BEF00044C9010000000040E1B1010004002D032D +:10BF000048B10100000000F03CB00100280000141E +:10BF100002C801000000000134B0010000002D053E +:10BF200032B00100220000050AC801001000000321 +:10BF300048C90100000000F818B00100000000F836 +:10BF400004B00100000000F80EB001000C0000A4D5 +:10BF50000CC801000000004017B0010000000040C4 +:10BF600023B00100218822018032000000003C44FF +:10BF700023E0010000002EA480B0010000000010AA +:10BF800048C10100F087A307026C0000F187680137 +:10BF90001AB00000000068071AB001000000000D90 +:10BFA00002D0010000000005F0B101000000000C0B +:10BFB000F0B1010000000002E0B101000000000D3E +:10BFC0000AC0010003882240036C0000FD87224262 +:10BFD000236C00000000004123C001000000004766 +:10BFE00061B10100A00000A462DD01003D8828408D +:10BFF00081320000FA87004081B20000000000108A +:10C0000080C001000000004761B101000000004055 +:10C0100062B10100FF87A840233000001B84008824 +:10C020001CB000003D88004081B2000000000010FC +:10C0300080C001000000004761B101000000004025 +:10C0400062B101000588A840233000001B840088ED +:10C050001CB000002200001948C9010000002D1486 +:10C0600048C101000F0000F23A88010000000042C0 +:10C070003BE001000E00001402C801000000001D9A +:10C0800002C001001188231A02500000000000467F +:10C0900003C001003D88000134C000000C002D1DCC +:10C0A00048C10100F00000F23088010000000042A9 +:10C0B00031F001000000001402B001000000001D7A +:10C0C00002C001000000001802C001001988221AF5 +:10C0D000025000003D88000134C000002200001919 +:10C0E00048C9010002002D1448C10100000000F6FB +:10C0F00014B001000000001D14D001000000001861 +:10C1000014D001000000001E24B00100120000172E +:10C1100010C801003D88001A10C0000000003C4417 +:10C1200023E00100000000A486B0010000002E10F2 +:10C1300048C101002688A3120E6C000027886807FA +:10C140001AB00000000068121AB001002A888008A6 +:10C15000F03100000100001198C801000000004CFF +:10C160001E9001000000000CF0B101000000000270 +:10C17000E0B101000000001086C001000000004690 +:10C1800061B10100011F004362DD01002E88A85C3F +:10C190001F1000005A88220D145000005A88220DEA +:10C1A000245000000000000D10C00100358822421C +:10C1B000236C00003D88004123C0000000000046C1 +:10C1C00061B101004000001062DD01003688A85C0A +:10C1D0001F0000001B8400881CB00000000000103D +:10C1E00048B1010011960043233001000E00000FFA +:10C1F0001E8C01000000004023B001005988A20DF0 +:10C200000E500000488822461F7C000000000046B7 +:10C210001F8001003080001042C901004688224082 +:10C22000E36D00000000004761B101004000001014 +:10C2300062DD01004388A840813200001B84008831 +:10C240001CB0000020800003469901000000005F40 +:10C25000E191010000002D0648B10100000000F846 +:10C2600018B00100000000F804B001004D881FF074 +:10C270000E300000EA87004C0DC0000000002E5F69 +:10C280000F800100EA872307146C000030000010C3 +:10C2900048C9010024000040F1990100000000039A +:10C2A000F0B1010000000000F0B101000000001634 +:10C2B000F0B101002400000000C8010000000047A8 +:10C2C00061B10100A00000A462DD01005688A8460B +:10C2D0001F100000EA8700030CB00000EA87000D81 +:10C2E00018C000007788A2441F7C000000000019DD +:10C2F0000AB001002200000548C901000A002D14FF +:10C3000048C1010002002040E5B1010004002040C6 +:10C31000E5B101000D002D1D48C10100090000F329 +:10C32000388801000D002050E7B1010004002D40C5 +:10C330003FB00100000000F432B0010004002040D2 +:10C34000E1B101002200000548C9010000002D14E0 +:10C3500048C101000200001D94F4010000000040EB +:10C3600091B001006C88A0FC9040000000000041EA +:10C3700091C001006A88A241955000000480000528 +:10C3800044C9010000000048F0B10100000000189D +:10C3900048C101000200001894F4010000002D18AB +:10C3A00090B001007488A0FC9040000000000041A3 +:10C3B00091C001007288A241955000000000004821 +:10C3C000E0B1010010002040E5B1010022000005AD +:10C3D00048C901000000001448C1010004800005A4 +:10C3E00042C90100000000F880B00100000000F028 +:10C3F00016C001007C8842303D0700000000009E0E +:10C4000085B0010000001A413DC301000400204234 +:10C41000ECB101000000001E82B0010002002E1DE0 +:10C4200082C001000000661882C0010000000042C6 +:10C4300080C001008688A0418044000000000041C7 +:10C4400081C001001000004092F401000A002E306B +:10C45000818401008A8890409240000000000041E1 +:10C4600093C001000000662093A401000000001D9D +:10C4700048C1010004002019E8B101000000001EBD +:10C4800016C001009088A019164400000000004169 +:10C4900017C001000D002F1E32C001009588A24078 +:10C4A000156C00009488A01C16400000000000419C +:10C4B00017C00100000063F338940100100000056C +:10C4C00048C9010004002E1E98B001000000601A47 +:10C4D00098C001000C002040E1B10100A388224671 +:10C4E0001F7C0000000000461F800100308000100B +:10C4F00042C90100A1882240E36D0000000000470E +:10C5000061B101004000001062DD01009E88A8407A +:10C51000813200001B8400881CB0000020800003D2 +:10C52000469901000000005FE19101003080001099 +:10C5300044C901001200001AF0C9010000000017F0 +:10C54000F0B1010010000005E0C90100300000104A +:10C5500080C801000000004461B1010020000040DB +:10C5600062DD0100A988A84081320000B788225C02 +:10C570001F7C000000003C4423E0010000002D105F +:10C5800048C10100B3882240E36D0000000000466E +:10C5900061B101004000001062DD0100B088A840D8 +:10C5A000813200001B8400881CB000000000005C89 +:10C5B0001F8001000000001048B1010011960041E9 +:10C5C000234001000E00000F1E8C010020002F05EB +:10C5D00048B101000000000BE4B101000000005070 +:10C5E00017F00100BC8890F21640000000000041E6 +:10C5F00017C001000000662017A4010010000014FD +:10C600002AC801000000001D2AC0010000000050DF +:10C610002BE00100000000F22A940100308000109D +:10C6200042C90100C7882240E36D000000000044B9 +:10C6300061B101004000001062DD0100C488A84023 +:10C64000813200001B8400881CB0000000800017AD +:10C6500010DC0100E4882240156C0000CF88A24461 +:10C660001F7C0000000000441F900100CE88229F24 +:10C67000136C0000020000881CCC01006B84004099 +:10C6800081B20000000000413FC3010066990040F4 +:10C6900081320100D288A241877C00000000001E88 +:10C6A0003EC00100E4882240156C0000D588201EA1 +:10C6B000146C00000000000A3CB00100DD95001E73 +:10C6C00024300100DA8822082E30000000000052D9 +:10C6D00011C001000000001A10C001003D88004098 +:10C6E00017B000006B8400881CB00000DD9500408E +:10C6F00081320100D788A2082E300000808000A679 +:10C7000004B001000600004087980100008000038B +:10C710004499010004002204E03100005599001FF3 +:10C720008C300100000000400FB00100058A005C61 +:10C730001F900000008000034499010004002204BF +:10C74000E03100006699004081320100E988A24191 +:10C75000877C0000EA88001E3EC000000000001F29 +:10C760008CB001000000004005B001005599004068 +:10C770000F300100058A005C1F900000F5889C0FB7 +:10C78000803200000000005C1F800100008000106B +:10C7900042C90100F5882240E36D00000000004717 +:10C7A00061B101004000001062DD0100F288A84084 +:10C7B000813200001B8400881CB00000FA88220728 +:10C7C000803200000000000342B1010000000007B9 +:10C7D00042C10100008000A1469901000000005FF5 +:10C7E000E191010004002E0348B10100FD8820946E +:10C7F000156C0000FE880094E1B100000000000A02 +:10C80000E0B1010001892240316C00000C000040C1 +:10C8100045990100000060183896010000002E10B4 +:10C8200048B1010000000050F1B101000000000813 +:10C83000F0B1010000000003E0B10100000000447D +:10C8400061B101000000001062B101000689A8403A +:10C85000233000001B8400881CB0000000002D5213 +:10C8600011C001001000000348C90100000000F8D9 +:10C8700018B00100000000F804B00100000000F84A +:10C880000EB001000C0000A40CC8010000003C44E4 +:10C8900023E00100000000A486B0010000002E107B +:10C8A00048C101001489A3120E6C000015896807A5 +:10C8B0001AB00000000068121AB001000000001059 +:10C8C00086C0010000000008F0B101000000000C6B +:10C8D000F0B1010000000002E0B1010000000046DC +:10C8E00061B10100011F004362DD01001A89A85CEB +:10C8F0001F1000004B89220D146C00002089220DAE +:10C90000246C00000000000D10C001002489000DFF +:10C9100024D00000000000412BC0010000000015E1 +:10C92000A2B101001000002010C80100F007004073 +:10C930002598010026892242236C00002D890041A0 +:10C9400023C000000000004661B10100400000105B +:10C9500062DD01002789A85C1F0000001B8400889D +:10C960001CB000000000001048B10100D794004343 +:10C97000233001000000004023B001000400220D1C +:10C98000145000004A89A20D0E5000003989224639 +:10C990001F7C0000000000461F8001003080001056 +:10C9A00042C9010037892240E36D000000000047C2 +:10C9B00061B101004000001062DD01003489A8402F +:10C9C000813200001B8400881CB00000208000031E +:10C9D000469901000000005FE191010000002D0672 +:10C9E00048B10100000000F818B00100000000F894 +:10C9F00004B001003E891FF00E3000000F89004C8A +:10CA00000DC0000000002E5F0F8001000F8923077A +:10CA1000146C00003000001048C9010024000040E0 +:10CA2000F199010000000003F0B1010000000000D6 +:10CA3000F0B1010000000016F0B101002400000078 +:10CA400000C801000000004761B10100A00000A47F +:10CA500062DD01004789A8461F1000000F8900030E +:10CA60000CB000000F89000D18C000005489225C32 +:10CA70001F7C00000000005C1F80010000003C449F +:10CA800023E0010000002D1048C10100548922401C +:10CA9000E36D00000000004661B10100400000109D +:10CAA00062DD01005189A840813200001B840088AA +:10CAB0001CB000000000001048B10100D7940041F4 +:10CAC000234001000000001710B001005889004009 +:10CAD0002BB0000000800003449901000000000416 +:10CAE000E0B101005D89229F136C00000200008804 +:10CAF0001CCC01006B84004081B2000066990041AB +:10CB00003F430100000000408DB0010000000040E4 +:10CB100005B00100559900400F3001001B8A005CF0 +:10CB20001F900000100000000EF401000000003A09 +:10CB300001840100030000071AF401002196000798 +:10CB4000163001006C892241816C00006A89224202 +:10CB5000816C00001B8400881CB000006B89225F80 +:10CB60000F7C0000058A00400FB000007489A25AB3 +:10CB70001F7C00009B9500408132010074892220B7 +:10CB8000856C000071899C0F803200001B84008836 +:10CB90001CB000007C96005C1F0001009B980042C6 +:10CBA000613101001B8400881CB00000E699000779 +:10CBB0009630010000002D0548B10100000000F092 +:10CBC00018B001000000000080B00100AE8AA25F32 +:10CBD000816C0000A8002D431980010037002DF062 +:10CBE00024B00100040000F38EF401000F0000F3F4 +:10CBF00090880100838922488E6C00003600004036 +:10CC00004399010058003D43E7E1010083891FF08B +:10CC1000246C0000828923418F6C0000AE8A00479B +:10CC200081B00000AE8A004881B0000040000040A2 +:10CC300043990100B0002DF014B001008889220A48 +:10CC4000904000003999004091300100AE8AA24026 +:10CC500080320000B0002D4581B00100948922F09F +:10CC60002C300000A3002D3083B00100AC002DF368 +:10CC700082E001008E89A3412C6C000000000016A8 +:10CC800082B0010098002DF082C0010088002DF0D4 +:10CC900082D00100000000F298E80100AE8A204C2A +:10CCA000826C00007C002D4198E80100AE8A20F0E3 +:10CCB000986C0000058A220A803200004002000CB5 +:10CCC0007E890100058AA64081320000AE8A0049B3 +:10CCD00081B00000200000A680B001009C892243A2 +:10CCE000216F00001380004080DC01009D8900401E +:10CCF00081B200001A80004080DC01009D89A25EA4 +:10CD00000B7D00000000004008B101009F899F8555 +:10CD100080320000A389004081B200005F8422407D +:10CD2000577D00000100004057990100A38942404F +:10CD300081320000000000449393010049841A5B93 +:10CD4000699300007B00004061990100A689A8B1A9 +:10CD500080300000CF891D4080320000C089224011 +:10CD6000AF6F0000C089225B817C00000400225D5F +:10CD7000737D00007D00004061990100AC89A8B17D +:10CD8000943000000000005F61B101000000004A23 +:10CD900062B10100AF89A84081320000B1894340EF +:10CDA00081320000BF892257737D00007700004068 +:10CDB00061990100B389A8B1943000007700004068 +:10CDC00061990100B589A8B19630000000000048C3 +:10CDD00061B101000000004A62B10100B889A84AAF +:10CDE00080330000BD89225F957C00000000004B6D +:10CDF00062B10100BB89A84BAC33000000001BA549 +:10CE000082B30100C08900BE83C3000000001B4044 +:10CE100081B301004018004049990100040000A6B8 +:10CE200086B00100CD89A240860400001B849C408E +:10CE300080320000FFFF004088880100E98900502F +:10CE4000473101003600004488CC0100C9895240B6 +:10CE500081320000E98900404731010000000041B3 +:10CE600089B00100E989004847310100E9890005DE +:10CE7000473101001B84004081B2000028000040BF +:10CE8000479901001B840041E1C10000781800406F +:10CE900049990100D6892254817C0000D189424001 +:10CEA00081320000008200B469DF010000001A44F2 +:10CEB000939301002800004047990100E98900414F +:10CEC00089300100E4890F4080320000FF7F00407C +:10CED00088880100E989005047310100360000448C +:10CEE00088CC0100DC8999408032000000000048B5 +:10CEF00089D00100DE899B40803200000000004C98 +:10CF000089D00100E0891F4480320000E989004097 +:10CF1000473101000000004189B00100E989004863 +:10CF200047310100E9890058473101001B84004066 +:10CF300081B200001000004086F401006F00004341 +:10CF4000868801001B84260547310000E9890041DD +:10CF5000893001001B84004081B200000000A04421 +:10CF6000F04101000000004081B20100000080415A +:10CF7000E1C10100040000CB81C80100EF8922401B +:10CF8000F27F00008180006F97330100F189224019 +:10CF9000737D00009B8000418BB30000EC89225917 +:10CFA000737D00007900004061990100EC8928B18F +:10CFB0007E310000F289004081B20000040022C0EE +:10CFC00095300000000000D697B00100FA89225D7C +:10CFD000737D00007D00004061990100F889A8B1CF +:10CFE000803000000000005E7F830100000000BF71 +:10CFF000C5B10100040000408198010025010040F6 +:10D0000081320100FD89A24181500000FF89435F08 +:10D010007F130000260100BFC53101000000005F42 +:10D020007F8301000000005E7F9301008B9800BFAA +:10D03000C53101001B84004081B200000C8A9C0FA6 +:10D04000803200000080001042C901000C8A22409A +:10D05000E36D00000000004561B1010040000010D8 +:10D0600062DD0100098AA840813200001B8400882B +:10D070001CB0000077952202803200000D8A4240E9 +:10D0800081320000000000449393010077951A025A +:10D0900068970000178A9C0F803200000080001003 +:10D0A00042C90100178A2240E36D000000000045DC +:10D0B00061B101004000001062DD0100148AA84047 +:10D0C000813200001B8400881CB000008195220280 +:10D0D00080320000188A4240813200000000004483 +:10D0E0009393010081951A0268970000228A9C0F91 +:10D0F000803200000080001042C90100228A2240D4 +:10D10000E36D00000000004561B101004000001027 +:10D1100062DD01001F8AA840813200001B84008864 +:10D120001CB000006F84220280320000238A42403B +:10D1300081320000000000449393010000001A02B5 +:10D14000689701006F84004005B00000008000A6D1 +:10D1500056B1010056952F4005B00100738AA240D8 +:10D16000E76D0000B8942941E7B1010000000054C8 +:10D17000EF930100000000F20EB001002900004012 +:10D180000D9801000900000712E40100000000A74B +:10D1900013C00100030000071AF401000700000794 +:10D1A00016880100FFFF001034D8010000000003C2 +:10D1B000349401000000004023B00100201800401A +:10D1C0001198010000B5000D42C90100578A220BD9 +:10D1D000E67D0000388A444081320000FFFF0007EE +:10D1E000848901003F8A05C224300000679800400E +:10D1F0008132010000002D0548B10100748A1CF045 +:10D2000018300100578A004081B2000000001C4025 +:10D2100081B201004E8AA048236C0000000000503B +:10D2200035D001000080001A42C90100488A22401E +:10D23000E36D00000000004261B101004000001AEF +:10D2400062DD0100458AA840813200001B8400880D +:10D250001CB000002098004043990100748A00F837 +:10D2600018300100498AA24123500000FFFF00103E +:10D2700034D801000000000334940100201800405D +:10D280001198010000002E1A48B10100000000446E +:10D29000F1B1010000000008F0B1010000000042FF +:10D2A00061B101002000001A62DD0100528AA80964 +:10D2B000E03100000000004123C0010000000050E8 +:10D2C00035C001000000004411C00100638A224102 +:10D2D0000D500000000000410FC001005F8AA0AAAD +:10D2E0000F6C0000000000410FB0010009000007B2 +:10D2F00012E40100000000A713C00100000000407C +:10D300001BB00100368A004117B00000000200097E +:10D3100012C80100368A8341174000000000004017 +:10D3200017B00100368A00411BC000006E8A2340FE +:10D33000236C00000000005035D001000080001A6E +:10D3400042C901006B8A2240E36D000000000042E8 +:10D3500061B101004000001A62DD0100688AA84046 +:10D36000813200001B8400881CB00000209800401F +:10D3700043990100748A00F8183001006C8AA241B8 +:10D3800023500000000000410FC00100718AA0AAD4 +:10D390000F6C0000000000410FB00100B89420079E +:10D3A000E4B1010056952040E7B10100058A004034 +:10D3B0000FB00000FFFF000C80D80100C002000C7D +:10D3C0007E890100868A2654613100007C8A870CA0 +:10D3D000803200000F000040629901007C8A2840E2 +:10D3E000813200007C8AA254777D0000788A004058 +:10D3F00081B20000818A2246197C00000D000040A5 +:10D40000629901000000A84081B200000000A2540F +:10D41000777D01007D8A004081B20000868A224922 +:10D42000197C00000E000040629901000000A84035 +:10D4300081B200000000A254777D0100818A004083 +:10D4400081B2000010000040629901000000A84075 +:10D4500081B200000000A254777D0100868A00405E +:10D4600081B2000030942F55F1930100004000A6D6 +:10D4700056B101006F84A241E551000064000040F4 +:10D48000E59901008E8A424081320000918AA29380 +:10D49000576F00000000004157C3010000001AABA5 +:10D4A00027B301006F842250FD7F00006F8422515A +:10D4B000FD7F00006F84A2411D53000050460040D4 +:10D4C0001D9B010034820040813201000E000048A3 +:10D4D000B2CB0100FC810040493101009D8A22400D +:10D4E000B56F00000E000048B2CB0100FF81004183 +:10D4F000B55301006F84004081B20000000000516C +:10D50000FD8301004016004045990100358200402E +:10D51000493101001E000048B2CB0100FC810040EF +:10D5200081320100000000DA91C0010004000048CF +:10D53000B2CB0100FF810040B533010060162040EE +:10D54000E5B10100DB820040B5330100080000486E +:10D55000B2CB0100FFFF004AB48B0100FF81004005 +:10D56000813201000A000048B2CB01001000004ADD +:10D57000B4F70100FF810040813201006F84004058 +:10D5800081B200000500004043990100000000F353 +:10D5900008B0010004002040E6B101000300004093 +:10D5A00096E401000000000496C00100B48A004B1C +:10D5B00010C90000D78D004109B000000400002010 +:10D5C0008FB00000040000208FB000000400002095 +:10D5D0008FB00000040000208FB000000400002085 +:10D5E0008FB00000040000208FB000000400002075 +:10D5F0008FB00000040000208FB000000B8E0041AF +:10D6000009B00000040000208FB0000004000020DA +:10D610008FB00000040000208FB000000400002044 +:10D620008FB00000040000208FB000000400002034 +:10D630008FB00000040000208FB000000400002024 +:10D640008FB000003D8E004509B000003D8E0045C2 +:10D6500009B000003D8E004509B000003D8E004538 +:10D6600009B00000040000208FB00000040000207A +:10D670008FB00000040000208FB0000004000020E4 +:10D680008FB000007C8E004309B00000A58E0043DF +:10D6900009B00000A98E004409B0000011900045B7 +:10D6A00009B00000040000208FB00000040000203A +:10D6B0008FB00000040000208FB0000004000020A4 +:10D6C0008FB00000040000208FB00000B58E004332 +:10D6D00009B00000B48E004309B00000D58D0045AC +:10D6E00009B00000040000208FB0000004000020FA +:10D6F0008FB00000040000208FB000000400002064 +:10D700008FB00000758F004209B00000758F004394 +:10D7100009B00000758F004409B00000D58D0045A8 +:10D7200009B00000040000208FB0000004000020B9 +:10D730008FB00000040000208FB000000400002023 +:10D740008FB00000040000208FB00000A18F0043C4 +:10D7500009B00000040000208FB00000D58D004506 +:10D7600009B00000040000208FB000000400002079 +:10D770008FB00000040000208FB0000004000020E3 +:10D780008FB00000040000208FB00000BF8F004366 +:10D7900009B00000BF8F004409B00000D58D0045DE +:10D7A00009B00000040000208FB000000400002039 +:10D7B0008FB00000040000208FB0000004000020A3 +:10D7C0008FB00000040000208FB00000BF8F004227 +:10D7D00009B00000040000208FB00000D58D004586 +:10D7E00009B00000040000208FB0000004000020F9 +:10D7F0008FB00000040000208FB000000400002063 +:10D800008FB00000040000208FB00000E78F0044BC +:10D8100009B00000040000208FB00000D58D004545 +:10D8200009B00000040000208FB0000004000020B8 +:10D830008FB00000040000208FB000000400002022 +:10D840008FB00000D58D004209B00000F88F004570 +:10D8500009B00000F88F004509B00000D58D0045E3 +:10D8600009B00000040000208FB000000400002078 +:10D870008FB00000040000208FB0000004000020E2 +:10D880008FB00000FA8F004209B00000FA8F004309 +:10D8900009B00000FA8F004409B00000FA8F00457B +:10D8A00009B00000040000208FB000000400002038 +:10D8B0008FB00000040000208FB0000004000020A2 +:10D8C0008FB00000040000208FB000000400002092 +:10D8D0008FB000000290004409B00000D58D0045D3 +:10D8E00009B00000040000208FB0000004000020F8 +:10D8F0008FB00000040000208FB000000400002062 +:10D900008FB000001390004209B000000390004364 +:10D9100009B000001390004409B00000D58D004507 +:10D9200009B00000040000208FB0000004000020B7 +:10D930008FB00000040000208FB000000400002021 +:10D940008FB00000040000208FB00000149000434E +:10D9500009B000000A90004409B00000D58D0045D0 +:10D9600009B00000040000208FB000000400002077 +:10D970008FB00000040000208FB00000D58D004162 +:10D9800009B00000738F004209B00000738F00439C +:10D9900009B00000738F004409B00000D58D004528 +:10D9A00009B00000040000208FB000000400002037 +:10D9B0008FB00000040000208FB00000D58D004122 +:10D9C00009B000001590004209B000001590004316 +:10D9D00009B000001590004409B00000D58D004545 +:10D9E00009B00000040000208FB0000004000020F7 +:10D9F0008FB00000040000208FB000000400002061 +:10DA00008FB00000040000208FB000000400002050 +:10DA10008FB00000040000208FB000001C90004573 +:10DA200009B00000040000208FB0000004000020B6 +:10DA30008FB00000040000208FB000001E90004254 +:10DA400009B00000040000208FB000000400002096 +:10DA50008FB00000040000208FB000000400002000 +:10DA60008FB00000040000208FB0000004000020F0 +:10DA70008FB00000040000208FB0000004000020E0 +:10DA80008FB000002A90004309B00000939000433B +:10DA900009B00000A98E004409B0000011900045B3 +:10DAA00009B00000040000208FB000000400002036 +:10DAB0008FB00000040000208FB0000004000020A0 +:10DAC0008FB00000040000208FB000009B90004346 +:10DAD00009B00000A98E004409B000001190004573 +:10DAE00009B00000040000208FB0000004000020F6 +:10DAF0008FB00000040000208FB000000400002060 +:10DB00008FB00000040000208FB00000AC900043F4 +:10DB100009B00000040000208FB00000D58D004542 +:10DB200009B00000040000208FB0000004000020B5 +:10DB30008FB00000040000208FB00000040000201F +:10DB40008FB00000798E004309B000009790004329 +:10DB500009B00000A98E004409B0000011900045F2 +:10DB600009B00000040000208FB000000400002075 +:10DB70008FB0000007002D0548B10100000000F340 +:10DB800008B0010006002047E6B10100040000478C +:10DB900096E401000000004796D001000000004715 +:10DBA00096D001000000000496C00100748B004B69 +:10DBB00010C90000C490004909B000000400002012 +:10DBC00085B000000400002085B0000004000020A3 +:10DBD00085B000000400002085B000000400002093 +:10DBE00085B000000400002085B000000400002083 +:10DBF00085B000000400002085B000000400002073 +:10DC000085B000000400002085B000000400002062 +:10DC100085B000000400002085B000000400002052 +:10DC200085B000000400002085B00000FD90004297 +:10DC300009B000000400002085B0000004000020AE +:10DC400085B000000400002085B000000400002022 +:10DC500085B000000400002085B000000400002012 +:10DC600085B000000400002085B000000400002002 +:10DC700085B000000400002085B0000004000020F2 +:10DC800085B000000400002085B0000004000020E2 +:10DC900085B000000400002085B00000039100461C +:10DCA00009B000000400002085B00000040000203E +:10DCB00085B000000400002085B0000004000020B2 +:10DCC00085B000000400002085B0000004000020A2 +:10DCD00085B000000400002085B000000400002092 +:10DCE00085B000000400002085B000000400002082 +:10DCF00085B000000400002085B000000400002072 +:10DD000085B000000400002085B000000400002061 +:10DD100085B000001191004209B00000040000200D +:10DD200085B000003391004209B0000004000020DB +:10DD300085B000000400002085B000000400002031 +:10DD400085B000000400002085B000000400002021 +:10DD500085B000000400002085B000002E91004A2C +:10DD600009B000000400002085B00000040000207D +:10DD700085B000000400002085B0000004000020F1 +:10DD800085B000003691004309B000000400002077 +:10DD900085B000008F91004409B00000040000200D +:10DDA00085B000000400002085B0000004000020C1 +:10DDB00085B000000400002085B0000004000020B1 +:10DDC00085B000000400002085B000008E91004B5B +:10DDD00009B000000400002085B00000040000200D +:10DDE00085B000000400002085B0000006910041CD +:10DDF00009B000000400002085B000000691004337 +:10DE000009B000000691004409B0000006910045E9 +:10DE100009B000000691004609B0000006910047D5 +:10DE200009B000000691004809B0000006910049C1 +:10DE300009B000000691004A09B000000691004BAD +:10DE400009B000000691004C09B000000691004D99 +:10DE500009B000000400002085B00000040000208C +:10DE600085B00000EE91004209B0000004000020DF +:10DE700085B00000EE91004409B0000004000020CD +:10DE800085B000000400002085B0000004000020E0 +:10DE900085B000000400002085B0000004000020D0 +:10DEA00085B000000400002085B00000EE91004B1A +:10DEB00009B000000400002085B00000040000202C +:10DEC00085B000000400002085B0000004000020A0 +:10DED00085B000000400002085B0000006920045D7 +:10DEE00009B000000400002085B0000004000020FC +:10DEF00085B000000400002085B000000400002070 +:10DF000085B000001D92004709B000000400002009 +:10DF100085B00000FA91004509B00000040000201F +:10DF200085B000000400002085B000007C9400460D +:10DF300009B000000400002085B0000004000020AB +:10DF400085B000000400002085B00000040000201F +:10DF500085B000000400002085B000003391004629 +:10DF600009B000001191004609B000002C91004753 +:10DF700009B000002C91004809B000000400002006 +:10DF800085B000000400002085B0000004000020DF +:10DF900085B000002E91004A09B000000400002066 +:10DFA00085B000000400002085B0000004000020BF +:10DFB00085B000000400002085B0000004000020AF +:10DFC00085B000000400002085B000008F9100455E +:10DFD00009B000003691004309B000002C910047C1 +:10DFE00009B000002C91004809B000000400002096 +:10DFF00085B000000400002085B00000040000206F +:10E0000085B000008E91004C09B000000400002093 +:10E0100085B000000400002085B00000040000204E +:10E0200085B000000400002085B00000040000203E +:10E0300085B000000400002085B000002392004459 +:10E0400009B000002392004209B00000C08D0047D3 +:10E0500009B00000C08D004809B000000400002095 +:10E0600085B000000400002085B0000004000020FE +:10E0700085B000002392004B09B00000040000208E +:10E0800085B000000400002085B00000069100412A +:10E0900009B000004692004709B0000004000020CB +:10E0A00085B000002E92004709B000000400002057 +:10E0B00085B000000400002085B0000004000020AE +:10E0C00085B000000400002085B00000040000209E +:10E0D00085B000000400002085B000002E920047AB +:10E0E00009B000000400002085B0000004000020FA +:10E0F00085B000000400002085B00000040000206E +:10E1000085B000000400002085B00000040000205D +:10E1100085B000000400002085B000002E9200476A +:10E1200009B000004692004709B000002C9100475A +:10E1300009B000002C91004809B000000400002044 +:10E1400085B000000400002085B00000040000201D +:10E1500085B000002E92004709B0000004000020A6 +:10E1600085B000000400002085B0000004000020FD +:10E1700085B000000400002085B0000004000020ED +:10E1800085B000000400002085B0000004000020DD +:10E1900085B000000400002085B0000055920047C3 +:10E1A00009B000005592004809B0000004000020AA +:10E1B00085B000000400002085B0000004000020AD +:10E1C00085B000000400002085B00000040000209D +:10E1D00085B000000400002085B00000B892004027 +:10E1E00009B00000D692004709B00000CA9200486A +:10E1F00009B000002692004709B0000026920047AF +:10E2000009B00000D692004709B00000DD92004737 +:10E2100009B00000DD92004809B0000004000020B1 +:10E2200085B00000CA92004809B00000269200475D +:10E2300009B000002692004709B00000CA920048C9 +:10E2400009B000000400002085B000000400002098 +:10E2500085B000000400002085B00000EE9100436E +:10E2600009B000000400002085B00000EE910045D8 +:10E2700009B00000EE91004609B000002C91004763 +:10E2800009B000002C91004809B0000004000020F3 +:10E2900085B00000EE91004A09B0000004000020A3 +:10E2A00085B00000EE91004C09B000000400002091 +:10E2B00085B000000400002085B0000004000020AC +:10E2C00085B000004592004709B00000399200482F +:10E2D00009B000002D92004709B000002D920047C0 +:10E2E00009B000004592004709B00000C08D00470A +:10E2F00009B00000C08D004809B0000004000020F3 +:10E3000085B000003992004809B000002D92004706 +:10E3100009B000002D92004709B000003992004872 +:10E3200009B000000400002085B0000004000020B7 +:10E3300085B00000DF92004209B000000400002018 +:10E3400085B00000DF92004409B000000400002006 +:10E3500085B000000400002085B00000040000200B +:10E3600085B000000400002085B0000004000020FB +:10E3700085B000000400002085B00000DF92004B53 +:10E3800009B000000400002085B000000400002057 +:10E3900085B000000400002085B0000004000020CB +:10E3A00085B000000400002085B00000DF9200432B +:10E3B00009B000000400002085B00000DF92004595 +:10E3C00009B00000DF92004609B00000DF9200476C +:10E3D00009B00000DF92004809B0000004000020EE +:10E3E00085B00000DF92004A09B000000400002060 +:10E3F00085B00000DF92004C09B00000DF92004CB5 +:10E4000009B000000400002085B0000004000020D6 +:10E4100085B000000400002085B00000FA9200469C +:10E4200009B000000400002085B0000004000020B6 +:10E4300085B000000400002085B00000040000202A +:10E4400085B000001D92004709B0000004000020C4 +:10E4500085B00000FA92004609B0000004000020D8 +:10E4600085B000000400002085B0000004000020FA +:10E4700085B000000400002085B0000004000020EA +:10E4800085B000000400002085B00000069400461E +:10E4900009B000000400002085B000000400002046 +:10E4A00085B000000400002085B0000004000020BA +:10E4B00085B000001D92004709B000000400002054 +:10E4C00085B000000694004609B00000040000205A +:10E4D00085B000000400002085B0000006940046CE +:10E4E00009B000000400002085B0000004000020F6 +:10E4F00085B000000400002085B00000040000206A +:10E5000085B000002B94004209B0000004000020F8 +:10E5100085B000000400002085B000000400002049 +:10E5200085B000000400002085B000000400002039 +:10E5300085B000000400002085B000002A94004A45 +:10E5400009B000000400002085B000000400002095 +:10E5500085B000000400002085B000000400002009 +:10E5600085B000000400002085B0000004000020F9 +:10E5700085B000000400002085B000002B94004608 +:10E5800009B000000400002085B000002C91004775 +:10E5900009B000002C91004809B0000004000020E0 +:10E5A00085B000000400002085B0000004000020B9 +:10E5B00085B000002A94004A09B000000400002041 +:10E5C00085B000000400002085B000000400002099 +:10E5D00085B000000400002085B000000400002089 +:10E5E00085B000000400002085B000000400002079 +:10E5F00085B000000400002085B000000400002069 +:10E6000085B000000400002085B00000EA920041BF +:10E6100009B000000400002085B0000004000020C4 +:10E6200085B000000400002085B000000400002038 +:10E6300085B000000400002085B000000400002028 +:10E6400085B00000F792004209B0000004000020ED +:10E6500085B00000F792004409B0000004000020DB +:10E6600085B000000400002085B0000004000020F8 +:10E6700085B000000400002085B0000004000020E8 +:10E6800085B000000400002085B00000F792004B28 +:10E6900009B000000400002085B000000400002044 +:10E6A00085B000000400002085B0000004000020B8 +:10E6B00085B000000400002085B00000F792004300 +:10E6C00009B000000400002085B00000F79200456A +:10E6D00009B00000F792004609B00000F792004729 +:10E6E00009B00000F792004809B0000004000020C3 +:10E6F00085B000000400002085B000000400002068 +:10E7000085B00000F792004C09B000000400002022 +:10E7100085B000000400002085B000000400002047 +:10E7200085B000000400002085B000000692004C77 +:10E7300009B000000400002085B0000004000020A3 +:10E7400085B000000400002085B000000400002017 +:10E7500085B000001D92004709B0000004000020B1 +:10E7600085B00000FA91004C09B0000004000020C0 +:10E7700085B000000400002085B00000CD94004664 +:10E7800009B000000400002085B000000400002053 +:10E7900085B000007194004209B000000400002020 +:10E7A00085B000007194004409B00000040000200E +:10E7B00085B000000400002085B0000004000020A7 +:10E7C00085B000000400002085B000000400002097 +:10E7D00085B000000400002085B000007194004B5B +:10E7E00009B000000400002085B0000004000020F3 +:10E7F00085B000000400002085B000000400002067 +:10E8000085B000000400002085B000000400002056 +:10E8100085B000000400002085B000007194004520 +:10E8200009B000007194004609B000002C91004727 +:10E8300009B000002C91004809B00000040000203D +:10E8400085B000000400002085B000000400002016 +:10E8500085B000007194004C09B000000400002055 +:10E8600085B000000400002085B0000004000020F6 +:10E8700085B00000FA91004209B000007C94004687 +:10E8800009B000000400002085B000000400002052 +:10E8900085B00000FA91004609B000000400002095 +:10E8A00085B000001D92004709B000000400002060 +:10E8B00085B000007C94004609B0000004000020F0 +:10E8C00085B000000400002085B000007C94004664 +:10E8D00009B000000400002085B000000400002002 +:10E8E00085B000000400002085B000008094004343 +:10E8F00009B000000400002085B0000004000020E2 +:10E9000085B000000400002085B000000400002055 +:10E9100085B000001D92004709B0000004000020EF +:10E9200085B000008094004309B00000040000207E +:10E9300085B000000400002085B000008094004DE8 +:10E9400009B000000400002085B000000400002091 +:10E9500085B000000400002085B000000400002005 +:10E9600085B000009294004309B00000040000202C +:10E9700085B000000400002085B0000004000020E5 +:10E9800085B000000400002085B0000004000020D5 +:10E9900085B000000400002085B000006F94004A9C +:10E9A00009B000000400002085B000000400002031 +:10E9B00085B000000400002085B0000004000020A5 +:10E9C00085B000000400002085B000000400002095 +:10E9D00085B000000400002085B000009294004340 +:10E9E00009B000000400002085B000002C91004711 +:10E9F00009B000002C91004809B00000040000207C +:10EA000085B000000400002085B000000400002054 +:10EA100085B000006F94004A09B000000400002097 +:10EA200085B000000400002085B000000400002034 +:10EA300085B000000400002085B00000A4940043CD +:10EA400009B000000400002085B000000400002090 +:10EA500085B000000400002085B000000400002004 +:10EA600085B000001D92004709B00000040000209E +:10EA700085B00000A494004309B000000400002009 +:10EA800085B000000400002085B00000A494004D73 +:10EA900009B000000400002085B000000400002040 +:10EAA00085B000001191004209B000000400002070 +:10EAB00085B000003391004209B00000040000203E +:10EAC00085B000000400002085B000000400002094 +:10EAD00085B000000400002085B000000400002084 +:10EAE00085B000000400002085B00000C3940042FF +:10EAF00009B000000400002085B0000004000020E0 +:10EB000085B000000400002085B000000400002053 +:10EB100085B000000400002085B000000400002043 +:10EB200085B000000400002085B00000339100464D +:10EB300009B000001191004609B000002C91004777 +:10EB400009B000002C91004809B00000040000202A +:10EB500085B000000400002085B000000400002003 +:10EB600085B00000C394004609B0000004000020F6 +:10EB700085B000000400002085B0000004000020E3 +:10EB800085B000000400002085B00000C594004A54 +:10EB900009B000000400002085B00000040000203F +:10EBA00085B000000400002085B0000004000020B3 +:10EBB00085B000001D92004709B00000040000204D +:10EBC00085B00000C594004A09B000000400002090 +:10EBD00085B000000400002085B000007D94004650 +:10EBE00009B000000400002085B0000004000020EF +:10EBF00085B000000400002085B000007D94004630 +:10EC000009B000000400002085B0000004000020CE +:10EC100085B000000400002085B000000400002042 +:10EC200085B000001D92004709B0000004000020DC +:10EC300085B000007D94004609B00000040000206B +:10EC400085B000000400002085B000007D940046DF +:10EC500009B000000400002085B00000040000207E +:10EC600085B000000400002085B0000004000020F2 +:10EC700085B00000CB94004209B0000004000020E1 +:10EC800085B000000400002085B0000004000020D2 +:10EC900085B000000400002085B0000004000020C2 +:10ECA00085B000000400002085B000006F94004A89 +:10ECB00009B000000400002085B00000040000201E +:10ECC00085B000000400002085B000000400002092 +:10ECD00085B000000400002085B000000400002082 +:10ECE00085B000000400002085B00000CB940046F1 +:10ECF00009B000000400002085B000002C910047FE +:10ED000009B000002C91004809B000000400002068 +:10ED100085B000000400002085B000000400002041 +:10ED200085B000006F94004A09B000000400002084 +:10ED300085B000000400002085B000000400002021 +:10ED400085B000003691004D09B00000040000209D +:10ED500085B000000400002085B000000400002001 +:10ED600085B000000400002085B0000004000020F1 +:10ED700085B000000400002085B0000004000020E1 +:10ED800085B000000400002085B0000004000020D1 +:10ED900085B000000400002085B0000004000020C1 +:10EDA00085B000000400002085B0000004000020B1 +:10EDB00085B000000400002085B0000004000020A1 +:10EDC00085B000000400002085B000000400002091 +:10EDD00085B000003691004D09B000002C9100472D +:10EDE00009B000002C91004809B000000400002088 +:10EDF00085B000000400002085B000000400002061 +:10EE000085B000000400002085B000000400002050 +:10EE100085B0000007002E4B19900100108A0004F5 +:10EE2000E6B10000C08D2242197C0000C597003A6F +:10EE300081300100C08D004081B20000C08D2242AF +:10EE4000197C0000FF1F000F1E8C01003797004047 +:10EE500081320100D08D9C0F803200000000005CE8 +:10EE60001F8001000080001042C90100D08D2240A7 +:10EE7000E36D00000000004561B10100400000109A +:10EE800062DD0100CD8DA840813200001B84008826 +:10EE90001CB000001986220280320000D18D424051 +:10EEA00081320000000000449393010000001A0228 +:10EEB000689701001986004005B0000005002E4B40 +:10EEC00019900100108A0004E6B100000000004023 +:10EED00087B00100000000408DB0010000800003F9 +:10EEE00042C90100400000A144C90100000000F037 +:10EEF000E0B101005599000607400100000000063E +:10EF000007D00100D4002E5C1F9001000000000714 +:10EF1000F0B101000C80000342C90100000000F0C4 +:10EF2000F0B101000000004081B20100000000FECD +:10EF300096B00100000000FE96C00100000000F045 +:10EF4000F0B101000000004081B20100000000FEAD +:10EF500096C00100000000FE96C00100000000F015 +:10EF6000F0B101000000004081B20100000000FA91 +:10EF700096C00100000000FE96C001000030004B6A +:10EF8000948801000000004695F001000000004A4E +:10EF900096C001005E012E34978401000200004BF0 +:10EFA000E4E5010064012040E1B10100090000072F +:10EFB00086E4010000002EA787C0010010000010A9 +:10EFC00048C9010010000040F199010058010043B8 +:10EFD000F0C9010058010005E0C90100000000442B +:10EFE00061B10100A00000A462DD0100FA8DA8401B +:10EFF000813200000000000548B101001A00004005 +:10F000009798010008002E4095B00100028E204B19 +:10F01000946C000000000040F1B10100FF8D004140 +:10F0200095C000001080001042C90100098E2240E6 +:10F03000E36D00000000004461B1010040000010D9 +:10F0400062DD0100058EA840813200001B8400882B +:10F050001CB000000000000548B10100C597004049 +:10F0600081300100D58D004081B200000C8000038A +:10F0700042C90100000000F886B00100000000F85D +:10F0800088B001000E8E424081320000118EA24CE9 +:10F09000FD7F0000128E004CFD930000138E20F0C7 +:10F0A000566F0000000000F056B3010000001A4047 +:10F0B00081B201000080001044C9010064000040DA +:10F0C000F199010070000005F0C901000000004343 +:10F0D000F0B101000000004761B101002000001004 +:10F0E00062DD0100198EA844E0310000100000101C +:10F0F0008CC801000080004644C901004000004067 +:10F10000F199010068010005F0C9010064000043A5 +:10F11000F0C901000000004761B101000000004695 +:10F1200062B10100218EA844E03100001B840088F8 +:10F130001CB000000900000786E4010038002EA77B +:10F1400087C001008B002D0548B10100298E2243A4 +:10F15000E77D00000000004445C101002C8E2244E0 +:10F16000E77D00000000004C45C101000000004A9E +:10F1700019900100680120A2E4B10100880000405C +:10F1800043990100308E230BE56D00000000004123 +:10F19000199001000080001044C901005000004097 +:10F1A000F199010058010043F0C901005801000520 +:10F1B000E0C901000000004461B10100000000103E +:10F1C00062B10100358EA840813200001B840088A6 +:10F1D0001CB000005C002E0548B101000080000357 +:10F1E00042C90100000060F096B00100C5970041DF +:10F1F00081300100D58D004081B20000408EA249CF +:10F20000197C00008600004047990100448E0040B0 +:10F21000E5B1000086002F4919800100448EA2F25A +:10F22000803200008B00004047990100000000423E +:10F23000E7910100478EA246197C0000A000004023 +:10F24000479901004B8E0040E5B10000A0002F4619 +:10F25000198001004B8EA2F2803200008B0000402A +:10F260004799010000000041E7910100A80000401B +:10F270004399010034002DF024B00100000000FB90 +:10F280000CB00100000000FB10B00100000000FB0A +:10F2900012B001000F0000F316880100040000F313 +:10F2A00014F40100768E2640813200005E8E220A20 +:10F2B000166C000058003D4313E00100000000F808 +:10F2C00082B00100040022F084300000FD9800406C +:10F2D000813201001B8400881CB000000000000582 +:10F2E00048B101000000004113C001005D8EA04341 +:10F2F000136C00000000004013B00100538E004169 +:10F3000015D00000768E220A8032000058003D435E +:10F3100013E00100000000F882B00100040022F0B8 +:10F3200084300000FD980040813201004000204000 +:10F33000E1B101001B8400881CB000000000000542 +:10F3400048B10100768E22411550000000000041B6 +:10F3500011C001006A8EA043116C00000000004043 +:10F3600011B0010058003D4311E00100000000F819 +:10F3700036B00100040022F0003000000000005010 +:10F3800083B0010004980047613101001B840088AC +:10F390001CB00000749500054831010000000045D4 +:10F3A00061B101004000001062DD0100728EA840D2 +:10F3B000813200001B8400881CB00000668E0005AE +:10F3C00048B1000037002040E7B1010036980051F5 +:10F3D00081300100D58D004081B2000034002E4103 +:10F3E000F5B1010000110040E59901007E8E004852 +:10F3F0001990000034002E41F5B1010000110040C9 +:10F40000E59901000080000342C90100000000F8F6 +:10F4100094B00100838E2245237C0000B0002FF0C1 +:10F420008CB00100000060F08CC001009000004032 +:10F430004399010035002DF08CB0010058003E4387 +:10F44000E7E10100888E2248197C0000000000419D +:10F450008DC001000000680A8CC0010038002A4AF3 +:10F46000E0B1010028000000E0C901003C00201BC1 +:10F47000E0B101001080000342C90100000000F863 +:10F4800038B00100000000F826B00100040022F8A6 +:10F4900002300000968E2301146C0000000000F87A +:10F4A00080B00100000000F882B001004C0020F0A4 +:10F4B000E4B1010044002040E0B1010048002041D7 +:10F4C000E0B10100A8002D1032B00100399900F020 +:10F4D000243001009F8EA244816C00009D8E224149 +:10F4E000197C0000A09600403B300100C38EA208AA +:10F4F0003C3000009F8E004081B20000DD9500404E +:10F5000081320100C38EA2083C3000005000201C54 +:10F51000E0B1010054002013E0B101004E002001D1 +:10F52000E4B101004000200AE0B101003698005F1C +:10F5300081300100D58D004081B2000037000040CD +:10F54000479901007F9600F3943001007E8E224A95 +:10F5500080320000AB8E004081B2000037000040D6 +:10F56000479901007F9600F39430010058003E4314 +:10F5700097E001000000001BF0B101001F006000D7 +:10F58000008C0100D58D85118032000004800003BD +:10F5900042C90100B0002FF08CB00100000060F003 +:10F5A0008CC001003698005F81300100D58D00408D +:10F5B00081B20000B58E004919800000BA8E224148 +:10F5C000197C0000A09600403B300100BE8EA208CE +:10F5D0003C3000003698005F81300100D58D00403E +:10F5E00081B20000DD95004081320100BE8EA2088C +:10F5F0003C3000003698005F81300100D58D00401E +:10F6000081B2000050002D1032B0010054002DF0E6 +:10F6100038B001004E002DF026B0010040002DF260 +:10F6200002B00100000000F014B001003000001032 +:10F630008CC801000080004644C9010068012D44C7 +:10F6400061B10100100068F280C8010000000008EC +:10F65000F0B1010058010005E0C901000000000BF5 +:10F6600037B001000000004036D001005C012E40A0 +:10F6700010C001000000000680C001000000005220 +:10F6800081D00100D18E2094816C0000CB97009432 +:10F69000E5310100D28E004081B20000CB970040DE +:10F6A000E43101002000004662DD0100D28EA84056 +:10F6B000233000000E00000F1E8C0100E28E8241FC +:10F6C000234000002080001042C90100DC8E22404F +:10F6D000E36D00000000004661B101004000001031 +:10F6E00062DD0100D98EA840813200001B840088B1 +:10F6F0001CB000000000001048B10100119600434A +:10F70000233001000000000548B101000000001096 +:10F7100032B001000000004123B001000E00000FD4 +:10F720001E8C01000080001944C90100EA8E2241AC +:10F73000197C0000E68EA3010C6C0000E78E000629 +:10F7400004B000000000000104B00100E98E2002B6 +:10F75000366C00000000001B04B00100ED8E0002BA +:10F76000F0B10000EC8EA3010C6C0000ED8E680679 +:10F7700004B000000000680104B00100EF8E8008B2 +:10F78000F0310000000000111E9001000000001C7C +:10F79000F0B101000000004661B10100011F001935 +:10F7A00062DD0100F18EA813E0310000288F2202F3 +:10F7B0001450000044002D020CD00100188FA2024A +:10F7C00002500000FF8E225C1F7C0000208000039E +:10F7D00042C90100FE8E2240E36D00000000004798 +:10F7E00061B101004000001062DD0100FA8EA84006 +:10F7F000813200001B8400881CB00000000000055E +:10F8000048B1010044002D5C1F80010048002DF02C +:10F8100038B001004C002DF026B0010038002FF266 +:10F8200002B00100198F2201146C00000C8F2246D7 +:10F830001F7C0000000000461F80010020002D03F7 +:10F8400048B101000B8F2240E36D0000000000442E +:10F8500061B101004000001062DD0100088FA84086 +:10F86000813200001B8400881CB0000038002F0586 +:10F8700048B10100000000F894B0010038002DF0FC +:10F8800096B001000000004CE1C10100200000031F +:10F8900048C901000000224AF1B1010044000005FE +:10F8A000F0C901000000004AF0B101000000004B67 +:10F8B000E0B101000000004761B10100A00000A418 +:10F8C00062DD0100158FA85C1F100000198F000574 +:10F8D00048B100000000000238C00100238F22065A +:10F8E000803200000000005033C00100218FA202CE +:10F8F000366C000004008F0D42310000100000F84B +:10F9000010C801000000005C11800100F0070040F9 +:10F9100037980100D58E00A11AB000000000000247 +:10F9200010C00100D58E000236D000005000201C0F +:10F93000E0B1010054002013E0B101004E002001AD +:10F94000E4B101004000200AE0B101002D8F005F0A +:10F9500001B0000037002D4601B00100040000F3A3 +:10F9600080F401002C8FA043816C00000000005542 +:10F9700001B0010040002040E1B101000080001909 +:10F9800042C90100338F2240E36D000000000046B1 +:10F9900061B101004000001962DD0100308FA84014 +:10F9A000813200001B8400881CB0000011960010FA +:10F9B000483101003080001042C901003A8F2240D6 +:10F9C000E36D00000000004461B101004000001040 +:10F9D00062DD0100378FA840813200001B8400885F +:10F9E0001CB0000060012F0548B101000000000BB1 +:10F9F000E4B101000000005017F001003F8F90F2C9 +:10FA0000164000000000004117C001000000662001 +:10FA100017A40100320000A62AC00100000000F275 +:10FA20002A940100488F22491F7C000000000049F1 +:10FA30001F8001000000004005B0010000F0000C34 +:10FA4000188C01000B98004C95300100588F000075 +:10FA500092B000004F8F2240AF6F000000C0001E28 +:10FA600094DC01000000001596B001008898004069 +:10FA7000053001004E8FA240976C0000618F004757 +:10FA800019800000588F000092B000004F8F43484B +:10FA90006131000000D0001E62DD0100548F28405B +:10FAA00005300000508F2248777D0000578F0040BE +:10FAB00081B200000000001562B10100608F284093 +:10FAC00081320000548F004081B2000000001B0012 +:10FAD00092B001005D8F2241197C0000008000037C +:10FAE00042C90100E29500F8003001005A8FA2419E +:10FAF0003B500000618F004900B00000FF07001E6E +:10FB0000008C0100E295004081320100618F0049C4 +:10FB100000B0000000001B4719800100648F225FC5 +:10FB2000016C00006399004081320100B08A00003E +:10FB300080B000006B8F225C1F7C000020800003DF +:10FB400042C901006B8F2240E36D000000000047B6 +:10FB500061B101004000001062DD0100688FA84023 +:10FB6000813200001B8400881CB000006B8F4005B0 +:10FB700048310000FFFF000794890100718F85CA9A +:10FB8000943000006399185C1F0001000E00000F04 +:10FB90001E8C01007889004081B200003698180060 +:10FBA00080300100D58D0047198000000000004022 +:10FBB00019800100D58D2247197C0000DD95004099 +:10FBC00081320100788FA20880320000D58D00407C +:10FBD00081B20000CB9700400D3001009C01004035 +:10FBE00045990100FFFF000B988801008B002D5004 +:10FBF00017F001007E8F904C16400000000000417D +:10FC000017C00100808F2243E77D00000000004400 +:10FC100045C101000000662017A4010068010040F2 +:10FC2000439901005C012EF280B001003E000040CB +:10FC300080CE0100878F2440813200000000004602 +:10FC400081C00100888F0094E5B10000020062408D +:10FC50007ECD01000000005781C0010000002E1081 +:10FC600048B1010003000040F08D010000000008D1 +:10FC7000F0B1010058010005E0C901000000004496 +:10FC800061B101000000001062B101008E8FA84038 +:10FC9000813200001B8400881CB0000000000005B9 +:10FCA00048B101009A8F2240AF6F00000040000869 +:10FCB00094DC01008898004081320100988F224036 +:10FCC000976C0000E295000800300100D58D0040DF +:10FCD00081B200000000004005B00100D58D004752 +:10FCE000198000009A8F43486131000000500008DD +:10FCF00062DD0100A08F2840053000009B8F224864 +:10FD0000777D0000E2951B0800300100D58D004092 +:10FD100081B20000D58D1B471980000035000040DE +:10FD200047990100010063F384C80100A58FA04337 +:10FD3000856C00000000634085B00100A800004011 +:10FD40004399010037002FF024B00100010063F354 +:10FD500082CC0100B08FA2419E060000D58D2244C6 +:10FD600083700000360000404399010058003D4375 +:10FD7000E7E10100D58D1FF0246C00006399004875 +:10FD800081300100B08A2341836C0000B08A0047B3 +:10FD900081B0000058003D4385E00100000000F8FC +:10FDA00036B00100000000F000B001002800004063 +:10FDB0008398010004980047613101001B8400888A +:10FDC0001CB0000000002D0348B1010008002DF018 +:10FDD00094B00100000000F88EB0010090002DF0FA +:10FDE00014B001000000000548B10100848EA2405B +:10FDF0008F7C0000BE8F22478F7C0000848E0048DD +:10FE0000199000002D90004081B2000036002D5D59 +:10FE100005B4010037002DF380B00100000000F3AD +:10FE20008EB001005C003D4381E00100A8002DF090 +:10FE300094B00100000000F024B001002000001088 +:10FE400086DC01004080000344C90100E394004ABD +:10FE5000F031010036002F5C1F900100CC8FA250C2 +:10FE60008F50000034002040E1B10100D58D0040EA +:10FE700081B200000000634181C00100CF8FA04328 +:10FE8000816C00000000634081B001003700204712 +:10FE9000E6B10100D58D2247803200000400004702 +:10FEA0000CF401000000004F8F840100E48F224712 +:10FEB0000C6C000058003D4381E00100E48F1FF00E +:10FEC000246C00000000005C1F8001000080001016 +:10FED00042C90100DD8F2240E36D000000000045B3 +:10FEE00061B101004000001062DD0100DA8FA8401E +:10FEF000813200001B8400881CB00000DD8F42406E +:10FF000005300000000000449393010000001A5DDA +:10FF100069930100E28F23410D6C0000BF8F000543 +:10FF200048B100006399000548310100B08A0048DB +:10FF300081B00000D58D22408F6C00003698005FA4 +:10FF400081300100D58D004081B20000A200004048 +:10FF500043990100000000F384B00100A6002D4980 +:10FF600019900100020000F280F40100B8002D4059 +:10FF700081B20100000000F280C0010000000040DA +:10FF800082F801001900004081980100F38FA04021 +:10FF9000826C00002C01004081980100F38FA34087 +:10FFA000826C00000000004180B00100F58F204C01 +:10FFB000856C00000000004185C0010086002040E3 +:10FFC000E4B10100A2002042E6B10100D58D00405D +:10FFD00081B20000C597005081300100D58D0040EE +:10FFE00081B200000480000342C90100040022F035 +:10FFF00080300000000000408DB0010055990040A5 +:020000021000EC +:1000000087300100B0002F5C1F900100000060F0FD +:1000100080C001003698005F81300100D58D00401E +:1000200081B200000400004081B20000D58D22465C +:10003000197C0000A000004047990100010062F215 +:1000400096CC0100D58DA640813200003698004A3A +:10005000813001000B98004695300100D58D00409D +:1000600081B20000D58D2249197C00008600004035 +:1000700047990100010062F280CC0100D58DA640B5 +:10008000813200003698004A813001000B98004709 +:1000900095300100D58D004081B20000749500407C +:1000A00081320100D58D005C1F900000D58D00408D +:1000B00081B20000D58D004081B20000BA0000403E +:1000C00047990100010062F280C801001990904038 +:1000D00080320000FFFF624081980100A4000040D0 +:1000E00047990100D58D2240E56D0000D58D004176 +:1000F000E5C10000C597004D81300100D58D00405D +:1001000081B200005C00004047990100040022F029 +:100110009630000000000040E1B1010000800003C3 +:1001200044C901000000004BE0B1010000000040A4 +:100130008DB0010055990040873001008B000040D0 +:1001400047990100299080F396300000000000409C +:10015000E78101000000004719900100D58D005C87 +:100160001F9000003400004045990100010000404C +:10017000F599010000110040E5990100DD9500406E +:10018000813201003E90A20880320000370000401A +:1001900047990100000000F382B0010000006351A4 +:1001A00083D001003400004047990100010063F34F +:1001B00084CC010036909F428032000000006342F0 +:1001C00085B001000000004503F0010000000001BF +:1001D00000C001003890375C613100000000001B56 +:1001E00062B101003990A84B191000000000000016 +:1001F00062B101003B90A84081320000058A17409F +:1002000081B200000080000342C9010090002DF07F +:1002100094B00100AC002DF030B0010035002DF09D +:1002200028B0010058003E43E7E10100010000183A +:10023000F0C901000000004AE0B1010038002000D0 +:10024000E0B101003C00201BE0B101004000204073 +:10025000E1B10100000000402BB001001A980040FD +:100260000D3001000000001816C001004D90A014D0 +:10027000164400000000004117C001000E0000A25B +:1002800044C9010000000018F8B10100B0002D14AD +:10029000F8B1010010500040879801005690224AA2 +:1002A000197C00000030004386C801000030000BBC +:1002B00016C801005690A4408132000000000041A1 +:1002C00017C0010001006E4386980100519800306C +:1002D000813001005A90A041174000000000004109 +:1002E00017C001006190224A197C0000080000A29A +:1002F00044C90100CC002DABF9B10100000000ABF6 +:1003000017C001006090A0F01644000000000041FA +:1003100017C00100000064F082B0010090000040AE +:10032000459901000000604131C00100BC0000405F +:10033000439901006790060C80320000A00020F273 +:10034000E4B1010004000946191000009C010040BE +:1003500045990100FFFF000B988801008B002D508C +:1003600017F001006C90904C164000000000004116 +:1003700017C001006E902243E77D0000000000449A +:1003800045C101000000662017A40100680100407B +:10039000439901005C012EF280B001003E00004054 +:1003A00080CE01007590244081320000000000469C +:1003B00081C0010076900094E5B100000200624027 +:1003C0007ECD01000000005781C0010000002E100A +:1003D00048B1010003000040F08D0100000000085A +:1003E000F0B1010058010005E0C90100000000441F +:1003F00061B101000000001062B101007C90A840D2 +:10040000813200001B8400881CB000000000000541 +:1004100048B1010086902240AF6F00000040000804 +:1004200094DC010088980040813201008190A24054 +:10043000976C000035000040479901008A90004009 +:1004400005B000008690434861310000005000086C +:1004500062DD01008790A8400530000035001B4098 +:1004600047990100010063F384C801008D90A04307 +:10047000856C00000000634085B00100370000403B +:1004800047990100010063F382CC01008B0000401A +:100490004799010000000045E79101003698005F90 +:1004A00081300100D58D004081B20000370000404E +:1004B000479901007F9600F3943001002D90224A65 +:1004C00080320000AB8E004081B200003700004057 +:1004D000479901007F9600F3943001007B8E224AF9 +:1004E00080320000AB8E004081B200003600004038 +:1004F00043990100000000FB12B001000F0000F35F +:1005000090880100040000F30CF40100A58E22067F +:10051000906C00005C003D4313E00100A8002DF04A +:1005200094B0010037002FF024B0010036002A50AB +:10053000E7D101000000634113C00100A790A04370 +:10054000136C000000000040E7B10100E1940010CE +:10055000863001001B8400881CB00000A990420571 +:10056000483100000000004493930100A58E1A5DFD +:100570006993000036002D1086B001005C003D43F9 +:10058000E7E10100A8002DF094B0010035002FF044 +:1005900024B0010001006BFB84C80100B490A043AB +:1005A000856C000035002040E7B1010000000040EC +:1005B00081B20100010063F312C80100B790A043AB +:1005C000136C000000000040E7B101004080000310 +:1005D00044C90100E394004AF03101001B84008803 +:1005E0001CB00000BA9042054831000000000044F1 +:1005F0009393010000001A5D6993010037000040E9 +:1006000047990100110063F382CC0100A98F2241B8 +:100610009E060000350000404399010058003D430C +:10062000E7E10100000000F836B00100B38F00F0F0 +:1006300000B000005E012D0548B10100C59047F2F1 +:100640001230000000993F4213F00100CA90224787 +:10065000E77D00006B841F881CB00000C490004040 +:1006600081B2000000000047E791010000001F4236 +:10067000199001007500004061990100CC90A8B16B +:100680000C3000005C970010943001001B8400883F +:100690001CB000005E012E0548B10100C0A83D4617 +:1006A0000DE001000000004097B00100D69022400C +:1006B000E16D00000400024197400000D39000501B +:1006C00043C10000E290224B803200000000624BE8 +:1006D000129401000900000796E40100000000A741 +:1006E00097C001003000001094C801000080004A4B +:1006F0004499010000000042F1B101005E01004B8D +:10070000F0C901005E010005E0C9010000000044DD +:1007100061B101002000004A62DD0100E090A840C4 +:10072000813200000080001044C901000000005028 +:10073000F1B101000400000996E40100000068A87E +:1007400097C00100D4000005E0C90100000000448A +:1007500061B101000000001062B10100E890A84002 +:10076000813200001B8400881CB0000000993F42C9 +:1007700013F00100EC904740813200003F0000F38D +:100780009688010000000040E7B1010000001F55FD +:1007900061B101000000000662B10100F090A840C4 +:1007A00081320000F590224B803200000000004BA7 +:1007B00062B10100F390A840813200000000009770 +:1007C00013B001000000009697B00100FB902009D3 +:1007D000966C0000FB901F09962400006B84008833 +:1007E0001CB00000F690004081B20000C597005791 +:1007F00081300100C08D000548B100002E0000408E +:1008000043990100019122F380320000C597004214 +:1008100081300100058A004081B200003698005204 +:1008200081300100C08D004219800000C597003A58 +:10083000813001003698005281300100C08D0040A7 +:1008400081B200000000004005B00100DF960040CA +:1008500095300100C08D2240956C00000C91A240A3 +:100860001F7C0000E295004081320100058A0040B3 +:1008700081B200000480000342C90100000000F2C0 +:1008800002B001008A960052953001009196004B0B +:1008900002B00000058A004081B200000A990040C1 +:1008A000953001001891A208803200001891A2161C +:1008B00080320000058A2242197C00000000004BB3 +:1008C00019900100C597003A81300100058A004067 +:1008D00081B20000002300A616B001001B91831E08 +:1008E000803200000008000B16DC01000000000050 +:1008F0002AC001000E980008803001001F91005EA0 +:10090000179000002F98004361310100EF940040E0 +:100910008D300100169800071614010000800010A9 +:1009200042C9010027912240E36D0000000000430E +:1009300061B101004000001062DD01002491A84077 +:10094000813200001B8400881CB00000B797005E55 +:1009500005100100E2950040813201002B9122092F +:10096000803000003698004013300100C58D00052E +:1009700048B100000F97004081320100C08D004057 +:1009800081B200000000004A1F9001003291224312 +:100990003D7C00000000004419900100000000436D +:1009A0003D800100339100421990000014002D4554 +:1009B0001F9001008F91831E803200008F910044B0 +:1009C00019900000D4950040813201004791A2089F +:1009D000803200004791A216803200004391A2426B +:1009E000197C00000082000204DC0100A098004095 +:1009F00047990100E9890041893001004091A241F5 +:100A0000197C0000E295004081320100058A004017 +:100A100081B200008A960015943001009196004B37 +:100A200002B00000058A004081B200000F9700402C +:100A3000813201000000004B19900100C597003A77 +:100A400081300100058A004081B200004A912242B3 +:100A5000197C00000F970040813201004B9100404B +:100A600081B20000DF96004081320100779122417F +:100A7000197C0000C000001598C801007791A00BF8 +:100A8000996C00003000001080C801000080004018 +:100A90004499010000000050F1B101000000000382 +:100AA000F0B101000000004261B10100000000400F +:100AB00062B101005391A800E03100001B8400885E +:100AC0001CB000000000000548B10100C000001586 +:100AD00098C8010030002E0B99D0010000006A5028 +:100AE00099C00100C000620180CC01000C800003AD +:100AF00042C901002D002DF022B001000000004C81 +:100B000080C001000000005C23800100D4003F4150 +:100B1000E7E101000B000011E4F501002F00204780 +:100B2000E7B501006491230B816C00000000004FC9 +:100B3000E59101000000000880B001000000000BFA +:100B400003B001000000001502D001000E98000063 +:100B50002A4001000000004361B101004000001084 +:100B600062DD01006991A840813200001B84008889 +:100B70001CB00000E295000548310100C0000001F2 +:100B800080CE010075912611003000001000000099 +:100B90002AC801000000000880B001000000000128 +:100BA00080C00100C00000409998010000000001D1 +:100BB00098D001000E98004C02300100C0000040A7 +:100BC000039801007C91004081B2000030002F08A2 +:100BD00080B00100C0000015F4C90100C000000190 +:100BE000E4CD0100C0000040039801000E98000011 +:100BF0002A400100819122441F7C0000AC002F405C +:100C000013B0010000000001E0C10100B00000408D +:100C10004799010082910001E0D10000EF9400406B +:100C20008D300100806300A616B001001698000701 +:100C3000161401000080001042C901008A91224070 +:100C4000E36D00000000004361B1010040000010AE +:100C500062DD01008791A840813200001B8400887A +:100C60001CB00000B797005E051001008D912209AD +:100C7000803000003698004081320100C08D0005B0 +:100C800048B100008F91004A1F9000000000000052 +:100C900010B0010024002D1510C0010028002DF017 +:100CA00016B0010022002DF026B0010014002FF232 +:100CB0000CB0010000000001E0D1010000000010B4 +:100CC00032B001000000000B1BB0010004001F1532 +:100CD0001A5000000000004023B001000000000195 +:100CE0002AB001007197004035B000002F0020406D +:100CF000E7B10100D391A2451F7C00002400200B26 +:100D0000E0B1010028002013E0B10100220020061C +:100D1000E4B10100A991225C1F7C00000000005C8E +:100D20001F8001003080001042C90100A9912240BB +:100D3000E36D00000000004761B1010040000010B9 +:100D400062DD0100A591A840813200001B8400886B +:100D50001CB000000000000548B10100008000192F +:100D600042C90100CC912240E36D0000BA912242B9 +:100D7000197C0000379700408132010089950040BE +:100D800081320100C791224B8032000000000043F5 +:100D900061B101004000001062DD0100B091A84087 +:100DA000813200001B8400881CB00000B6912241F3 +:100DB000197C0000F895004011300100B791000542 +:100DC00048B10000E295004081320100B99122094A +:100DD0008030000036980040813201006F8400406E +:100DE00005B0000037970040813201008595004032 +:100DF000813201000000004361B101004000001099 +:100E000062DD0100BD91A840813200001B84008892 +:100E10001CB00000C3912241197C0000F8950040ED +:100E200011300100C491000548B10000E295004076 +:100E300081320100C69122098030000036980040BE +:100E4000813201006F84004005B0000000000043C3 +:100E500061B101004000001062DD0100C891A840AE +:100E6000813200001B8400881CB0000000000005D7 +:100E700048B10100CF912241197C0000F895004053 +:100E800011300100D091000548B10000E29500400A +:100E900081320100D2912209803000003698004052 +:100EA00013300100C58D004005B00000008000191E +:100EB00042C90100DA912240E36D000000000043C6 +:100EC00061B101004000001062DD0100D691A84030 +:100ED000813200001B8400881CB000000000000567 +:100EE00048B101000000004005B00100DE91224140 +:100EF000197C0000F895004011300100DF910005D9 +:100F000048B10000E29500408132010008002D0A3E +:100F100084B00100000000F082B001001400204005 +:100F2000E1B10100E491031E80320000E59100412F +:100F300087B0000021000040879801000097004022 +:100F4000813201000000005C1F900100E99122093C +:100F5000803000003698004013300100EC912244AC +:100F6000197C00003698004F8130010000000044D9 +:100F700019800100C08DA24A1F7C0000C58D004071 +:100F800081B20000BA002040E5B10100F2919C1747 +:100F900080320000CC0000404399010013990040CA +:100FA00081320100A398004013300100C0000040CE +:100FB00043990100C4002DF082B00100EE9800F0CA +:100FC00084300100E295004081320100C58D220984 +:100FD000803000003698004013300100C58D00407D +:100FE00081B200002E00004043990100FE91224092 +:100FF000E76D000032000040439901000692A240D4 +:10100000E56D0000CC960040813201002400200BE9 +:10101000E0B1010028002013E0B101002200200609 +:10102000E4B101001400200AE0B10100C58D2209DD +:10103000803000003698004013300100C58D00401C +:1010400081B20000CC9600408132010085960040BC +:101050008132010014922241197C00000000000B33 +:1010600099B0010004001F1598500000149220014F +:10107000986C00007000000348C9010000002E4673 +:101080001F90010000000050F1B1010000000003BA +:10109000F0B101000000004261B10100A00000A415 +:1010A00062DD01001192A800E0310000000000059F +:1010B00048B10100AC002F0010B001000000000199 +:1010C000E0C1010014002F1510C001000000000A4B +:1010D00080B001000000600180D0010000000047E6 +:1010E000199001009691220980320000369800097B +:1010F000803001009691004013B000000080000392 +:1011000042C90100000000F082B00100130000405D +:10111000879801000000004C43C10100009700F0D7 +:1011200084300100C08D005C1F9000002C00204026 +:10113000E7B101002D002040E7B10100C08D004261 +:1011400019800000F2960040813201000B9800489F +:10115000953001000000004561B101004000001021 +:1011600062DD01002992A840133000001B84008832 +:101170001CB000002F92000548B100002E920040E4 +:1011800013B000000000000012B001000800004091 +:101190004399010014002DF082B00100040022F0F8 +:1011A0008430000013000040879801000097004041 +:1011B000813201000000005C1F900100479200098D +:1011C00000B00000C08D8742191000008B002F472F +:1011D00019800100C08D0040E79100002F00004001 +:1011E0004799010045922247E77D0000669500403F +:1011F000E731010045922200803200004092A24077 +:101200001F7C0000E29500408132010045920040C1 +:1012100081B20000300000404399010032002DF2FD +:1012200094B001008A9600F2023001009196004BC2 +:1012300002B000000000000548B1010046920040E5 +:1012400001B000000000004005B001004C922200F7 +:10125000803200004B92A242197C0000DF960040D1 +:10126000813201004C92004081B200000F97004093 +:1012700081320100D892225C1F7C00000000005CDB +:101280001F8001000080001042C9010054922240DA +:10129000E36D00000000004561B101004000001056 +:1012A00062DD01005192A840813200001B84008859 +:1012B0001CB00000D892000548B10000D495004051 +:1012C000813201005B92A208803200005B92A2167C +:1012D00080320000C597004D81300100008200027D +:1012E00004DC0100058A004081B200007400004067 +:1012F00043990100000000F882B00100000000F0F6 +:1013000084B001000000004196B0010069922242C1 +:10131000961400000080001044C901006400684079 +:101320009798010000000041F0B101000000004268 +:10133000F0B1010070000005E0C9010000000045A7 +:1013400061B101002000001062DD01006692A8403A +:10135000813200000000005C1F9001000000004589 +:1013600061B101004000001062DD01006A92A85CDA +:101370001F0000001B8400881CB000005E012D05CA +:1013800048B101006E9247F21230000000993F42CE +:1013900013F0010073922247E77D00006B841F88E1 +:1013A0001CB000006D92004081B2000000000047B8 +:1013B000E791010004001F0996E40100008000107D +:1013C00044C9010000000044F1B10100000068A818 +:1013D00097C0010000000003E0B10100008000039D +:1013E000449901000000004461B1010000000010B8 +:1013F00062B101007B92A840E13100001B840088AB +:101400001CB0000000993F4213F001007F92470595 +:10141000483100003F0000F39688010000000040C2 +:10142000E7B1010000001F4081B201008792224B0A +:10143000803200000000005561B101000000004B47 +:1014400062B101008592A8408132000000000007CF +:1014500016B001000062000B16DC0100669500402A +:10146000813201009F922200803200001597005FB8 +:101470000110010089922240956C0000008000104C +:1014800044C9010000000050F1B101000000000358 +:10149000F0B101000000004261B101000000001045 +:1014A00062B101009192A800E03100001B84008825 +:1014B0001CB000000000000548B1010004800003DA +:1014C00042C90100000000F202B001008A960052F9 +:1014D00095300100E295004081320100899222415D +:1014E000975000000C80000342C90100000000F08A +:1014F00000B001000000005C018001009196004BEB +:1015000002B000008992000548B100001698004022 +:10151000033001001780000344C9010000F0000CF3 +:10152000968801000000634C97F0010010800003D2 +:1015300044C90100000000ABE1B10100B797005EB3 +:1015400005100100030000071AF40100070000075E +:101550001688010000B5000D46C90100A99230406F +:10156000813200000000000BE681010000B7000D91 +:1015700046C901000000000BE68101001000100FB9 +:1015800094F40100E999005F950401006B96004016 +:1015900081320100B3922250FD7F0000B19243409E +:1015A0008132000000001B4131D3010000002E05F4 +:1015B00048B1010000000040E1B10100000000401E +:1015C0000FB00100CD95004181300100058A004037 +:1015D00081B20000D495004081320100C592A2087A +:1015E00080320000C592A216803200000082000204 +:1015F00004DC01000000004503F0010000000001D0 +:1016000000C00100BE92375C613100000000001B89 +:1016100062B10100C292284081320000BF920040B6 +:1016200081B200000000000062B10100C292A84037 +:1016300081320000058A174081B200007400224008 +:10164000F1B1010000000040E1B101000B98004A37 +:1016500095300100F296005C1F1001005B92004083 +:1016600081B200002F00004047990100D692224726 +:10167000E77D000066950040E7310100D692220028 +:1016800080320000D192A2401F7C0000E295004011 +:1016900081320100D692004081B20000300000404B +:1016A0004399010032002DF294B001008A9600F2B5 +:1016B000023001009196004B02B0000000000005CE +:1016C00048B101000B98004895300100F296005C8B +:1016D0001F100100DB928742191000008B002F477A +:1016E0001980010000000040E79101003698004297 +:1016F00081300100C08D004081B20000F2960040B0 +:1017000081320100C08D005C1F900000BA002040B3 +:10171000E5B10100A398004081320100C000004003 +:1017200043990100C4002DF082B00100EE9800F052 +:1017300084300100E2950040813201003698004576 +:1017400081300100C08D2242197C0000C597003A0B +:1017500081300100C08D004081B2000004000040D3 +:1017600081B20000D495004081320100F092A208BD +:1017700080320000F092A21680320000C597004728 +:10178000803001000082000204DC0100058A004074 +:1017900081B200001080000344C9010000E100A6EE +:1017A00084B0010000000040F1B1010000000040E1 +:1017B000F1B101000000600784940100B797005E5A +:1017C00005100100C08D004081B200008A00004079 +:1017D00047990100E2950041E7410100C58D0040B5 +:1017E00081B20000CC960040813201008596004015 +:1017F00081320100000000012CB001000000001542 +:1018000010B001000000000010C0010004001F0A19 +:101810002C5000000000001032B001000700000B47 +:10182000968801000C932647972400000000004191 +:1018300097C001000C93234B0C6C00004998004B9F +:10184000043001000000005033C00100000000021D +:1018500010C001000000000216C0010000000006D8 +:1018600004B001004998004B045001000D93004062 +:1018700081B2000049980006043001001393A24889 +:101880001F7C0000119384481F100000AC00004032 +:10189000479901001393000AE0C100000000000A0C +:1018A00002B00100EF9400018C3001000000004301 +:1018B00061B101004000001062DD01001493A840F6 +:1018C000813200001B8400881CB00000000000056D +:1018D00048B101000000000210C00100219322065F +:1018E000145000003A9700451F0001000093225C4D +:1018F0001F7C00000000004761B1010040000010A3 +:1019000062DD01001D93A85C1F0000001B8400889D +:101910001CB000000093000548B100000000000B5F +:101920001BB0010008002D4085B00100000000F050 +:1019300082B001000000004005B0010000970041A6 +:10194000873001000000004561B101004000001037 +:1019500062DD01002793A840813200001B840088CB +:101960001CB000000000000548B101002D932209C1 +:10197000803000003698004013300100319322443B +:10198000197C00003698004F813001003193A24746 +:101990001F7C00000000004419800100FF070008C0 +:1019A000008C01003F93224A1F7C00003793A2164F +:1019B00002300000E2950040813201002F002040FB +:1019C000E7B10100C08D004081B200002D002D085C +:1019D0002AB001003B932242197C00000F9700407F +:1019E000813201003C93004081B20000DF9600404C +:1019F0008132010030002E002AD0010032002A1569 +:101A0000E4B10100C08D0016E4B10000529322162B +:101A100002300000000000082AB001000A990040CE +:101A2000953001004493A240116C00005393224072 +:101A30002D6C0000AC00004047990100B0002B0164 +:101A4000E0C10100002B00A616B00100000000015B +:101A5000E0D101000E980008803001004B93005E39 +:101A6000179000002F9800436131010000000043EF +:101A700061B101004000001062DD01004C93A840FC +:101A8000813200001B8400881CB0000000000005AB +:101A900048B101001698000716140100B797005EC0 +:101AA00005100100E2950040813201002F00204026 +:101AB000E7B10100C58D004081B200000000000BBD +:101AC0001BB0010004001F151A500000609320167F +:101AD0001A6C00007000000348C901000000225089 +:101AE000F1B1010000000003F0B1010000000000AE +:101AF000E0B101000000004261B10100A00000A4BB +:101B000062DD01005D93A8461F1000000000000583 +:101B100048B101000000000010B0010000000015F5 +:101B200010C001000000000A2AB001000000000AF5 +:101B30002CD00100AC002F4023B0010067938445F6 +:101B40001F1000006893000AE0C100000000000AB6 +:101B500002B001007197004035B00000008000190C +:101B600042C9010070932240E36D00000000004371 +:101B700061B101004000001062DD01006C93A840DB +:101B8000813200001B8400881CB0000000000005AA +:101B900048B101008093A2021A50000081932240B4 +:101BA0002D6C00000080001044C9010000000050AE +:101BB000F1B1010000000003F0B10100FF070008CF +:101BC000E08D01000000004261B101000000001042 +:101BD00062B101007793A840813200001B84008825 +:101BE0001CB000000000000548B101002F00204794 +:101BF000E7B501000C80000342C90100100000F0AD +:101C000010C80100F00700401B9801008193005CA0 +:101C1000118000000000000210C00100F895004093 +:101C20001F0001000000000548B101008593230D4D +:101C30002C6C0000000000401F9001008E93224693 +:101C40001F7C0000000000461F8001007080000320 +:101C500042C901008E932240E36D00000000004263 +:101C600061B101004000001062DD01008A93A840CC +:101C7000813200001B8400881CB0000000000005B9 +:101C800048B1010008002D4085B00100000000F0BF +:101C900082B001000000004005B001000097004143 +:101CA000873001000000004561B1010040000010D4 +:101CB00062DD01009393A840813200001B840088FC +:101CC0001CB000000000000548B1010099932209F2 +:101CD0008030000036980040133001009D9322446C +:101CE000197C00003698004F813001009D93A24777 +:101CF0001F7C00000000004419800100FF0700085D +:101D0000008C0100B293224A1F7C0000A393A2160C +:101D100002300000E2950040813201002F00204097 +:101D2000E7B10100C08D004081B200002D002D08F8 +:101D30002AB00100AE932242197C0000A793A2F3BF +:101D400084300000000000A585B0010000000041C3 +:101D500085D00100D4003E4185E00100AB932240D4 +:101D60001F7C00000000005A119001000B000008C9 +:101D7000E4F501000F97004081320100AF9300406D +:101D800081B20000DF9600408132010030002E0059 +:101D90002AD0010032002A15E4B10100C08D0016DE +:101DA000E4B10000B593A21602300000E2950040B5 +:101DB000813201000494004081B200002D002D0802 +:101DC0002AB00100C39322471F7C0000BF93224228 +:101DD000197C0000BA93A2F384300000000000A533 +:101DE00085B001000000004185D00100D4003E41D3 +:101DF00085E00100BE9322401F7C00000000005AD5 +:101E0000119001000B000008E4F5010058012D00BD +:101E10002AD0010060012DF010B00100000000F098 +:101E20002CB001004791004081B200000A990041A6 +:101E300095300100CB93A20880320000CB93A2160C +:101E4000803200000000004197B00100C993230DCB +:101E5000026C00000000004197C001009196004B09 +:101E600002B000000494000548B10000AC002F014E +:101E700014B00100B0002B01E0C10100002B00A64E +:101E800016B0010000000001E0D10100DB93230D3A +:101E9000026C00000080001044C9010000000050E6 +:101EA000F1B1010000000003F0B1010000000042A8 +:101EB00061B101000000001062B10100D493A800DC +:101EC000E03100001B8400881CB000000000000509 +:101ED00048B101000C80000342C90100100000F06D +:101EE00022C801000000005C238001000000000106 +:101EF00084B00100DE93230D026C00000000000D91 +:101F000002B001000000000880B00100E39322400D +:101F10001B6C00000E98000184500100EB932240DE +:101F2000856C00000000000180C0010010800010DE +:101F300046C901000000004F43810100000000423B +:101F4000F0B1010020000040F0C9010000000016BF +:101F5000F0B101000000004361B10100A00000A148 +:101F600062DD0100E993A811E0310000FA93005E00 +:101F700017900000EE93230D026C00000000000D8E +:101F800002B001000000000184D00100F393224060 +:101F90001B6C00002F98004361310100FA9322402E +:101FA000856C00000000000112C0010010800010CC +:101FB00046C901000000004F4381010000000042BB +:101FC000F0B1010000000009F0B1010000000018AC +:101FD000F0B10100A00000A162DD0100F893A8119A +:101FE000E03100000000004361B10100400000103A +:101FF00062DD0100FB93A80A023000001B84008808 +:102000001CB00000E2950005483101000294230D48 +:10201000026C0000FF070011008C0100E2950040F7 +:10202000813201001698000716140100B797005E70 +:10203000051001002F002040E7B10100C58D0040D0 +:1020400081B200000080000342C90100000000F8D6 +:1020500082B00100000000F88CB00100000000F028 +:102060008EB00100C996004013300100000000400E +:1020700085B001000097004187300100859600403F +:10208000813201000080001042C9010015942240F5 +:10209000E36D00000000004561B101004000001048 +:1020A00062DD01001194A840813200001B84008889 +:1020B0001CB000000000000548B10100179422097F +:1020C0008030000036980040133001000000000B03 +:1020D0001BB00100000000151AD001001E94A2419F +:1020E000197C00000A99004095300100000000169C +:1020F00080B201002794270880320000449300003A +:102100002AC000000A990041953001000000001625 +:1021100080B201002294270880320000CB93000097 +:102120002AC000000000004197B001002594230D53 +:10213000026C00000000004197C001009196004B26 +:1021400002B000000000000548B10100C08D22422D +:10215000197C0000C597003A81300100C08D004015 +:1021600081B200002B94004A1F9000000A960000E4 +:10217000103001000000001510C001000000001028 +:1021800032B001000700000B968801003994264701 +:10219000972400000000004197C001003994234BB0 +:1021A0000C6C00004998004B043001000000005006 +:1021B00033C001000000000210C001000000000256 +:1021C00016C001000000000604B001004998004B51 +:1021D000045001003A94004081B200004998000682 +:1021E000043001003F94A2441F7C00000000000B5B +:1021F0001BB001000000000A2CD001000000000A02 +:1022000002B00100EF9400018C3001000080001941 +:1022100042C9010046942240E36D000000000043E3 +:1022200061B101004000001062DD01004294A8404D +:10223000813200001B8400881CB0000000000005F3 +:1022400048B101000000000210C001004F942206B6 +:10225000145000003A9700451F0001002D94225CA5 +:102260001F7C00000000004761B101004000001029 +:1022700062DD01004B94A85C1F0000001B840088F5 +:102280001CB000002D94000548B1000008002D404E +:1022900085B00100000000F082B0010000000040A5 +:1022A00005B00100009700418730010000000045A3 +:1022B00061B101004000001062DD01005494A840AB +:1022C000813200001B8400881CB000000000000563 +:1022D00048B101005A94220980300000369800402D +:1022E000133001005D942244197C00003698004FA1 +:1022F000813001000000004419800100FF07000840 +:10230000008C01006B94224A1F7C00006394A2168B +:1023100002300000E2950040813201002F00204091 +:10232000E7B10100C08D004081B200002D002D08F2 +:102330002AB0010067942242197C00000F970040E8 +:10234000813201006894004081B20000DF960040B5 +:102350008132010030002E002AD0010032002A15FF +:10236000E4B10100C08D0016E4B100004093A21654 +:1023700002300000E2950040813201002F00204031 +:10238000E7B10100C58D004081B200000A96004A05 +:102390001F1001005593001032B000008A00204049 +:1023A000E7B101007594A241197C0000E29500405C +:1023B000813201007894004081B200008A960015B5 +:1023C000943001009196004B02B00000000000051F +:1023D00048B101007A942242197C0000C597003A66 +:1023E000813001003698004581300100C08D0040E9 +:1023F00081B20000069200451F900000CC9600407C +:102400008132010085960040813201005593000120 +:102410002CB00000D4950040813201008D94A208B8 +:10242000803200008D94A2168032000000820002EB +:1024300004DC01000000004503F001000000000181 +:1024400000C001008694375C613100000000001B71 +:1024500062B101008A9428408132000087940040D4 +:1024600081B200000000000062B101008A94A8401F +:1024700081320000058A174081B20000580120080F +:10248000E0B1010060012016E0B10100CC960047E8 +:102490001F10010085960040813201005593000114 +:1024A0002CB00000D49500471F100100A094A20892 +:1024B00080320000A094A216803200009C94A242B8 +:1024C000197C00000082000204DC0100A09800409A +:1024D00047990100E9890041893001008A96001579 +:1024E000943001009196004B02B00000058A004034 +:1024F00081B200000F970040813201000000004BC4 +:1025000019900100C597003A81300100058A00400A +:1025100081B2000058012008E0B1010060012016DE +:10252000E0B101000A9600103230010055930040DE +:1025300013B00000D495004081320100B194A2088C +:1025400080320000B194A2168032000000820002A6 +:1025500004DC01000000004503F001000000000160 +:1025600000C00100AA94375C613100000000001B2C +:1025700062B10100AE94284081320000AB9400406B +:1025800081B200000000000062B10100AE94A840DA +:1025900081320000058A174081B2000000800003EC +:1025A00042C90100000000F882B00100000000F8FC +:1025B0008CB00100000000F08EB00100C996004010 +:1025C000133001000000004085B001000097004179 +:1025D00087300100859600408132010000800010A4 +:1025E00042C90100C0942240E36D00000000004594 +:1025F00061B101004000001062DD0100BC94A84000 +:10260000813200001B8400881CB00000000000051F +:1026100048B10100479122098030000036980040FF +:10262000133001004791004081B2000014002D4595 +:102630001F9001008F91004419900000C894A2419E +:10264000197C00000000004A1F900100FA9200402F +:1026500081B20000CC96004A1F1001008596004010 +:1026600081320100559300012CB000000A96004011 +:10267000813201005593001032B0000006920045EF +:102680001F9000000000004137C30100000000411E +:1026900033C301003600000102CC01000000D2402B +:1026A00081B20000D49485178032000000009F485A +:1026B00003D00000D6949C178032000000009F4C8D +:1026C00003D000000000800134C3010002002D117E +:1026D00010C10000DB94004043C10000DB940050B7 +:1026E00043C10000200000A142C90100DF94224044 +:1026F000E56D00000400A240E57D00000000004000 +:1027000023B00100000080491F9001000000A24199 +:1027100023D00000DB94005043D100004080000330 +:1027200044C901000000004AF0B10100000000406F +:10273000F1B1010000000012F0B10100E695004186 +:10274000E13101000080004344C901001000004055 +:10275000F199010000000048F0B1010000000049BB +:10276000F0B1010040000003E0C901000000004595 +:1027700061B101000000004362B101000000A84007 +:1027800081B20000EC94004081B20000BA00204009 +:10279000E5B10100B0002F018CD00100000000461F +:1027A000E0C10100AC002F4013B00100CC002D01AE +:1027B000E0C10100F6949C1780320000139900409C +:1027C00081320100F8942247197C00000000005F6C +:1027D00013900100A398004719100100C0002D4478 +:1027E0001F900100C4002DF082B00100EE9800F0AF +:1027F00084B0000090002D0548B101000D95A24B5A +:102800001F7C00006095A24C1F7C00000D951F1CD2 +:10281000E06D00001095A20180320000A8002D4656 +:102820008FB0010006951F1CE06D0000B400004051 +:1028300043990100089522F03A6C00005D951FF065 +:102840003A6C00000000A24080B200000000804FFF +:102850008FB001008A000040439901005E9520423C +:10286000E76D00000C952240803200000000805986 +:102870008FB00100000080588FB001000F952240FA +:10288000803200000000805C8FB001000000805B9F +:102890008FB00100AC00004043990100B0002DF062 +:1028A00084B001001495A242246C00001D9523F011 +:1028B000026C00001A95A2F0803200005F95A242DF +:1028C000246C00005F95A241036C00001995A240A2 +:1028D00080320000000080518FB001000000805263 +:1028E0008FB001005F951F12845000005F95A0011A +:1028F000846C00000D95004081B200008B00004008 +:10290000439901004895A246E77D0000140000406D +:10291000439901003A9522F0143000002695200AD0 +:10292000026C00003795031E803200002595A240FE +:1029300080320000000080448FB001000000804918 +:102940008FB001002B95220A026C00002E95A24147 +:10295000197C00002A95A2408032000000008055BA +:102960008FB00100000080568FB001002D95A2406D +:1029700080320000000080438FB0010000008048DA +:102980008FB001000000000182B001000000000AC9 +:1029900082D0010034952091836C00003395A240D1 +:1029A00080320000260080408F9801002700804080 +:1029B0008F9801003695A240803200001F008040B1 +:1029C0008F980100200080408F9801003995A24027 +:1029D00080320000220080408F9801002300804058 +:1029E0008F98010088002D448FB001004395A241CB +:1029F000197C00004095A2433D7C00004095A2F266 +:102A0000026C00000000A24080B20000000080497B +:102A10008FB001004295A240803200000000804348 +:102A20008FB00100000080488FB001004095A09158 +:102A3000036C00003E9522433D7C00004795A24078 +:102A400080320000280080408F98010029008040DB +:102A50008F98010014000040439901005195A2F0A5 +:102A60001430000088002D448FB001004E95A2F272 +:102A7000026C00000000A24080B20000000080490B +:102A80008FB0010040952241197C00003E952091B5 +:102A9000036C00004095004081B200005595200A6B +:102AA000026C00005495A240803200000000804477 +:102AB0008FB00100000080498FB001005A95220AB2 +:102AC000026C00002E95A241197C00005995A2408D +:102AD00080320000000080558FB001000000805659 +:102AE0008FB001005C95A24080320000000080435E +:102AF0008FB00100000080488FB001006295004354 +:102B000095B000006295004195B0000062950042CA +:102B100095B000006295004495B000006295004CAD +:102B200095B000000B980040813201006595A240ED +:102B3000803200000000804B8FB001000000804C0C +:102B40008FB001002D000040439901002E002FF3AB +:102B500084B001006A95A2F3963000000000804026 +:102B600001B001002D002A41E7D10100D4003D4110 +:102B700085E001000B0000F200E401007095225A8C +:102B8000017C0000000000401F9001007195005A78 +:102B900001800000000000401F8001000000634130 +:102BA00085C001000000A0A5856C01000000E34085 +:102BB00085B001000C80000342C9010012000040F2 +:102BC00087980100559900F08CB000007E95224056 +:102BD0000F6C000000002F0548B101007B95A24B4F +:102BE000197C00007C9522F0186C00000000604BFE +:102BF0001990010048960007103001006F840040D2 +:102C000005B000008095225A1F7C0000CD95004041 +:102C1000813001006F84004005B0000000002F05E6 +:102C200048B101000000604B199001004896000770 +:102C3000103001006F84004005B0000000002F0537 +:102C400048B101000000604B199001004896000750 +:102C5000103001000000804005B00100899533402C +:102C6000813200008C95A1AD952000009A9513400B +:102C700081B200000000134A5A8301003000394538 +:102C800095E001001F00000F5ED801000000005A0F +:102C90005F9001000000004045B00100000000040A +:102CA00048B00100000000054AB001000000000C1F +:102CB00058B00100000000074EB001001886004027 +:102CC0005D9801000000005861B101000000004A59 +:102CD00062B101000000A84197B000009795004044 +:102CE00081B200000000804097B001009B9544072E +:102CF00096300000FFFF004B8489010000001CC2D9 +:102D000024B00100A595A245257C00009F953120A7 +:102D100085300000A6952212487F000067981112A6 +:102D2000480301001000001296E401000000004B6F +:102D30001E9401000000805A1F900100A5953140AB +:102D400081320000000000B424B00100A6952212D8 +:102D5000487F0000679800408132010000002F0585 +:102D600048B10100B3950BF084300000000011124F +:102D700048830100B0952250857000005E0100403C +:102D800043990100679700F296300100E99900121B +:102D9000943001000000005A1F9001001000001242 +:102DA00096E401000000804B1E94010010000042D8 +:102DB00010F4010000B73F4311F0010007000008C4 +:102DC0008A880100B69530A10C300000B9952245E3 +:102DD000E67D0000A695104081B2000000002A4563 +:102DE000E69101000000101248830100000011402C +:102DF00081B201000000604B858001005E0100404F +:102E000043990100679700F296300100008000109E +:102E100044C90100D8000040819801002E002D0512 +:102E200048B10100C4952240E76D000080000040D9 +:102E300080C8010000000040F0B101000900000856 +:102E400086E40100000068A787C00100000000447C +:102E500061B101000000001062B10100C895A80531 +:102E6000E03100001000001296E401000014004B55 +:102E700096DC01000000804B1E9401001000000F42 +:102E800084F401001F00004284880100D195224093 +:102E900080320000D295004268B10000000000427C +:102EA0006AB10100D295315A1F0000000000914222 +:102EB00048930100D4953540813200006D000040F8 +:102EC00061990100DA9528B12C300000D595224D8A +:102ED000757D0000000000402DB00100000095400D +:102EE00011B001006D00004061990100DA95A8B1B0 +:102EF000103000000000954081B201007F000040CA +:102F000061990100E19528B110300000DD959FBA6C +:102F1000803200000000804011B0010000008024D9 +:102F2000118401000000005F61B101000010000089 +:102F300062DD01000000A84081B20000E39500407E +:102F400081B20000AC94004047990100E7953240FF +:102F500081320000ED9522F896300000000000F864 +:102F600090B00100000000F092B001000100004BA1 +:102F7000F0CD010020009248E0C901006C00004043 +:102F800061990100F19528B192300000ED95224C35 +:102F9000757D00000400124091B000006C000040FC +:102FA00061990100F195A8B190300000FF00004840 +:102FB000968801000000004B90D001000100004BFA +:102FC000F0CD010020000048F0C901000000924946 +:102FD000E0B101000C002D1048B10100FF0700080E +:102FE000828C0100FF0700F0008C01000000A2416C +:102FF00000EC0000FE95221A006C0000E295000033 +:10300000343001000000005049C10100FA95A2418E +:10301000235000000000804081B201000C002D1000 +:1030200048B10100FF070015828C0100FF0700F086 +:10303000008C01000000A24100EC00000796220D68 +:10304000006C0000E29500001A3001000000005002 +:1030500049C101000396A2412350000000008040B6 +:1030600081B201000C96831E8032000000000044F3 +:103070001990010024002D012CB0010028002DF032 +:1030800016B0010022002DF026B0010014002FF22E +:103090000CB0010000008040E1B1010002002D11E0 +:1030A00010C100001596004043C100001596005065 +:1030B00043C10000200000A142C901001A9622402D +:1030C000F56D00000000004243D101000400A24061 +:1030D000E57D00000000004023B0010000008049B1 +:1030E0001F9001001D9622111E7C00001F96A0F06B +:1030F000164000001F96004117C000001F96A0F464 +:10310000164000000000004117C001000000A2416D +:1031100023D000001596005243D1000000B5000DE9 +:1031200042C9010022963047170400002596A20BE1 +:10313000E67D00000000904281B0010000B7000D64 +:1031400046C901002996A20BE67D00000000000B95 +:10315000E69101000000904181B0010000001040A4 +:1031600081B201002A96400796300000F399004092 +:10317000813201003496A245957C000001973F41C1 +:1031800095E00100000000F396B001000000004E41 +:10319000E6B1010040973E4097E001000000004E7C +:1031A000E6B1010040973E409DE001004796003B9C +:1031B000E7B1000034963040813200003E96A20B09 +:1031C000E67D000000B5000D46C901003A96A20B4D +:1031D000E67D00000000104081B20100000098422E +:1031E00081B0010000B7000D46C901000000000BCE +:1031F000E69101000000104081B2010000009841FA +:1032000081B00100040021A2952000000000104AB6 +:103210004483010000973E4195E001000000004E0C +:10322000F6B101000000004EE6B1010040973E40BB +:103230009DE001000000003BE7B101000000004AF2 +:1032400090B10100FFFF0007928901000000984043 +:1032500081B001000300000886F4010000B70043BC +:1032600046C9010007000008828801004B9640080B +:1032700096300000F39900408132010057962245B4 +:10328000957C00005396225A1F7C00001000000F0E +:1032900096F401005096315F970400000000114B36 +:1032A000489301000000004B6AB101005396304082 +:1032B0008132000000000041E68101000000104062 +:1032C00081B201000000984081B2010000973F41A7 +:1032D00095E00100000000F396B0010040973D40EA +:1032E00097E00100000063F388B001005F96A23B05 +:1032F000896C00000000004A90B10100010000A6A6 +:1033000092B101006096184A4493000000001840F2 +:1033100081B201003000394597E001006596225ADC +:103320001F7C00001F04000F98D801000000004C13 +:103330005E940100679600054AB000001F0400A7D4 +:103340005E840100000000404BB001000000005806 +:1033500061B101000000004B62B101000000A84013 +:1033600081B200006896004081B200006B96400771 +:1033700096300000F3990040813201006F9622459B +:10338000957C00000000984081B20100F199004A4C +:103390004413010000973F4195E00100000000F355 +:1033A00096B0010040973D4097E00100000063F3B4 +:1033B00088B001003000384597E001000000005F50 +:1033C0000F9001000000005861B101000000004BA7 +:1033D00062B101007796A840813200007096A23B4E +:1033E000896C0000300038459DE0010000009840E5 +:1033F00081B20100E9990012943001004896005A08 +:103400001F0001000000805A1F9001001100004AB7 +:10341000E6C9010034002F4F95840100000000F33D +:1034200096B001000100634B84C801000000A04376 +:10343000856C01000000E34085B0010030002D44A0 +:103440001F90010032002DF22AB00100040022F288 +:103450000230000066950010323001003200A040BA +:10346000E5B101000000004097B00100F007004006 +:10347000999801000000004A02C0010000000050BD +:1034800003D001000000004197C001000000A34CE0 +:1034900002D000008E96004081B20000000000A81B +:1034A00036B001009E9622410350000000800010BB +:1034B00044C9010000000050F1B101007000000398 +:1034C000F0C901000000004261B1010000000010DD +:1034D00062B101009796A800E03100001B840088CB +:1034E0001CB00000E2950040813201007C800003A6 +:1034F00042C90100000000F000B001009296005C9B +:1035000001800000E2950040813201000000001BB4 +:1035100010B1000068012D0682B00100000000F229 +:1035200082C001000080000346C90100DD95004013 +:1035300081320100C5962240116C0000000068082D +:1035400038960100F007004182CC0100A396AA4101 +:103550003B400000000000F810B001000000005CDB +:10356000118001000100001D04CC0100C496264614 +:10357000233000000800000312C80100640120F09D +:10358000E0B10100C3962241055000002000000375 +:1035900048C901000C0000F886C801000000224460 +:1035A000F1B1010000000043F0B10100000000098A +:1035B000E0B101000000004461B10100A00000A4DE +:1035C00062DD0100B596A8461F100000C296224198 +:1035D00005500000C096A24123500000000000A149 +:1035E0001AB001000000004461B101004000001069 +:1035F00062DD0100BB96A846233000001B840088D2 +:103600001CB000001000000348C901000000000DBC +:1036100042B101000000004413C00100B096005008 +:1036200049C100000000000548B10100048000030A +:103630001AC801000000804081B20100C4962240F7 +:103640003B6C0000000000F800B00100E295005C57 +:1036500001000100C59600413BD0000000008D47ED +:1036600080320100B0002F5F13B001000000E0F0D5 +:103670008CC001000080000342C90100000000F876 +:1036800094B00100000000F88CB00100D1968CF8D5 +:103690008E3000000000004419900100040022F860 +:1036A00014300000000000F816B00100000000F81F +:1036B00026B0010008002EF80CB001000C002A4AC8 +:1036C000E0B1010028000000E0C901001000201B4B +:1036D000E0B10100DE96200A0C6C0000000000F84A +:1036E00094B00100000000F896B00100200020F026 +:1036F000E4B101001800204AE0B101001C00204B99 +:10370000E0B10100C996004013B000002C002D422A +:10371000199001002E002FF382B00100000000F389 +:1037200096B00100E496A2A5976C000000008041CD +:1037300095B00100E796A240976C000000000040A1 +:1037400083B001002D002040E7B10100000063417B +:1037500097C00100D4003E4183E001000000004119 +:1037600083C00100EC96A0A5836C0000000000401F +:1037700083B001002C002041E6B10100F196224007 +:103780001F7C00000004000098DC01000B00004CCE +:10379000E4F50100000080401F8001000B00800064 +:1037A000E4F50100E6950040813201000480000349 +:1037B00044C9010000000040F1B1010000000040D8 +:1037C000F1B101000000604187B0010000800010ED +:1037D00044C9010000000050F1B1010000000048A0 +:1037E000F0B1010000000049F0B101000000000349 +:1037F000E0B101000000004561B1010020000010AF +:1038000062DD01000000A85D05900000FD9600400B +:1038100081B20000E6950040813201000080000383 +:1038200044C9010000000041F0B101000000004265 +:10383000F0B1010000000040F1B1010000000043C0 +:10384000F0B101000080001044C9010000000050E8 +:10385000F1B1010000000048F0B101000000004992 +:10386000F0B1010000000003E0B1010000000045DC +:1038700061B101002000001062DD01000000A85DC0 +:10388000059000000C97004081B200002D00004020 +:10389000439901002E002FF384B00100010063F36F +:1038A00096C8010014979F4185500000010000A5B3 +:1038B00085CC01002D00A042E6B101005E012D0083 +:1038C00080B001001997524381600000020000F2AD +:1038D00082F401001A970041809400000000005F0C +:1038E000819001000000005E61B101000000004015 +:1038F00062B101000000A84095B000001B979EBB7C +:10390000803200002097A2401F7C0000E29500401A +:1039100081B200000000804195B001000400001554 +:1039200042C90100000000542BC00100000000FC4F +:1039300024B00100000000FC38B00100000000FECF +:103940003CB00100000000FE3AB0010035979C1722 +:10395000803200002A97A24A197C00000000804CA7 +:103960001F9001000C00001E98F401002997A24846 +:10397000996C00000000001542B101002997A28A4D +:10398000F16D00000C00000102CC0100000000FC01 +:103990003EB00100010000F428CC0100CC002D0550 +:1039A00048B10100349720F03E6C00000000004B4D +:1039B0001F9001000000004C2BC00100BF002D052E +:1039C00048B10100000080F33AE0010000002E4BF6 +:1039D0001990010007002A0CE4B1010000008004E6 +:1039E000E6B1010018000040439901001C002DF0D1 +:1039F00016B0010020002DF026B001000C002FF2BF +:103A00000CB001000000A20614EC00004197224512 +:103A10001F7C00000000A3062AEC0000000000F854 +:103A200094B00100000000F096B001000C002D40A1 +:103A300081B2010000002A4CE1C1010030000010F9 +:103A400048C901000A000040F19901001800000572 +:103A5000F0C901000000004AF0B101000000004B75 +:103A6000E0B101000000004761B10100A00000A426 +:103A700062DD01004B97A85C1F100000000080056C +:103A800048B1010000002E1048B10100000068019B +:103A900096B0010000000003F0B1010051974542CB +:103AA000613100000000001062B101005297A800CF +:103AB000E031000000009D4081B2010000002E10A6 +:103AC00048B101000000680196B001000000000349 +:103AD000F0B101005897454261310000200000100C +:103AE00062DD01005997A800E031000000009D4010 +:103AF00081B201003080004A44C901000000000684 +:103B0000F1B10100C0A83D460DE00100FF7F00A11A +:103B1000F08901000200000996F40100000000464F +:103B200097E00100000060A897C00100639746423B +:103B3000613100003000004A62C901006497A8406A +:103B40008132000000009E4081B2010000993F4296 +:103B500097F001006897474081320000709722F388 +:103B6000740600003F0000F3948801000000000785 +:103B7000E785010000001F5561B101000000004A07 +:103B800062B101000000A84081B200006D970040C2 +:103B900081B2000000009F4081B20100000000A837 +:103BA00036B0010080978241234000007597A244FF +:103BB0001F7C0000EF9400018C3001002080001079 +:103BC00042C901007B972240E36D000000000043E2 +:103BD00061B101004000001062DD01007897A8404B +:103BE000813200001B8400881CB0000000000041EE +:103BF00023B001000000001032B001008097224184 +:103C0000197C0000F89500432330010000000041BA +:103C100023B001008297A3150C6C00008397000667 +:103C200004B000000000001504B0010085972002D8 +:103C30001A6C00000000000D04B001000700000B2A +:103C4000968801008A9726479724000000000041CB +:103C500097C001008A97234B046C00000000004BC2 +:103C600004B001004998000548310100B4972202D0 +:103C7000145000008E97A2022A500000B497A2456B +:103C80001F7C0000909722020C50000099970002C0 +:103C900016C000009897225C1F7C00003080001046 +:103CA00042C9010098972240E36D000000000047E0 +:103CB00061B101004000001062DD01009497A8404E +:103CC000813200001B8400881CB000000000000549 +:103CD00048B101003A97005C1F000100B49722151B +:103CE000803200000000005033C00100B397A202F0 +:103CF0001A500000A59722461F7C00007080000328 +:103D000042C90100000000461F800100A597224023 +:103D1000E36D00000000004261B1010040000010AE +:103D200062DD0100A197A840813200001B84008859 +:103D30001CB000000000000548B101000C80000329 +:103D400042C90100100000F010C801002F002F5CD4 +:103D50001180010000000047E7910100F0070040DA +:103D60001B980100729720151A6C00007000000368 +:103D700048C9010000002250F1B101000000000319 +:103D8000F0B10100FF070008E08D010000000042D3 +:103D900061B10100A00000A462DD0100B097A84657 +:103DA0001F1000007297000548B1000072970002D2 +:103DB00010C00000B697A2441F7C0000EF940001E1 +:103DC0008C3001000000001B10B1000000800010CA +:103DD00044C901000C000040F199010010000008E6 +:103DE000F0C9010000000016F0B10100100000034E +:103DF000E0C901000000004561B101002000001091 +:103E000062DD01000000A85C1F900000BD9700402B +:103E100081B20000170000D0A2C901000000A2403A +:103E200027EC00000000002000B00100E2950041F6 +:103E3000A3410100C197004127D0000010000007F6 +:103E400096E401000000004B809401000000005443 +:103E500061B101000080004062DD01000000A84067 +:103E600081B20000C897004081B200001A9800405B +:103E70002B300100AC002D0616C0010090002DF083 +:103E800016C40100D097A0F01644000000000041C5 +:103E900017C001000E0000A244C9010000006CF030 +:103EA00030B00100AC002D4087B0010000006CF084 +:103EB00028B00100D997224A197C00000030004345 +:103EC00086C801000030000B16C80100D997A44035 +:103ED000813200000000004117C00100FA9722065D +:103EE00080320000E697A206146C0000E397224897 +:103EF000197C0000DE97A04117400000000000413F +:103F000017C001000000004131C0010090002018DE +:103F1000E0B101008B002D48198001008B00204585 +:103F2000E7910100E69700408790000008000043F9 +:103F300086980100E697A048174000000000004165 +:103F400017C00100B0000040439901001050004329 +:103F5000FCC9010051980030813001000000004090 +:103F6000E5B10100F197224A197C0000080000A287 +:103F700044C90100CC002DABF9B10100000000AB39 +:103F800017C00100F097A0F01644000000000041A7 +:103F900017C00100F59764F082B00000A400004053 +:103FA00047990100F597A2F280320000000000411D +:103FB000E5B101008C002018E0B101009000004044 +:103FC000459901000000600630C001000000860C29 +:103FD00080B20000BC002D4619900100A000A0F2A4 +:103FE000E4B10100B00000404399010010500043CB +:103FF000FCC9010051980030813001000000A24A44 +:1040000019FC0000080000A244C90100CC002DAB3F +:10401000F9B10100000000AB17C001000398A0F047 +:10402000164400000000004117C001000000E4F049 +:1040300082B001000080001044C90100000000416E +:10404000F0B1010000000003F0B101000000000029 +:10405000F0B101000000001062B101000000A81BD7 +:10406000E0B100000898004081B2000000F0000CB0 +:104070007E8901000000A64C956001000000804A86 +:10408000189401000080001044C9010004002201BE +:10409000F031000020000040F0C9010000000016CF +:1040A000F0B101000000004361B1010020000010E8 +:1040B00062DD01000000A815E0B100001398004087 +:1040C00081B200001080000344C901000000000616 +:1040D000F0B1010000000001F0B101000000E85F54 +:1040E0001790010070000040439901007A012EFEF4 +:1040F00092B001008B002DF616B0010020982243EB +:10410000E77D00000000004445C10100040000A656 +:104110002AB0010028006E0682C801002498224AB5 +:10412000197C00000000004245D1010000006E4CE7 +:1041300083C001000000004192C001002598423078 +:104140003D0700000000669E83B0010000001A4198 +:104150003DC301000000004192C00100060000A222 +:1041600044C901001000004998F401002E9826303F +:10417000930400002E98904C9240000000000041F3 +:1041800093C00100FFFF8049ECA9010000800010EE +:1041900044C9010004002201F031000000000009C0 +:1041A000F0B1010000000018F0B101002000001083 +:1041B00062DD01000000A815E0B100003398004066 +:1041C00081B200004098225F817C00003F98A240AD +:1041D000197C00000000004019900100000000540C +:1041E00061B101001000000796E401000000004FDB +:1041F000979401000000004B62B101003F982840F5 +:10420000813200003C98004081B200000000A221F1 +:10421000818400004398A25F816C00000000A243EB +:10422000197C0100000000431990010000000054B7 +:1042300061B101001000000796E401000000004099 +:10424000969401000000004B62B101000000A840FC +:1042500081B200004698004081B200000080001941 +:1042600044C9010004002202F03100000000000BEC +:10427000F0B1010000000013F0B1010000000043A4 +:1042800061B101002000001962DD01000000A808F2 +:10429000E0B100004E98004081B200007C002DF09B +:1042A00084B00100020000F098F401005798204CFF +:1042B000846C00008800004043990100579820F268 +:1042C000846C00000000004085B0010098002D14AF +:1042D00082B00100000000F098B00100A3002D148E +:1042E00098D001005C98204C846C00000000004CC9 +:1042F00084B00100000000F380E001005F982340DB +:10430000846C00000000004084B00100D000201444 +:10431000E0B101009800254280B0010000006EF37A +:1043200080F001000000A64282C000006598A04015 +:10433000164000000000004117C0010000009FF07F +:1043400082EC00009800A041E0B1010068980012E2 +:1043500010C90000004880400B980100C04980400F +:104360000B980100804B80400B980100404D80402D +:104370000B980100004F80400B980100C050804016 +:104380000B980100805280400B98010040548040FF +:104390000B980100005680400B980100C0578040E8 +:1043A0000B980100805980400B980100405B8040D1 +:1043B0000B980100005D80400B980100C05E8040BA +:1043C0000B980100806080400B98010040628040A3 +:1043D0000B980100006480400B980100C06580408C +:1043E0000B980100806780400B9801004069804075 +:1043F0000B980100006B80400B980100C06C80405E +:104400000B980100806E80400B9801004070804046 +:104410000B980100007280400B980100C07380402F +:104420000B980100807580400B9801004077804018 +:104430000B980100007980400B980100C07A804001 +:104440000B980100807C80400B980100407E8040EA +:104450000B98010088984357613100009498A25747 +:10446000737D00009498A240816F00000000004816 +:1044700061B101000010004A62DD01008C98A84A79 +:10448000803300009198225F957C00000000004B73 +:1044900062B101008F98A84BAC33000000001BA54F +:1044A00082B30100000000BE83C301000000804011 +:1044B00097B001000010004A62DD01009898284082 +:1044C0008132000094982257777D000000009B20E5 +:1044D00097B001000000004B62B101009898A8401D +:1044E0008132000000009B4097B0010000002E10B8 +:1044F00048B10100A8010040F19901000000000549 +:10450000F0B101000900000796E40100000060A777 +:1045100097C001000000001062B101000000A84037 +:1045200081B20000A098004081B20000A8002D1CBC +:104530008AB0010000009FF08AD000000000A24075 +:104540008BEC00008A002040E7B10100B40000407D +:1045500047990100A4002D45E0D10100AD989C17BA +:1045600080320000BE002FAB83B001001799001409 +:1045700082500100B298004081B20000B29822F24D +:10458000823000008C00004043990100B2989F1CCB +:10459000E06D0000BE0000404799010017990040FF +:1045A00081320100A800201CE0B101009C002D30E8 +:1045B00081B0010088002DF084B0010094002DF23C +:1045C00086B00100DC9823F0846C00000C000042EF +:1045D00088F40100DC982050896C0000CB98A392ED +:1045E000876C0000BB98004410C90000DC98000AEA +:1045F00087B00000DC98000987B00000DC98000854 +:1046000087B00000DC98000787B00000DC98000746 +:1046100087B00000DC98000787B00000DC98000637 +:1046200087B00000DC98000687B00000DC98000628 +:1046300087B00000DC98000687B00000DC98000618 +:1046400087B00000DC98000587B00000DC9800050A +:1046500087B00000DC98000587B00000DC980005FA +:1046600087B00000DC98000587B00000CC980044BB +:1046700010C90000DC98000F87B00000DC98000E25 +:1046800087B00000DC98000D87B00000DC98000CBB +:1046900087B00000DC98000C87B00000DC98000CAC +:1046A00087B00000DC98000C87B00000DC98000C9C +:1046B00087B00000DC98000C87B00000DC98000B8D +:1046C00087B00000DC98000B87B00000DC98000B7E +:1046D00087B00000DC98000B87B00000DC98000B6E +:1046E00087B00000DC98000B87B00000DC98000B5E +:1046F00087B00000BF002D4384C0010090002DF35F +:1047000080E00100E1982340846C00009400209D2B +:10471000E1B101000000004084B00100E598A2F082 +:10472000386C00009C002042E0B101000000005FF6 +:104730001394010000008046198001009C00204273 +:10474000E0B101003700004043990100040000F38C +:1047500080F401000F0000F382880100EB982341F0 +:10476000806C00000000005F139401000000890CC1 +:1047700080B20000BC00004043990100A000A0F2FC +:10478000E4B1010000009F4124EC0000F598A64030 +:104790008132000000009F4238EC0000F598A640EE +:1047A00081320000B400004043990100F798A3F063 +:1047B0003A6C00000000804081B20100B40000406B +:1047C00043990100FB9822F03A6C0000B400201DD0 +:1047D000E0B1010080002D5F13940100FB9823F0ED +:1047E0003A6C00008000201DE0B10100C0002012E2 +:1047F000E0B10100C400A01CE0B101000080000392 +:1048000044C9010000000042E0B101001200004074 +:104810008798010004999F41246C0000000000412A +:104820008CB00100000000128CD0010005990041FD +:1048300024B00000000000408DB0010055990040F8 +:10484000813201000000004561B10100400000100C +:1048500062DD01000000A84081B20000079900401D +:1048600081B20000D49500408132010000000016A2 +:1048700080B201000000A708803201000F99A24019 +:10488000956C0000E295004081320100008200A694 +:1048900004B00100000000402DB00100A0982F409E +:1048A00011B00100E989004189B0000000009FF8C3 +:1048B0003EEC000000009F12E0ED0000C80020ABBD +:1048C000E1B10100CC00A01FE0B101001999A35F84 +:1048D000E76D000000000041E7C10100A6000040B4 +:1048E000479901002D9922F2863000000300004311 +:1048F00084F401000100004180CC0100B8002D4289 +:1049000080D001000000624086C0010021991F4351 +:10491000803200002299A240876C000000006241B2 +:1049200087B0010026999F408032000000000040BF +:1049300085B001000000004084D00100000000426A +:1049400080B00100000000F288B0010002000044C5 +:1049500084F40100B8002E4280D0010000006240C3 +:1049600088C001002C991F44803200003099A24079 +:10497000896C00003099624189B0000003006241F7 +:1049800086E40100B8000040459901000100624141 +:1049900088E40100A4002040E5B10100A20020400D +:1049A000E7B10100BC002E4387F001000000004485 +:1049B00086C0010036992043876C000000008043C8 +:1049C000E5B101004001004380CE01000000A44396 +:1049D000E43101004001E2408798010088002D4445 +:1049E00081B0010090002DF22EB001009C002DF04E +:1049F00086B0010090002DF082B00100BA002DF0C9 +:104A000098B001004399A212986C0000BC002DF2EE +:104A100098B001004399A0F2986C000000000017C4 +:104A200082B001009C002041E0B10100B4002D12D1 +:104A300086D001004699A341E06D0000479900F03F +:104A400084B000000000004184B0010080002D43CC +:104A500084D001004A999F4280320000000000404B +:104A600085B001004C99A342146C00004D99000AD6 +:104A70000CB00000000000420CB001004F99A017DC +:104A80000C6C0000000080170CB00100549922400B +:104A90000D6C00000000A00A0CEC0000010000F00A +:104AA00082F401005499A0410C6C00000000A2F0B7 +:104AB000803201000000804081B00100E695004096 +:104AC000813201000480000344C901000000004657 +:104AD000F0B1010000000040F1B1010000006041B0 +:104AE000879401000080001044C9010000000050BC +:104AF000F1B1010000000048F0B1010000000049E0 +:104B0000F0B1010000000003E0B101000000004529 +:104B100061B101002000001062DD01000000A85D0D +:104B2000059000006099004081B2000000002E4B0B +:104B30001990010005002A0CE4B101000000800476 +:104B4000E6B101006A9922491F7C00004200004042 +:104B500087980100000000491F800100C0970040B5 +:104B60008DB0000070992240AF6F0000000000156A +:104B700096B0010088980008943001006F99224097 +:104B8000976C0000C097004687B00000000080408E +:104B900087B001007099434861310000001000089F +:104BA00062DD010075992840873000007199224824 +:104BB000777D0000C0971B4687B000007899225F80 +:104BC000117C000004002215623100007699A84093 +:104BD0008132000000009B4081B2010000000040D3 +:104BE00049B1010030000040A199010000000040DF +:104BF00093B00100000000401FB00100C9990049B6 +:104C0000963001000700004906E401000039000366 +:104C100006C801000000004005B00100200000D0DF +:104C2000A0C901000000004193C001007D99A0547B +:104C3000936C000000002E0597B001000048004072 +:104C40004999010000000040E1B10100C00100A24B +:104C500044C901008699A24197500000000000203D +:104C600049B30100CE9900404931010000B52E083A +:104C700097B0010000000040F1B101008C99A24101 +:104C800097500000180000409798010000972E40B0 +:104C900081B2010000000040F1B101009099A241F1 +:104CA000975000000000004049B1010040182E0557 +:104CB00097B0010000000040F1B101009499A241B9 +:104CC0009750000057952040E7B101003094004014 +:104CD0004599010064000040E59901005695204087 +:104CE000E7B10100B8942041E5B10100BA94204138 +:104CF000E5B1010098940040459901000200004090 +:104D00009798010000000040F1B101009E99A24176 +:104D1000975000000000004097B0010000000040E4 +:104D20006FB101000000004B68B10100A2998541FC +:104D300097400000DB9900408132010000000040F4 +:104D400039B301000000004037B30100000000400B +:104D500035B301000000004033B301000000004003 +:104D600041B30100000000403FB301003C0000409F +:104D7000299B0100EE050040259B010042000040F8 +:104D80004B9B0100000000402FB3010000000040D9 +:104D90002DB301000000004047B3010000000040B7 +:104DA00043B30100600000402B9B01000000005451 +:104DB000EF93010000000055F1930100FFFF00A5F3 +:104DC0003C8B01000000002C5BB301000000002CB4 +:104DD00045B301000000004059B30100000000404D +:104DE00057B301000000004027B30100000000405D +:104DF00053B30100BF99A250FD7F0000BF99A2519B +:104E0000FD7F0000C09900401DB3000050460040E7 +:104E10001D9B010000C000A688B30100FF3F00A653 +:104E20003AB3010000C0009D3B9B0100B405004067 +:104E3000239B0100000000404DB30100080A00A6BA +:104E400014B301000101008A159B0100008000A637 +:104E500056B101000000805E57B501001800004BFC +:104E600020E401000600004B96E401000043004BE3 +:104E700096C801001800001020DC01000000804BE3 +:104E80002094010000992E0A97B001000000004014 +:104E9000F1B10100CF99A2419750000000030040FA +:104EA0009798010000A900404599010000000040CA +:104EB000F1B10100D399A2419750000030000040A9 +:104EC000979801000000005561B101000000004BFF +:104ED00062B10100D799A84081320000D799A24160 +:104EE000975000000000804081B2010000000040A7 +:104EF00087B101000000004097B001000000004BA6 +:104F000080B10100010000A682B10100DD99854158 +:104F1000974000000000004097B1010000000040F1 +:104F200097B001000000004B90B10100010000A605 +:104F300092B10100E2998541974000000000804055 +:104F400081B20100E6994440813200000000001265 +:104F500080B10100FFFF9C4B82890100E999444028 +:104F6000813200000000004A80B1010001009CA6CF +:104F700082B10100EC99444081320000FFFF004BF8 +:104F80008489010000009CC224B001000000004A96 +:104F900090B10100FFFF804B928901000000004AA0 +:104FA00090B10100010080A692B10100FFFF004B0B +:104FB00094890100000080CA94B001000000804084 +:104FC00081B201000000004081B00100F79980A586 +:104FD00080320000F89900A58032000000000041F6 +:104FE00081C00100F99980A5803200008001004055 +:104FF00083980100029A204F816C0000000100405C +:1050000083980100029A204B816C000080000040D0 +:1050100083980100029A2047816C00000000004044 +:10502000839801000000004182DC010003900041F0 +:10503000209901000000004049B1010000142F4CEC +:1050400083B0010000000040F1B10100069AA241C6 +:1050500083500000640000A580C80100099AA2A541 +:10506000806C000020000090209901000000005F8B +:10507000239101000C9A1F918032000030000090B3 +:10508000209901000000005F239101000F9A1F91F9 +:10509000803200007000009020A901000000005F35 +:1050A00023910100129A1F91803200000000005FDE +:1050B00023910100149A1F918032000040680090F3 +:1050C00020A90100E000004061990100210000409A +:1050D0006199010022000040619901002300004015 +:1050E0006199010024000040619901002500004001 +:1050F00061990100260000406199010027000040ED +:1051000061990100C000004061990100D014004085 +:105110004599010000000040F1B10100000000408D +:10512000E1B101003003004085300100D01400409F +:1051300045990100020100A680B00100040300406F +:1051400080980100060500A682B001000807004112 +:105150008298010000000040F0B101000000004111 +:10516000E0B10100080000408598010030030040D4 +:10517000813201003903004081320100D81400401F +:1051800043990100FF02A2F8806C0000000322F0A6 +:10519000826C0000FF02004081B20000D0142E405B +:1051A00049B1010005000040A39B01000000004040 +:1051B000C1B30100080000DD81F40100369A00400F +:1051C00010C900003C9A000581B000005501004064 +:1051D00081B20000449A000581B0000055010040F2 +:1051E00081B20000499A0044A5B300004B9A0044E4 +:1051F000A5B3000002000040A4E70100000000E0A9 +:1052000081B10100FFFF00C1F0890100419A2241F4 +:10521000815000003D9A0041C1C30000B10200402E +:1052200081320100C5020040813201005A01004074 +:1052300081B2000002000040A4E70100000000E08D +:1052400091B10100FFFF00C9F0890100419A22419C +:1052500081500000459A0041C1C30000FFFF00DEFD +:1052600085890100419A00C2E0B10000FFFF00DE25 +:1052700095890100419A00CAE0B10000040000CB0A +:1052800081C801006A840040F293000004000040DD +:1052900081B200000400004081B200000400004020 +:1052A00081B200000400004081B200000400004010 +:1052B00081B200000400004081B200000400004000 +:1052C00081B200000400004081B2000004000040F0 +:1052D00081B200000400004081B2000004000040E0 +:1052E00081B200000400004081B2000004000040D0 +:1052F00081B200000400004081B2000004000040C0 +:1053000081B200000400004081B2000004000040AF +:1053100081B200000400004081B20000040000409F +:1053200081B200000400004081B20000040000408F +:1053300081B200000400004081B20000040000407F +:1053400081B200000400004081B20000040000406F +:1053500081B200000400004081B20000040000405F +:1053600081B200000400004081B20000040000404F +:1053700081B200000400004081B20000040000403F +:1053800081B200000400004081B20000040000402F +:1053900081B200000400004081B20000040000401F +:1053A00081B200000400004081B20000040000400F +:1053B00081B200000400004081B2000004000040FF +:1053C00081B200000400004081B2000004000040EF +:1053D00081B200000400004081B2000004000040DF +:1053E00081B200000400004081B2000004000040CF +:1053F00081B200000400004081B2000004000040BF +:1054000081B200000400004081B2000004000040AE +:1054100081B200000400004081B20000040000409E +:1054200081B200000400004081B20000040000408E +:1054300081B200000400004081B20000040000407E +:1054400081B200000400004081B20000040000406E +:1054500081B200000400004081B20000040000405E +:1054600081B200000400004081B20000040000404E +:1054700081B200000400004081B20000040000403E +:1054800081B200000400004081B20000040000402E +:1054900081B200000400004081B20000040000401E +:1054A00081B200000400004081B20000040000400E +:1054B00081B200000400004081B2000004000040FE +:1054C00081B200000400004081B2000004000040EE +:1054D00081B200000400004081B2000004000040DE +:1054E00081B200000400004081B2000004000040CE +:1054F00081B200000400004081B2000004000040BE +:1055000081B200000400004081B2000004000040AD +:1055100081B200000400004081B20000040000409D +:1055200081B200000400004081B20000040000408D +:1055300081B200000400004081B20000040000407D +:1055400081B200000400004081B20000040000406D +:1055500081B200000400004081B20000040000405D +:1055600081B200000400004081B20000040000404D +:1055700081B200000400004081B20000040000403D +:1055800081B200000400004081B20000040000402D +:1055900081B200000400004081B20000040000401D +:1055A00081B200000400004081B20000040000400D +:1055B00081B200000400004081B2000004000040FD +:1055C00081B200000400004081B2000004000040ED +:1055D00081B200000400004081B2000004000040DD +:1055E00081B200000400004081B2000004000040CD +:1055F00081B200000400004081B2000004000040BD +:1056000081B200000400004081B2000004000040AC +:1056100081B200000400004081B20000040000409C +:1056200081B200000400004081B20000040000408C +:1056300081B200000400004081B20000040000407C +:1056400081B200000400004081B20000040000406C +:1056500081B200000400004081B20000040000405C +:1056600081B200000400004081B20000040000404C +:1056700081B200000400004081B20000040000403C +:1056800081B200000400004081B20000040000402C +:1056900081B200000400004081B20000040000401C +:1056A00081B200000400004081B20000040000400C +:1056B00081B200000400004081B2000004000040FC +:1056C00081B200000400004081B2000004000040EC +:1056D00081B200000400004081B2000004000040DC +:1056E00081B200000400004081B2000004000040CC +:1056F00081B200000400004081B2000004000040BC +:1057000081B200000400004081B2000004000040AB +:1057100081B200000400004081B20000040000409B +:1057200081B200000400004081B20000040000408B +:1057300081B200000400004081B20000040000407B +:1057400081B200000400004081B20000040000406B +:1057500081B200000400004081B20000040000405B +:1057600081B200000400004081B20000040000404B +:1057700081B200000400004081B20000040000403B +:1057800081B200000400004081B20000040000402B +:1057900081B200000400004081B20000040000401B +:1057A00081B200000400004081B20000040000400B +:1057B00081B200000400004081B2000004000040FB +:1057C00081B200000400004081B2000004000040EB +:1057D00081B200000400004081B2000004000040DB +:1057E00081B200000400004081B2000004000040CB +:1057F00081B200000400004081B2000004000040BB +:1058000081B200000400004081B2000004000040AA +:1058100081B200000400004081B20000040000409A +:1058200081B200000400004081B20000040000408A +:1058300081B200000400004081B20000040000407A +:1058400081B200000400004081B20000040000406A +:1058500081B200000400004081B20000040000405A +:1058600081B200000400004081B20000040000404A +:1058700081B200000400004081B20000040000403A +:1058800081B200000400004081B20000040000402A +:1058900081B200000400004081B20000040000401A +:1058A00081B200000400004081B20000040000400A +:1058B00081B200000400004081B2000004000040FA +:1058C00081B200000400004081B2000004000040EA +:1058D00081B200000400004081B2000004000040DA +:1058E00081B200000400004081B2000004000040CA +:1058F00081B200000400004081B2000004000040BA +:1059000081B200000400004081B2000004000040A9 +:1059100081B200000400004081B200000400004099 +:1059200081B200000400004081B200000400004089 +:1059300081B200000400004081B200000400004079 +:1059400081B200000400004081B200000400004069 +:1059500081B200000400004081B200000400004059 +:1059600081B200000400004081B200000400004049 +:1059700081B200000400004081B200000400004039 +:1059800081B200000400004081B200000400004029 +:1059900081B200000400004081B200000400004019 +:1059A00081B200000400004081B200000400004009 +:1059B00081B200000400004081B2000004000040F9 +:1059C00081B200000400004081B2000004000040E9 +:1059D00081B200000400004081B2000004000040D9 +:1059E00081B200000400004081B2000004000040C9 +:1059F00081B200000400004081B2000004000040B9 +:105A000081B200000400004081B2000004000040A8 +:105A100081B200000400004081B200000400004098 +:105A200081B200000400004081B200000400004088 +:105A300081B200000400004081B200000400004078 +:105A400081B200000400004081B200000400004068 +:105A500081B200000400004081B200000400004058 +:105A600081B200000400004081B200000400004048 +:105A700081B200000400004081B200000400004038 +:105A800081B200000400004081B200000400004028 +:105A900081B200000400004081B200000400004018 +:105AA00081B200000400004081B200000400004008 +:105AB00081B200000400004081B2000004000040F8 +:105AC00081B200000400004081B2000004000040E8 +:105AD00081B200000400004081B2000004000040D8 +:105AE00081B200000400004081B2000004000040C8 +:105AF00081B200000400004081B2000004000040B8 +:105B000081B200000400004081B2000004000040A7 +:105B100081B200000400004081B200000400004097 +:105B200081B200000400004081B200000400004087 +:105B300081B200000400004081B200000400004077 +:105B400081B200000400004081B200000400004067 +:105B500081B200000400004081B200000400004057 +:105B600081B200000400004081B200000400004047 +:105B700081B200000400004081B200000400004037 +:105B800081B200000400004081B200000400004027 +:105B900081B200000400004081B200000400004017 +:105BA00081B200000400004081B200000400004007 +:105BB00081B200000400004081B2000004000040F7 +:105BC00081B200000400004081B2000004000040E7 +:105BD00081B200000400004081B2000004000040D7 +:105BE00081B200000400004081B2000004000040C7 +:105BF00081B200000400004081B2000004000040B7 +:105C000081B200000400004081B2000004000040A6 +:105C100081B200000400004081B200000400004096 +:105C200081B200000400004081B200000400004086 +:105C300081B200000400004081B200000400004076 +:105C400081B200000400004081B200000400004066 +:105C500081B200000400004081B200000400004056 +:105C600081B200000400004081B200000400004046 +:105C700081B200000400004081B200000400004036 +:105C800081B200000400004081B200000400004026 +:105C900081B200000400004081B200000400004016 +:105CA00081B200000400004081B200000400004006 +:105CB00081B200000400004081B2000004000040F6 +:105CC00081B200000400004081B2000004000040E6 +:105CD00081B200000400004081B2000004000040D6 +:105CE00081B200000400004081B2000004000040C6 +:105CF00081B200000400004081B2000004000040B6 +:105D000081B200000400004081B2000004000040A5 +:105D100081B200000400004081B200000400004095 +:105D200081B200000400004081B200000400004085 +:105D300081B200000400004081B200000400004075 +:105D400081B200000400004081B200000400004065 +:105D500081B200000400004081B200000400004055 +:105D600081B200000400004081B200000400004045 +:105D700081B200000400004081B200000400004035 +:105D800081B200000400004081B200000400004025 +:105D900081B200000400004081B200000400004015 +:105DA00081B200000400004081B200000400004005 +:105DB00081B200000400004081B2000004000040F5 +:105DC00081B200000400004081B2000004000040E5 +:105DD00081B200000400004081B2000004000040D5 +:105DE00081B200000400004081B2000004000040C5 +:105DF00081B200000400004081B2000004000040B5 +:105E000081B200000400004081B2000004000040A4 +:105E100081B200000400004081B200000400004094 +:105E200081B200000400004081B200000400004084 +:105E300081B200000400004081B200000400004074 +:105E400081B200000400004081B200000400004064 +:105E500081B200000400004081B200000400004054 +:105E600081B200000400004081B200000400004044 +:105E700081B200000400004081B200000400004034 +:105E800081B200000400004081B200000400004024 +:105E900081B200000400004081B200000400004014 +:105EA00081B200000400004081B200000400004004 +:105EB00081B200000400004081B2000004000040F4 +:105EC00081B200000400004081B2000004000040E4 +:105ED00081B200000400004081B2000004000040D4 +:105EE00081B200000400004081B2000004000040C4 +:105EF00081B200000400004081B2000004000040B4 +:105F000081B200000400004081B2000004000040A3 +:105F100081B200000400004081B200000400004093 +:105F200081B200000400004081B200000400004083 +:105F300081B200000400004081B200000400004073 +:105F400081B200000400004081B200000400004063 +:105F500081B200000400004081B200000400004053 +:105F600081B200000400004081B200000400004043 +:105F700081B200000400004081B200000400004033 +:105F800081B200000400004081B200000400004023 +:105F900081B200000400004081B200000400004013 +:105FA00081B200000400004081B200000400004003 +:105FB00081B200000400004081B2000004000040F3 +:105FC00081B200000400004081B2000004000040E3 +:105FD00081B200000400004081B2000004000040D3 +:105FE00081B200000400004081B2000004000040C3 +:105FF00081B200000400004081B2000004000040B3 +:1060000081B200000400004081B2000004000040A2 +:1060100081B200000400004081B200000400004092 +:1060200081B200000400004081B200000400004082 +:1060300081B200000400004081B200000400004072 +:1060400081B200000400004081B200000400004062 +:1060500081B200000400004081B200000400004052 +:1060600081B200000400004081B200000400004042 +:1060700081B200000400004081B200000400004032 +:1060800081B200000400004081B200000400004022 +:1060900081B200000400004081B200000400004012 +:1060A00081B200000400004081B200000400004002 +:1060B00081B200000400004081B2000004000040F2 +:1060C00081B200000400004081B2000004000040E2 +:1060D00081B200000400004081B2000004000040D2 +:1060E00081B200000400004081B2000004000040C2 +:1060F00081B200000400004081B2000004000040B2 +:1061000081B200000400004081B2000004000040A1 +:1061100081B200000400004081B200000400004091 +:1061200081B200000400004081B200000400004081 +:1061300081B200000400004081B200000400004071 +:1061400081B200000400004081B200000400004061 +:1061500081B200000400004081B200000400004051 +:1061600081B200000400004081B200000400004041 +:1061700081B200000400004081B200000400004031 +:1061800081B200000400004081B200000400004021 +:1061900081B200000400004081B200000400004011 +:1061A00081B200000400004081B200000400004001 +:1061B00081B200000400004081B2000004000040F1 +:1061C00081B200000400004081B2000004000040E1 +:1061D00081B200000400004081B2000004000040D1 +:1061E00081B200000400004081B2000004000040C1 +:1061F00081B200000400004081B2000004000040B1 +:1062000081B200000400004081B2000004000040A0 +:1062100081B200000400004081B200000400004090 +:1062200081B200000400004081B200000400004080 +:1062300081B200000400004081B200000400004070 +:1062400081B200000400004081B200000400004060 +:1062500081B200000400004081B200000400004050 +:1062600081B200000400004081B200000400004040 +:1062700081B200000400004081B200000400004030 +:1062800081B200000400004081B200000400004020 +:1062900081B200000400004081B200000400004010 +:1062A00081B200000400004081B200000400004000 +:1062B00081B200000400004081B2000004000040F0 +:1062C00081B200000400004081B2000004000040E0 +:1062D00081B200000400004081B2000004000040D0 +:1062E00081B200000400004081B2000004000040C0 +:1062F00081B200000400004081B2000004000040B0 +:1063000081B200000400004081B20000040000409F +:1063100081B200000400004081B20000040000408F +:1063200081B200000400004081B20000040000407F +:1063300081B200000400004081B20000040000406F +:1063400081B200000400004081B20000040000405F +:1063500081B200000400004081B20000040000404F +:1063600081B200000400004081B20000040000403F +:1063700081B200000400004081B20000040000402F +:1063800081B200000400004081B20000040000401F +:1063900081B200000400004081B20000040000400F +:1063A00081B200000400004081B2000004000040FF +:1063B00081B200000400004081B2000004000040EF +:1063C00081B200000400004081B2000004000040DF +:1063D00081B200000400004081B2000004000040CF +:1063E00081B200000400004081B2000004000040BF +:1063F00081B200000400004081B2000004000040AF +:1064000081B200000400004081B20000040000409E +:1064100081B200000400004081B20000040000408E +:1064200081B200000400004081B20000040000407E +:1064300081B200000400004081B20000040000406E +:1064400081B200000400004081B20000040000405E +:1064500081B200000400004081B20000040000404E +:1064600081B200000400004081B20000040000403E +:1064700081B200000400004081B20000040000402E +:1064800081B200000400004081B20000040000401E +:1064900081B200000400004081B20000040000400E +:1064A00081B200000400004081B2000004000040FE +:1064B00081B200000400004081B2000004000040EE +:1064C00081B200000400004081B2000004000040DE +:1064D00081B200000400004081B2000004000040CE +:1064E00081B200000400004081B2000004000040BE +:1064F00081B200000400004081B2000004000040AE +:1065000081B200000400004081B20000040000409D +:1065100081B200000400004081B20000040000408D +:1065200081B200000400004081B20000040000407D +:1065300081B200000400004081B20000040000406D +:1065400081B200000400004081B20000040000405D +:1065500081B200000400004081B20000040000404D +:1065600081B200000400004081B20000040000403D +:1065700081B200000400004081B20000040000402D +:1065800081B200000400004081B20000040000401D +:1065900081B200000400004081B20000040000400D +:1065A00081B200000400004081B2000004000040FD +:1065B00081B200000400004081B2000004000040ED +:1065C00081B200000400004081B2000004000040DD +:1065D00081B200000400004081B2000004000040CD +:1065E00081B200000400004081B2000004000040BD +:1065F00081B200000400004081B2000004000040AD +:1066000081B200000400004081B20000040000409C +:1066100081B200000400004081B20000040000408C +:1066200081B200000400004081B20000040000407C +:1066300081B200000400004081B20000040000406C +:1066400081B200000400004081B20000040000405C +:1066500081B200000400004081B20000040000404C +:1066600081B200000400004081B20000040000403C +:1066700081B200000400004081B20000040000402C +:1066800081B200000400004081B20000040000401C +:1066900081B200000400004081B20000040000400C +:1066A00081B200000400004081B2000004000040FC +:1066B00081B200000400004081B2000004000040EC +:1066C00081B200000400004081B2000004000040DC +:1066D00081B200000400004081B2000004000040CC +:1066E00081B200000400004081B2000004000040BC +:1066F00081B200000400004081B2000004000040AC +:1067000081B200000400004081B20000040000409B +:1067100081B200000400004081B20000040000408B +:1067200081B200000400004081B20000040000407B +:1067300081B200000400004081B20000040000406B +:1067400081B200000400004081B20000040000405B +:1067500081B200000400004081B20000040000404B +:1067600081B200000400004081B20000040000403B +:1067700081B200000400004081B20000040000402B +:1067800081B200000400004081B20000040000401B +:1067900081B200000400004081B20000040000400B +:1067A00081B200000400004081B2000004000040FB +:1067B00081B200000400004081B2000004000040EB +:1067C00081B200000400004081B2000004000040DB +:1067D00081B200000400004081B2000004000040CB +:1067E00081B200000400004081B2000004000040BB +:1067F00081B200000400004081B2000004000040AB +:1068000081B200000400004081B20000040000409A +:1068100081B200000400004081B20000040000408A +:1068200081B200000400004081B20000040000407A +:1068300081B200000400004081B20000040000406A +:1068400081B200000400004081B20000040000405A +:1068500081B200000400004081B20000040000404A +:1068600081B200000400004081B20000040000403A +:1068700081B200000400004081B20000040000402A +:1068800081B200000400004081B20000040000401A +:1068900081B200000400004081B20000040000400A +:1068A00081B200000400004081B2000004000040FA +:1068B00081B200000400004081B2000004000040EA +:1068C00081B200000400004081B2000004000040DA +:1068D00081B200000400004081B2000004000040CA +:1068E00081B200000400004081B2000004000040BA +:1068F00081B200000400004081B2000004000040AA +:1069000081B200000400004081B200000400004099 +:1069100081B200000400004081B200000400004089 +:1069200081B200000400004081B200000400004079 +:1069300081B200000400004081B200000400004069 +:1069400081B200000400004081B200000400004059 +:1069500081B200000400004081B200000400004049 +:1069600081B200000400004081B200000400004039 +:1069700081B200000400004081B200000400004029 +:1069800081B200000400004081B200000400004019 +:1069900081B200000400004081B200000400004009 +:1069A00081B200000400004081B2000004000040F9 +:1069B00081B200000400004081B2000004000040E9 +:1069C00081B200000400004081B2000004000040D9 +:1069D00081B200000400004081B2000004000040C9 +:1069E00081B200000400004081B2000004000040B9 +:1069F00081B200000400004081B2000004000040A9 +:106A000081B200000400004081B200000400004098 +:106A100081B200000400004081B200000400004088 +:106A200081B200000400004081B200000400004078 +:106A300081B200000400004081B200000400004068 +:106A400081B200000400004081B200000400004058 +:106A500081B200000400004081B200000400004048 +:106A600081B200000400004081B200000400004038 +:106A700081B200000400004081B200000400004028 +:106A800081B200000400004081B200000400004018 +:106A900081B200000400004081B200000400004008 +:106AA00081B200000400004081B2000004000040F8 +:106AB00081B200000400004081B2000004000040E8 +:106AC00081B200000400004081B2000004000040D8 +:106AD00081B200000400004081B2000004000040C8 +:106AE00081B200000400004081B2000004000040B8 +:106AF00081B200000400004081B2000004000040A8 +:106B000081B200000400004081B200000400004097 +:106B100081B200000400004081B200000400004087 +:106B200081B200000400004081B200000400004077 +:106B300081B200000400004081B200000400004067 +:106B400081B200000400004081B200000400004057 +:106B500081B200000400004081B200000400004047 +:106B600081B200000400004081B200000400004037 +:106B700081B200000400004081B200000400004027 +:106B800081B200000400004081B200000400004017 +:106B900081B200000400004081B200000400004007 +:106BA00081B200000400004081B2000004000040F7 +:106BB00081B200000400004081B2000004000040E7 +:106BC00081B200000400004081B2000004000040D7 +:106BD00081B200000400004081B2000004000040C7 +:106BE00081B200000400004081B2000004000040B7 +:106BF00081B200000400004081B2000004000040A7 +:106C000081B200000400004081B200000400004096 +:106C100081B200000400004081B200000400004086 +:106C200081B200000400004081B200000400004076 +:106C300081B200000400004081B200000400004066 +:106C400081B200000400004081B200000400004056 +:106C500081B200000400004081B200000400004046 +:106C600081B200000400004081B200000400004036 +:106C700081B200000400004081B200000400004026 +:106C800081B200000400004081B200000400004016 +:106C900081B200000400004081B200000400004006 +:106CA00081B200000400004081B2000004000040F6 +:106CB00081B200000400004081B2000004000040E6 +:106CC00081B200000400004081B2000004000040D6 +:106CD00081B200000400004081B2000004000040C6 +:106CE00081B200000400004081B2000004000040B6 +:106CF00081B200000400004081B2000004000040A6 +:106D000081B200000400004081B200000400004095 +:106D100081B200000400004081B200000400004085 +:106D200081B200000400004081B200000400004075 +:106D300081B200000400004081B200000400004065 +:106D400081B200000400004081B200000400004055 +:106D500081B200000400004081B200000400004045 +:106D600081B200000400004081B200000400004035 +:106D700081B200000400004081B200000400004025 +:106D800081B200000400004081B200000400004015 +:106D900081B200000400004081B200000400004005 +:106DA00081B200000400004081B2000004000040F5 +:106DB00081B200000400004081B2000004000040E5 +:106DC00081B200000400004081B2000004000040D5 +:106DD00081B200000400004081B2000004000040C5 +:106DE00081B200000400004081B2000004000040B5 +:106DF00081B200000400004081B2000004000040A5 +:106E000081B200000400004081B200000400004094 +:106E100081B200000400004081B200000400004084 +:106E200081B200000400004081B200000400004074 +:106E300081B200000400004081B200000400004064 +:106E400081B200000400004081B200000400004054 +:106E500081B200000400004081B200000400004044 +:106E600081B200000400004081B200000400004034 +:106E700081B200000400004081B200000400004024 +:106E800081B200000400004081B200000400004014 +:106E900081B200000400004081B200000400004004 +:106EA00081B200000400004081B2000004000040F4 +:106EB00081B200000400004081B2000004000040E4 +:106EC00081B200000400004081B2000004000040D4 +:106ED00081B200000400004081B2000004000040C4 +:106EE00081B200000400004081B2000004000040B4 +:106EF00081B200000400004081B2000004000040A4 +:106F000081B200000400004081B200000400004093 +:106F100081B200000400004081B200000400004083 +:106F200081B200000400004081B200000400004073 +:106F300081B200000400004081B200000400004063 +:106F400081B200000400004081B200000400004053 +:106F500081B200000400004081B200000400004043 +:106F600081B200000400004081B200000400004033 +:106F700081B200000400004081B200000400004023 +:106F800081B200000400004081B200000400004013 +:106F900081B200000400004081B200000400004003 +:106FA00081B200000400004081B2000004000040F3 +:106FB00081B200000400004081B2000004000040E3 +:106FC00081B200000400004081B2000004000040D3 +:106FD00081B200000400004081B2000004000040C3 +:106FE00081B200000400004081B2000004000040B3 +:106FF00081B200000400004081B2000004000040A3 +:1070000081B200000400004081B200000400004092 +:1070100081B200000400004081B200000400004082 +:1070200081B200000400004081B200000400004072 +:1070300081B200000400004081B200000400004062 +:1070400081B200000400004081B200000400004052 +:1070500081B200000400004081B200000400004042 +:1070600081B200000400004081B200000400004032 +:1070700081B200000400004081B200000400004022 +:1070800081B200000400004081B200000400004012 +:1070900081B200000400004081B200000400004002 +:1070A00081B200000400004081B2000004000040F2 +:1070B00081B200000400004081B2000004000040E2 +:1070C00081B200000400004081B2000004000040D2 +:1070D00081B200000400004081B2000004000040C2 +:1070E00081B200000400004081B2000004000040B2 +:1070F00081B200000400004081B2000004000040A2 +:1071000081B200000400004081B200000400004091 +:1071100081B200000400004081B200000400004081 +:1071200081B200000400004081B200000400004071 +:1071300081B200000400004081B200000400004061 +:1071400081B200000400004081B200000400004051 +:1071500081B200000400004081B200000400004041 +:1071600081B200000400004081B200000400004031 +:1071700081B200000400004081B200000400004021 +:1071800081B200000400004081B200000400004011 +:1071900081B200000400004081B200000400004001 +:1071A00081B200000400004081B2000004000040F1 +:1071B00081B200000400004081B2000004000040E1 +:1071C00081B200000400004081B2000004000040D1 +:1071D00081B200000400004081B2000004000040C1 +:1071E00081B200000400004081B2000004000040B1 +:1071F00081B200000400004081B2000004000040A1 +:1072000081B200000400004081B200000400004090 +:1072100081B200000400004081B200000400004080 +:1072200081B200000400004081B200000400004070 +:1072300081B200000400004081B200000400004060 +:1072400081B200000400004081B200000400004050 +:1072500081B200000400004081B200000400004040 +:1072600081B200000400004081B200000400004030 +:1072700081B200000400004081B200000400004020 +:1072800081B200000400004081B200000400004010 +:1072900081B200000400004081B200000400004000 +:1072A00081B200000400004081B2000004000040F0 +:1072B00081B200000400004081B2000004000040E0 +:1072C00081B200000400004081B2000004000040D0 +:1072D00081B200000400004081B2000004000040C0 +:1072E00081B200000400004081B2000004000040B0 +:1072F00081B200000400004081B2000004000040A0 +:1073000081B200000400004081B20000040000408F +:1073100081B200000400004081B20000040000407F +:1073200081B200000400004081B20000040000406F +:1073300081B200000400004081B20000040000405F +:1073400081B200000400004081B20000040000404F +:1073500081B200000400004081B20000040000403F +:1073600081B200000400004081B20000040000402F +:1073700081B200000400004081B20000040000401F +:1073800081B200000400004081B20000040000400F +:1073900081B200000400004081B2000004000040FF +:1073A00081B200000400004081B2000004000040EF +:1073B00081B200000400004081B2000004000040DF +:1073C00081B200000400004081B2000004000040CF +:1073D00081B200000400004081B2000004000040BF +:1073E00081B200000400004081B2000004000040AF +:1073F00081B200000400004081B20000040000409F +:1074000081B200000400004081B20000040000408E +:1074100081B200000400004081B20000040000407E +:1074200081B200000400004081B20000040000406E +:1074300081B200000400004081B20000040000405E +:1074400081B200000400004081B20000040000404E +:1074500081B200000400004081B20000040000403E +:1074600081B200000400004081B20000040000402E +:1074700081B200000400004081B20000040000401E +:1074800081B200000400004081B20000040000400E +:1074900081B200000400004081B2000004000040FE +:1074A00081B200000400004081B2000004000040EE +:1074B00081B200000400004081B2000004000040DE +:1074C00081B200000400004081B2000004000040CE +:1074D00081B200000400004081B2000004000040BE +:1074E00081B200000400004081B2000004000040AE +:1074F00081B200000400004081B20000040000409E +:1075000081B200000400004081B20000040000408D +:1075100081B200000400004081B20000040000407D +:1075200081B200000400004081B20000040000406D +:1075300081B200000400004081B20000040000405D +:1075400081B200000400004081B20000040000404D +:1075500081B200000400004081B20000040000403D +:1075600081B200000400004081B20000040000402D +:1075700081B200000400004081B20000040000401D +:1075800081B200000400004081B20000040000400D +:1075900081B200000400004081B2000004000040FD +:1075A00081B200000400004081B2000004000040ED +:1075B00081B200000400004081B2000004000040DD +:1075C00081B200000400004081B2000004000040CD +:1075D00081B200000400004081B2000004000040BD +:1075E00081B200000400004081B2000004000040AD +:1075F00081B200000400004081B20000040000409D +:1076000081B200000400004081B20000040000408C +:1076100081B200000400004081B20000040000407C +:1076200081B200000400004081B20000040000406C +:1076300081B200000400004081B20000040000405C +:1076400081B200000400004081B20000040000404C +:1076500081B200000400004081B20000040000403C +:1076600081B200000400004081B20000040000402C +:1076700081B200000400004081B20000040000401C +:1076800081B200000400004081B20000040000400C +:1076900081B200000400004081B2000004000040FC +:1076A00081B200000400004081B2000004000040EC +:1076B00081B200000400004081B2000004000040DC +:1076C00081B200000400004081B2000004000040CC +:1076D00081B200000400004081B2000004000040BC +:1076E00081B200000400004081B2000004000040AC +:1076F00081B200000400004081B20000040000409C +:1077000081B200000400004081B20000040000408B +:1077100081B200000400004081B20000040000407B +:1077200081B200000400004081B20000040000406B +:1077300081B200000400004081B20000040000405B +:1077400081B200000400004081B20000040000404B +:1077500081B200000400004081B20000040000403B +:1077600081B200000400004081B20000040000402B +:1077700081B200000400004081B20000040000401B +:1077800081B200000400004081B20000040000400B +:1077900081B200000400004081B2000004000040FB +:1077A00081B200000400004081B2000004000040EB +:1077B00081B200000400004081B2000004000040DB +:1077C00081B200000400004081B2000004000040CB +:1077D00081B200000400004081B2000004000040BB +:1077E00081B200000400004081B2000004000040AB +:1077F00081B200000400004081B20000040000409B +:1078000081B200000400004081B20000040000408A +:1078100081B200000400004081B20000040000407A +:1078200081B200000400004081B20000040000406A +:1078300081B200000400004081B20000040000405A +:1078400081B200000400004081B20000040000404A +:1078500081B200000400004081B20000040000403A +:1078600081B200000400004081B20000040000402A +:1078700081B200000400004081B20000040000401A +:1078800081B200000400004081B20000040000400A +:1078900081B200000400004081B2000004000040FA +:1078A00081B200000400004081B2000004000040EA +:1078B00081B200000400004081B2000004000040DA +:1078C00081B200000400004081B2000004000040CA +:1078D00081B200000400004081B2000004000040BA +:1078E00081B200000400004081B2000004000040AA +:1078F00081B200000400004081B20000040000409A +:1079000081B200000400004081B200000400004089 +:1079100081B200000400004081B200000400004079 +:1079200081B200000400004081B200000400004069 +:1079300081B200000400004081B200000400004059 +:1079400081B200000400004081B200000400004049 +:1079500081B200000400004081B200000400004039 +:1079600081B200000400004081B200000400004029 +:1079700081B200000400004081B200000400004019 +:1079800081B200000400004081B200000400004009 +:1079900081B200000400004081B2000004000040F9 +:1079A00081B200000400004081B2000004000040E9 +:1079B00081B200000400004081B2000004000040D9 +:1079C00081B200000400004081B2000004000040C9 +:1079D00081B200000400004081B2000004000040B9 +:1079E00081B200000400004081B2000004000040A9 +:1079F00081B200000400004081B200000400004099 +:107A000081B200000400004081B200000400004088 +:107A100081B200000400004081B200000400004078 +:107A200081B200000400004081B200000400004068 +:107A300081B200000400004081B200000400004058 +:107A400081B200000400004081B200000400004048 +:107A500081B200000400004081B200000400004038 +:107A600081B200000400004081B200000400004028 +:107A700081B200000400004081B200000400004018 +:107A800081B200000400004081B200000400004008 +:107A900081B200000400004081B2000004000040F8 +:107AA00081B200000400004081B2000004000040E8 +:107AB00081B200000400004081B2000004000040D8 +:107AC00081B200000400004081B2000004000040C8 +:107AD00081B200000400004081B2000004000040B8 +:107AE00081B200000400004081B2000004000040A8 +:107AF00081B200000400004081B200000400004098 +:107B000081B200000400004081B200000400004087 +:107B100081B200000400004081B200000400004077 +:107B200081B200000400004081B200000400004067 +:107B300081B200000400004081B200000400004057 +:107B400081B200000400004081B200000400004047 +:107B500081B200000400004081B200000400004037 +:107B600081B200000400004081B200000400004027 +:107B700081B200000400004081B200000400004017 +:107B800081B200000400004081B200000400004007 +:107B900081B200000400004081B2000004000040F7 +:107BA00081B200000400004081B2000004000040E7 +:107BB00081B200000400004081B2000004000040D7 +:107BC00081B200000400004081B2000004000040C7 +:107BD00081B200000400004081B2000004000040B7 +:107BE00081B200000400004081B2000004000040A7 +:107BF00081B200000400004081B200000400004097 +:107C000081B200000400004081B200000400004086 +:107C100081B200000400004081B200000400004076 +:107C200081B200000400004081B200000400004066 +:107C300081B200000400004081B200000400004056 +:107C400081B200000400004081B200000400004046 +:107C500081B200000400004081B200000400004036 +:107C600081B200000400004081B200000400004026 +:107C700081B200000400004081B200000400004016 +:107C800081B200000400004081B200000400004006 +:107C900081B200000400004081B2000004000040F6 +:107CA00081B200000400004081B2000004000040E6 +:107CB00081B200000400004081B2000004000040D6 +:107CC00081B200000400004081B2000004000040C6 +:107CD00081B200000400004081B2000004000040B6 +:107CE00081B200000400004081B2000004000040A6 +:107CF00081B200000400004081B200000400004096 +:107D000081B200000400004081B200000400004085 +:107D100081B200000400004081B200000400004075 +:107D200081B200000400004081B200000400004065 +:107D300081B200000400004081B200000400004055 +:107D400081B200000400004081B200000400004045 +:107D500081B200000400004081B200000400004035 +:107D600081B200000400004081B200000400004025 +:107D700081B200000400004081B200000400004015 +:107D800081B200000400004081B200000400004005 +:107D900081B20000B69F00889AB00000B69F0088AC +:107DA0009AB00000B69F00889AB00000B69F008885 +:107DB0009AB00000B69F00889AB0000000000088CA +:107DC0009AB00100B69F414081320000B99F224025 +:107DD0007B6F0000B69F194081B20000000019417E +:107DE0007BB30100000000A4C4B30100000000A1A7 +:107DF000C6B3010000002FA2C8B301000814004060 +:107E000049990100B09F004D9ACC0100C29F2640C5 +:107E1000813200000000004C49C10100C09FA24116 +:107E20009B500000C69F80808032000000005249B5 +:107E3000FD9301000000004AFD930100C99F00422C +:107E4000CD9300000000514AFD930100000000495D +:107E5000FD930100C99F0043CB93000000005040F8 +:107E600081B20100D99F004019990100000000F083 +:107E70009AB001000000004449D10100000040F028 +:107E800080B201000000414D80B20100D19F00404E +:107E90001999010000004C4081B20100000000442B +:107EA00049D10100000000F09AB001000000004D2F +:107EB00010B10000000000E249B10100000000E341 +:107EC00043B10100000000E445B1010000000040A2 +:107ED0007BB301000000484F40B10100D99F004032 +:107EE00081B200000400004081B2000004000040A4 +:107EF00081B200000400004081B200000400004094 +:107F000081B200000400004081B200000400004083 +:107F100081B200000000804081B0010004000040F8 +:107F200081B200000400004081B200000400004063 +:107F300081B200000400004081B200000400004053 +:107F400081B200000400004081B200000400004043 +:107F500081B200000400004081B200000400004033 +:107F600081B200000400004081B200000400004023 +:107F700081B200000400004081B200000400004013 +:107F800081B200000400004081B200000400004003 +:107F900081B200006A84004081B20000319A004042 +:107FA00081B200000400004081B200004D9A004000 +:107FB00081B200000400004081B200000000804057 +:107FC00081B20100000000A810B1000004000040D0 +:107FD00081B200000400004081B2000004000040B3 +:107FE00081B200000400004081B2000004000040A3 +:107FF00081B200000400004081B200000400004093 +:1080000081B200000400004081B200000400004082 +:0480100081B2000039 +:00000001FF diff --git a/trunk/firmware/slicoss/gbrcvucode.sys.ihex b/trunk/firmware/slicoss/gbrcvucode.sys.ihex new file mode 100644 index 000000000000..bc7a83989c08 --- /dev/null +++ b/trunk/firmware/slicoss/gbrcvucode.sys.ihex @@ -0,0 +1,162 @@ +:10000000000200004775010004A01301001CB75B4B +:10001000093000B65F01001C00000020183B783A50 +:10002000001CA27701001C071D017018AD7BF1FFB9 +:100030001CB37BA9AA1EB47B010C1CB57B29061C32 +:1000400000005064080C315A70040C315A80040CC2 +:10005000314E90040C314AA000092555C0040C31E2 +:1000600052B000E92455C004CCB3001C1CEB2D0198 +:10007000001C065652D408079D00001C7BB70200E6 +:1000800010A00F51540906565EC004A0307403003E +:10009000AC30750300CD033A001C7BB702001C6036 +:1000A0008E5154092925750300808E5154098C30D6 +:1000B000910004471C01001CA00F5154090000646A +:1000C0000004471C65C004471C7503006C30010028 +:1000D0001C4D3402001C7BB702001CA00F515409B8 +:1000E000C88337001C800100001C0000640004A0CD +:1000F0000F505409000074C3047BFBF2001CCC3386 +:100100000D001CB47BFD031C800E505409E0FB0560 +:10011000001C0000AC0300B30F5154090000EC7048 +:10012000040000EC80040000AC93006176ADC304D1 +:10013000C08D515409E07B00C01FA0FDC50100CC5B +:100140003305001CD403003C1CD4D31B001CC0D3BB +:1001500052001C00007C13048E8E5254095B807E7A +:100160001304000000001C0000940100A00F515473 +:1001700009A00F515409C003FC7F1CA001A001007D +:100180000000A40100A00F515409C003FC031CF59A +:100190007701001C267A02061CA00F515409B30FE8 +:1001A000515409B50202001CA00F5154097A7E0275 +:1001B000001CB50202001C530F525409AF0301008A +:1001C0001C7A0E525409B50202001C000002001CE9 +:1001D000A03DAA11040000AC1104D4D352001CB5F8 +:1001E0003EB2010020FBFDFF1F802C8C0300B93ABA +:1001F0009E0100753B02001CA71C010010DB83164A +:10020000001CC71D21C104B93B8DC1048B2C01000A +:100210001C6B2C35C1040000781100CB2C79C10473 +:10022000A00F515409A00F51540954D002001C4989 +:1002300025B10100AB2C81C104A71D750300CC338F +:1002400009001CEB2D01001CEA2901001CA00F5124 +:100250005409AE0F515409A00F515409D407FC039F +:100260001C993A02001CBB3802001C003800001C1C +:100270000000FC0104DB3B7E001CC71D01001C26A6 +:100280007A16061C271D01001CB30F5154097A0E63 +:10029000525409530F5254097A0E525409530F52B3 +:1002A00054097A0E525409530F525409A00F515455 +:1002B000097A0602001C530F525409AF0301001CB7 +:1002C0007A0E525409530F5254097A0E525409535C +:1002D0000F5254097A0E525409530F5254097A0E90 +:1002E000525409003D02001C0000581200CB2C01A2 +:1002F000001C753B02001CA71C010010A67BFD051D +:100300001C000090C204A67BFD051C0000A8C204CE +:10031000CB2F05001C602C00001CC71CE90200A0AC +:100320000F515409530702001CC083F1321C000016 +:10033000600204467AE6051C7A0E525409C083F125 +:10034000321C000068020440FA15001C0000A802DC +:1003500004467AE6051CA00F515409A00F51540918 +:10036000A00F515409A00F515409B37B01C01F7451 +:100370000E505409C0039C001C8000F802000000CD +:10038000F802040000CC1205071D01001CD4D32B79 +:10039000001CD4D352001C80769D1304000000037F +:1003A00000A67BB50310C79C00001C802C00001C1D +:1003B00000007C0204000074C304AB2DF912050791 +:1003C0001DD5C2048B2D01001C692501001CA67BD4 +:1003D000B50310CB2F09001C602C00001C00006826 +:1003E0000300530F525409467AE6051C7A0E525404 +:1003F0000940FA15001C0000300304467AE6051C8B +:10040000B50F515409A00F51540973EC4A0304600D +:100410002C00001C0000480300C71C01001C000049 +:10042000481305071D01001CC0D722001C75569EED +:100430001304602C00001CE71C650304E79C00000B +:100440001CA67BB50310802C00001C0000180304C0 +:10045000000074C304B97B01001C0000ACC304CBD2 +:10046000AFFC071CCB2F01041CC79F80031C00009E +:10047000ACC304CBAFFC071CCB2F0D041CC79F8063 +:10048000031C0000ACC304CBAF00F81DCB2F010050 +:100490001DA67BB5031CC79CACC3040000AC1305B0 +:1004A000071D01001CC01DFCD308279D040400A0EB +:1004B000EE66D400FB75291404207B06001CC01CCA +:1004C0003C04000000D0D308000020F400C0EFF28C +:1004D000001C20257C140460B7F2030000002C15DA +:1004E00000CCB3FC031CCC3305021C00002CC5045B +:1004F00060B72E050400002C150400007CC404C065 +:100500001DB8F304000088C404079D00001C1B7480 +:100510001DF404A67B11041CA00F895409E07B0084 +:10052000FC1F397F02001C071DBDC304A67BCD0341 +:100530001C000088C404E01C00001C0000C403046C +:10054000CBAF00F81DCB2F01101D0000CCC3040061 +:1005500000CC0304CBAF00F81DCB2F01181DC79FA3 +:10056000000B1C0000CCC304FB7501001C071D011F +:10057000001CCCB3FC031CCC3301021C0000CCC318 +:1005800004A01C00001CA0EEC20304CBAFFC071C9F +:10059000CB2F09041CFB7501001C0000CCC304CC4C +:1005A000B3FC031CCC3301021C00002CC50400006A +:1005B000983405CCB3FC031CCC3315021C479D7446 +:1005C000C4040000984400801D9C5404871DAD04A1 +:1005D00000CE7601001CEF76BDC404A477AD2409DB +:1005E000E47601001CC47601001C0000B85404D756 +:1005F00076015018F67601001C000000301800004B +:10060000000010CC3061C504EB2D01001CEA29016B +:10061000001CC05901001CF57749C504E030FC04FA +:1006200000004CD00400204C140500000008050018 +:10063000CCB3FC031CCC3309021CEB2DD5C404CC79 +:10064000B3FC031CCC3319021CEB2DD5C404CCB372 +:10065000FC031CCC330D021CEB2DD5C404CCB3FC25 +:10066000031CCC3311021CEB2DD5C404007B00808D +:100670001CAE77610500000004C004D38B00FC1F92 +:10068000607A3C001C604CE00400C02F20051FE095 +:1006900030D004008025D00400B55BD10404692665 +:1006A00001001C6A2B01001C801D00001CA9256193 +:1006B0000500EE3000001CAF77210500B45F01405B +:1006C00018079D645504B77601001C967601001C3E +:1006D000471D01001CA433016018A42F0160186499 +:1006E000770160182477016018447701001C648842 +:1006F00003001CA43F01001CA43B01001C537B0011 +:10070000C01CD3CF1B001C534F02001CDACF00C00B +:100710001FD5570F001CD3D337001CD4530F001C18 +:10072000E02900001CF5D5CC05000000B855047781 +:100730005601001C565301001C0000001018000058 +:1007400004C004F55501001C0000D0550477560183 +:10075000001C565301001C0000001018000004C0CB +:1007600004CB2F011810CB2F011010CB2F01081034 +:10077000CB2F010810CB2F012010CB2F010010CB65 +:100780002F012810892571C20400000CC304000049 +:1007900074C304000074C304000074C30400007038 +:1007A000C20400000CC304000074C304000074C33E +:1007B00004000074C304401C6CC004401C9CC004B2 +:1007C000A77775C3040000C4C004271DF1C004004E +:1007D0000074C304000074C304000074C304000068 +:1007E00048C604000048C604000048C6040000488B +:1007F000C604000048C604000048C604000048C6FD +:1008000004000048C604000048C604000048C604AE +:10081000000048C604000048C604000048C60400A2 +:100820000048C604000048C604000048C604000092 +:1008300048C604000048C604000048C6040000483A +:10084000C604000048C604000048C604000048C6AC +:1008500004000048C604000048C604000048C6045E +:10086000000048C604000048C604000048C6040052 +:100870000048C604000048C604000048C604000042 +:1008800048C604000048C604000048C604000048EA +:10089000C604000048C604000048C604000048C65C +:1008A00004000048C604000048C604000048C6040E +:1008B000000048C604000048C604000048C6040002 +:1008C0000048C604000048C604000048C6040000F2 +:1008D00048C604000048C604000048C6040000489A +:1008E000C604000048C604000048C604000048C60C +:1008F00004000048C604000048C604000048C604BE +:10090000000048C604000048C604000048C60400B1 +:100910000048C604000048C604000048C6040000A1 +:1009200048C604000048C604000048C60400004849 +:10093000C604000048C604000048C604000048C6BB +:1009400004000048C604000048C604000048C6046D +:10095000000048C604000048C604000048C6040061 +:100960000048C604000048C604000048C604000051 +:1009700048C604000048C604000048C604000048F9 +:10098000C604000048C604000048C604000048C66B +:1009900004000048C604000048C604000048C6041D +:1009A000000048C604000048C604000048C6040011 +:1009B0000048C604000048C604000048C604000001 +:1009C00048C604000048C604000048C604000048A9 +:1009D000C604000048C604000048C604000048C61B +:1009E00004000048C604000048C604000048C604CD +:1009F000000048C604000048C604000048C60400C1 +:040A00000048C604E0 +:00000001FF diff --git a/trunk/firmware/slicoss/oasisdbgdownload.sys.ihex b/trunk/firmware/slicoss/oasisdbgdownload.sys.ihex new file mode 100644 index 000000000000..18b376a9f8ad --- /dev/null +++ b/trunk/firmware/slicoss/oasisdbgdownload.sys.ihex @@ -0,0 +1,5124 @@ +:1000000002000000004000000000010000000000AD +:10001000008000001500004081B200001B0000407D +:1000200081B200002100004081B2000003000040C6 +:1000300081B20000000000A898B001000480A24036 +:10004000FD7F00000900A249DD7D00000000004C9A +:1000500080B2010007000040D1B100000000004C58 +:1000600080B201000900A240757D000060000040E0 +:10007000619901000B00A8B17E3100000900004029 +:1000800081B2000000808F981831000010000098A5 +:1000900080E40100000041988094010000000040CD +:1000A00081B201001000009880E401000E00409829 +:1000B000809400001100004081B200000000004068 +:1000C000A59901001900294081320000190014BCD3 +:1000D000803200000E0093BC8032000000005040CF +:1000E00081B201000080004081B200001000004099 +:1000F000A59901001F002940813200001F0014BC97 +:1001000080320000120093BC80320000000050409A +:1001100081B201000180004081B200002000004057 +:10012000A59901002500294081320000250014BC5A +:1001300080320000140093BC8032000000000049AF +:10014000DD810100120100408132010033010040D5 +:10015000813201002A0014BC80320000FE0013BC72 +:10016000803200005495004045990100FFFF004097 +:10017000E599010000002F4049B101000000004056 +:10018000E1B1010000000040FDB3010000000040AB +:10019000FFB30100330018EE803200000000005071 +:1001A00089B001003200A24189500000990000404E +:1001B000813201003094004043990100000000F8B2 +:1001C00020B10100000000FAE0B30100390098EE10 +:1001D00080320000000000FB80B001003B0080F393 +:1001E000DE33000000000047FD9301003E0083F372 +:1001F00080320000F00000F38088010001800040A0 +:100200002EDD0100009400404399010000000046EB +:1002100043C10100000000FA24B101007C0018EE87 +:1002200080320000450095E880320000FFFF00E8C2 +:10023000808801007C0026408132000000000040E0 +:10024000D5990100000000F2ECB30100000000F8B5 +:10025000D6B1010008000040D5990100000000F06F +:10026000D6B10100FF0000F8EE8B0100080100404C +:10027000D5990100FF0000F0808C0100000000F71C +:100280008194010000000040D6B10100FF0000F899 +:10029000808801003C000040D5990100FF0000F07B +:1002A000D68D0100FFFF00F0F0DB010000000048E8 +:1002B00081E00100000000F8819401003C01004051 +:1002C000D599010000000040D6B10100FF0000F800 +:1002D000808801000000004881E00100000000F873 +:1002E000819401003C020040D599010000000040CB +:1002F000D6B101002C000040D5990100000000F8A3 +:10030000D6B101001E0000F082F40100FF3F00F8AA +:1003100080D80100640026408132000000000041C6 +:1003200081D00100FFFF004080D8010000000041A3 +:100330008094010000000040D8B10100680022FA5A +:10034000803000000000004C81E00100010000400E +:1003500080CC010000000040DEB10100000100403F +:10036000D5990100100000FA80E40100000000F6B9 +:100370008194010000000040D6B10100000200405D +:10038000D5990100100000FA80E40100000000F699 +:100390008194010000000040D6B101000600004039 +:1003A000D5990100100000FBD6E5010007000040D0 +:1003B000D5990100180000FBD6E501004800004077 +:1003C000D5990100100000FAD6E501005000004068 +:1003D000D5990100100000FBD6E50100030000FBE9 +:1003E0007A890100000000F0DCB101007C00004CC3 +:1003F000DD9100007C0095E88430000000002FE9CA +:10040000FAB3010000000040D1B10100FF0000423A +:10041000808801003400004080CE01007C00A640AE +:1004200081320000850000408132010002802240BC +:10043000803200007C00004081B200000000004FCC +:1004400081B001008E0009F9813200008C0008F9AA +:100450008132000098001FFDF93300008B009EFDE3 +:10046000813200000000004AF39301000000804840 +:10047000F3930100000000FDF7B301000000804984 +:10048000F3930100000000FC19B1010093000AF988 +:1004900081320000000040FB81B20100000041FDFC +:1004A00081B20100000780F9F38F0100000742F9D3 +:1004B000F38F01009700A2FFF76F00000000434098 +:1004C00081B201000000A2FFFBEF0000000080FCF1 +:1004D000E1B101000000804081B0010000940040C3 +:1004E00047990100BB000040813201000000A24694 +:1004F000FD7F01000094004047990100CE000040BC +:10050000813201000000A244FD7F01000094004000 +:100510004599010000000040F1B10100FF7F00405B +:10052000F5990100FF7F0040F59901009A13004002 +:10053000F599010007000040F59901000100004015 +:10054000F599010000020040F59901000200004009 +:10055000F599010000020040F599010003010040F7 +:10056000F599010000000040F59901009A13004040 +:10057000F59901000B000040F59901008000004052 +:10058000F599010000000040F599010000000040CD +:10059000F599010007000040F599010008000040AE +:1005A000F5990100B0020040F599010000000040FB +:1005B000F599010000000040F59901000229004072 +:1005C000F599010000000040F59901000067004026 +:1005D000F599010000000040F599010080000040FD +:1005E000F599010000008040F599010000000045E8 +:1005F000FD83010000000046FD830100FF7F0040F5 +:1006000025990100C4000040813201000000A2448D +:1006100080B2000000000045FD930100E2000040B0 +:10062000833001000000A2458032010000008046B6 +:10063000FD9301000010004083980100DD000040A0 +:100640002B3101000000A24688B0000000000041EC +:1006500089B00100000000948CB00100FFFF00464B +:1006600080880100A5A5A24080CE000000000048BF +:100670008DF00100C90082418940000000008040E7 +:1006800089B0010000000044FD830100D400004057 +:10069000813201000000A24480B20000E2000008A4 +:1006A000833001000000A245803201000000804438 +:1006B000FD93010000300008839801008000004095 +:1006C0002B990100DB000040893001000000A246A8 +:1006D00080B20000FFFF009480880100A5A5A24021 +:1006E000804E01000000804389B001000384004176 +:1006F0002C990100DE00004081B200000388004117 +:100700002C990100000000208DB0010000009F9690 +:1007100080B20000DF00A2418D5000000000804048 +:1007200081B20100FF7F0040259901000000004CCC +:1007300089E00100DD000044821401000000909473 +:100740008AB0000000000045F0B101001000004533 +:1007500088F401000000004489D00100DD0000445D +:100760002B410100EC00084180320000ED000094B4 +:1007700024B100001000009424F501000000009452 +:10078000F0B10100F200A04489500000DD000044F7 +:100790002B41010000000094F0B10100EF00204463 +:1007A000895000001000004588F40100000000FAA4 +:1007B0008AB001000000A34289D00000F700A0FA2F +:1007C0008A400000000000418BC00100F500A342F8 +:1007D00089500000FFFF0045888801001000004597 +:1007E0008AF40100FC0090448A40000000000041AF +:1007F0008BC00100FFFF00458AA801000000805067 +:100800008BE00100FF7F0040259901007C00004043 +:100810002B9901000030004083980100DD000008A2 +:1008200083140100000000942AB101000080004000 +:10083000F99B0100DD0000FC19310100000040942B +:1008400080B20100DD0000442B4101000000419412 +:1008500080B2010000000041F9C301000000004423 +:100860002BC1010004019F948032000002800040EF +:1008700081B200001001005193B000001001004D42 +:1008800093B000001001004993B000000000004246 +:1008900093B001001001A24193500000000080407D +:1008A00081B201000000104081B20100000011403F +:1008B00081B201000000124081B20100000013402B +:1008C00081B201000000144081B201000000154017 +:1008D00081B201000000164081B201000000174003 +:1008E00081B201000000184081B2010000001940EF +:1008F00081B2010000001A4081B2010000001B40DB +:1009000081B2010000001C4081B2010000001D40C6 +:1009100081B2010000001E4081B2010000001F40B2 +:1009200081B201000000704081B2010000007140FE +:1009300081B201000000724081B2010000007340EA +:1009400081B201000000744081B2010000007540D6 +:1009500081B201000000764081B2010000007740C2 +:1009600081B201000000784081B2010000007940AE +:1009700081B2010000007A4081B2010000007B409A +:1009800081B2010000007C4081B2010000007D4086 +:1009900081B2010000007E4081B2010000007F4072 +:1009A00081B201000000804081B2010000040040DB +:1009B000A199010000000050A1D1010000000040F9 +:1009C0001BB001000000004019B001000000004011 +:1009D00017B001000000004015B001000000004009 +:1009E00013B001000000004011B001000000004001 +:1009F0000FB00100000000400DB0010000000040F9 +:100A00000BB001000000004009B0010000000040F0 +:100A100007B001000000004005B0010000000040E8 +:100A200003B001000000004001B001003B0120487C +:100A3000A15100000000804081B201004701224B1B +:100A4000747D00000000804081B201006000004B16 +:100A500060990100000000B17EB101004801A8408A +:100A6000813200004501004081B200000500804055 +:100A700097980100180000AA9688010000008043A2 +:100A800097F00100070000AA96880100000080404E +:100A900081B201000000005807900100D89F00407B +:100AA00081B2000000000044A5B30100D80200405C +:100AB00081320100F8020040813201000000005C38 +:100AC00007900100D89F0040BFB300005A0122CC1C +:100AD000857F00000000005107900100D89F004072 +:100AE00081B200000000004049B10100AE0300CB1C +:100AF000A3C90100D0140040A19B01000000002008 +:100B000046B1010000000048F1B10100000000D032 +:100B1000F1B10100000000CAF1B10100000000D5F0 +:100B2000E1B10100070000406199010020000020B0 +:100B300062DD01006301A84081320000000000CCAA +:100B400085930100F802004081320100D01400407A +:100B500043990100000000FABAB30100000000FA56 +:100B6000A4B30100000000F8BCB3010000142F4042 +:100B700081B00100000000E7A7B30100000000D829 +:100B8000A9B30100FF0000DD8188010002000040E0 +:100B900080F401007301004080C80100860100DD7F +:100BA000813200000000004010B1000087010040C9 +:100BB00081B200008801004081B20000890100403C +:100BC00081B200008A01004081B200008B01004028 +:100BD00081B200008D01004081B200008F01004011 +:100BE00081B200005001004081B20000B601004017 +:100BF00081B200005001004081B20000C4010040F9 +:100C000081B20000C501004081B2000082020040B4 +:100C100081B200008302004081B22800B802004087 +:100C200081B22800D49F004081B22800D59F0040A7 +:100C300081B22800D69F004081B22800D79F004093 +:100C400081B228007201004181C02800550151493C +:100C5000FD9328005501524AFD932A00550155493C +:100C6000FD832A005501564AFD832A0050019181D7 +:100C700080302A005501454081B22A0050019182FE +:100C800080302A005501464081B22A000000004011 +:100C900089B02B0000002F4081B0010000140040FB +:100CA00049990100B30122DEE16D00000000004C13 +:100CB00049C101000000004181C001009201A2442D +:100CC000816C00000000004C49D101009A012240D3 +:100CD000E16D00009601A2418150000050010041E9 +:100CE000BFB3000000000042BFB301005001A00FDD +:100CF000BD6F0000000000DEE1B101000000004413 +:100D000049C10100B50100401999010000004240AD +:100D100081B20100000043FF85B00100000000DE49 +:100D200019B10100000042FF87B00100000043FF3D +:100D3000E1B101000000004449C1010000002FFFA3 +:100D4000E1B10100081400A480CC0100AA012640F2 +:100D5000813200000000004185C00100A801A24CC2 +:100D600081500000B40122D281320000AF01224143 +:100D7000A56F00005001A2E081320000000000D207 +:100D8000C1B301000000005C8990010000004042F6 +:100D900080B201000000414380B20100000000F079 +:100DA0008894010055010044E0B10000B101004801 +:100DB00049C10000AF01005B89900000A89F00A01E +:100DC0009EB000000000004083B00100001400400D +:100DD000499901000000234081B00100BE0122DEDC +:100DE000E16D00000000004C49C10100000000411D +:100DF00081C00100B901A244816C00005001004390 +:100E0000BFB30000000000F818B10100000040F876 +:100E100080B20100000041F080B2010000000040FB +:100E2000F1B1010000000040F1B1010055010040A6 +:100E3000E1B10000C601004091B000000000004197 +:100E400091B00100D0142E4049B1010005000040CE +:100E5000A39B0100080000DD81F40100CB010040EC +:100E600080C801000000004010B10000D101004026 +:100E700081B00000530100DEA1B30000E301004097 +:100E800081B20000E501004081B00000EB010040AC +:100E900081B20000520100DFE1B10000000000D08B +:100EA000BAB30100000000DEA1B10100020000D2CF +:100EB000A5E70100000000D2C1B30100000000005E +:100EC000F0B10100DB012244C1530000DA0184418A +:100ED00081400000DE01004081320100000000D0AE +:100EE00045B10100D5010041A1C10000DA02004076 +:100EF00081320100F802004081320100550100DD1D +:100F0000A1B100000000004081B00100400000409D +:100F1000A59B0100DA02004081320100400000D3AD +:100F2000A7CB0100F80200E0A5B3000003000040D9 +:100F3000A39B0100530100DEA1B3000000000044A8 +:100F4000BFB30100000000DE819001005001A2BA91 +:100F500080040000600000DE61990100E801A8B192 +:100F60008030000052010040E0B10000000000D0DD +:100F7000BAB301006B020040819801006002004D8D +:100F80008330010000000044E1B301000000004490 +:100F9000E3B3010000000044E5B301000000004499 +:100FA000E9B3010000000044EBB30100000000447D +:100FB000F5B3010000000044F7B301000000004455 +:100FC000F9B30100F90122408F6F00007802004060 +:100FD00081980100600200C7833001008002004058 +:100FE000819801006002004283300100000000E8A7 +:100FF000F1B10100000000E9F1B10100000000EAD8 +:10100000F1B10100000000EBF1B10100000000852A +:10101000F0B10100000000ECF1B10100000000EDB2 +:10102000F1B10100000000B2F0B10100000000A920 +:10103000F0B10100000000ACF0B10100000000AB15 +:10104000F0B10100000000B8F0B10100000000B9EB +:10105000F0B10100000000BAF0B10100000000BBD7 +:10106000F0B101000C02B8408130000000000040E7 +:10107000819001000E02B940813200000000004161 +:10108000819001001002BA4081320000000000424D +:10109000819001001202BB40813200000000004339 +:1010A000819001001402BC40813200000000004425 +:1010B000819001001602BD40813200000000004511 +:1010C000819001001802BE408132000000000046FD +:1010D000819001001A02BF408132000000000047E9 +:1010E000819001001C02C8408132000000000048CD +:1010F000819001001E02C9408132000000000049B9 +:10110000819001002002CA40813200000000004AA4 +:10111000819001002202CB40813200000000004B90 +:10112000819001002402CC40813200000000004C7C +:10113000819001002602CD40813200000000004D68 +:10114000819001002802CE40813200000000004E54 +:10115000819001002A02CF40813200000000004F40 +:10116000819001002C02F04081320000000000500C +:10117000819001002E02F1408132000000000051F8 +:10118000819001003002F2408132000000000052E4 +:10119000819001003202F3408132000000000053D0 +:1011A000819001003402F4408132000000000054BC +:1011B000819001003602F5408132000000000055A8 +:1011C000819001003802F640813200000000005694 +:1011D000819001003A02F740813200000000005780 +:1011E000819001003C02F84081320000000000586C +:1011F000819001003E02F940813200000000005958 +:10120000819001004002FA40813200000000005A43 +:10121000819001004202FB40813200000000005B2F +:10122000819001004402FC40813200000000005C1B +:10123000819001004602FD40813200000000005D07 +:10124000819001004802FE40813200000000005EF3 +:10125000819001004A02FF40813200000000005FDF +:101260008190010000000040F0B10100400000400A +:10127000A59B0100D802004081320100F802004025 +:1012800081320100D0142E06A5B30100400000D326 +:10129000A7CB0100000000F0F1B10100000000F157 +:1012A000F1B10100000000F2F1B10100000000F412 +:1012B000F1B10100000000F5F1B10100000000FAF9 +:1012C000F1B10100000000FBF1B10100000000FCE1 +:1012D000F1B10100000000EBF1B10100000000EEEF +:1012E000F1B10100000000EFF1B10100000000F3D6 +:1012F000F1B10100000000F6F1B10100000000FDB5 +:10130000F1B10100DB0100C7E1B100000000804045 +:1013100081B20100660200488032000000005140A6 +:101320001AB1010000004D4081B2010000004540AB +:1013300081B201006302A241835000005F02494074 +:1013400081B20000000052401CB1010000004E407C +:1013500081B201000000464081B201006802A24152 +:10136000835000005F024A4081B20000000000A0EC +:101370009EB0010000000080D8B30100000000A171 +:10138000D0B30100000000A2D2B30100000000A40D +:10139000D4B30100000000D0D6B30100000000D19A +:1013A000DCB30100000000D2DEB3010000000088C1 +:1013B000DAB30100000000D48EB30100000000D3B6 +:1013C000E6B30100000000ACECB30100000000999E +:1013D000FAB30100000000D5E0B30100000000D521 +:1013E000E2B30100000000D5E4B30100000000D525 +:1013F000E8B30100000000D5EAB30100000000D509 +:10140000F4B30100000000D5F6B30100000000D5E0 +:10141000F8B30100000000C7A9B101000000004FAF +:1014200040B101008402004091B000000000004182 +:1014300091B0010007000040A39B0100080000DDFF +:1014400081F401008802004080C8010000000040D3 +:1014500010B100008D02004081B2000098020040EF +:1014600081B2000098020046A3B300009B02004036 +:1014700081B20000A102004081B200008F0223501F +:10148000A56F000000000050A5B30100E802004273 +:10149000A5630100F802004081320100D0142D4004 +:1014A00049B10100000000D0BAB30100000000DE25 +:1014B000A1B10100000000F800B001009702224431 +:1014C000A553000094020041A1C10000550100DDB8 +:1014D000A1B10000E80200DEA1330100F8020040E3 +:1014E000813201005501004081B20000000000453A +:1014F000BFB301005001A2D2777D0000000000D2EE +:1015000061B10100000000DE63B101009E02A8404D +:10151000813200005501004081B20000E802005411 +:10152000A5330100F802004081320100D0142D40A3 +:1015300049B10100000000F8D0B30100000000F83C +:10154000D2B30100000000F8D4B30100000000F89D +:10155000D6B30100000000F808B10100AC02004061 +:10156000819801006002004683300100550100406F +:1015700081B20000000000A09EB00100000000E861 +:1015800043B10100000000E945B10100000000EA9C +:1015900049B10100000000EBA1B101000000004FC3 +:1015A00040B101000400004081B20000040000408E +:1015B00081B200000400004081B20000040000403D +:1015C00081B200000400004081B20000040000402D +:1015D00081B20000D0142E4049B101000500004046 +:1015E000A39B010000000040C1B30100080000DD22 +:1015F00081F40100BD02004010C90000C3020005D3 +:1016000081B000005001004081B20000CB02000513 +:1016100081B000005001004081B20000D0020044BF +:10162000A5B30000D2020044A5B3000002000040B0 +:10163000A4E70100000000E081B10100FFFF00C14C +:10164000F0890100C802224181500000C40200411B +:10165000C1C30000DA02004081320100F8020040FC +:10166000813201005501004081B2000002000040BB +:10167000A4E70100000000E091B10100FFFF00C9F4 +:10168000F0890100C802224181500000CC020041D3 +:10169000C1C30000FFFF00DE85890100C80200C24F +:1016A000E0B10000FFFF00DE95890100C80200CA1A +:1016B000E0B100000400004081B2000004000040DE +:1016C00081B200000400004081B20000040000402C +:1016D00081B20000000000E7A7B30100000000D8BD +:1016E000A9B301000000004049B10100AE0300CBE6 +:1016F000A3C901000000002046B10100000000D293 +:10170000F1B10100000000D3F1B10100000000D4EC +:10171000F1B10100000000D0E1B10100000000D1F2 +:1017200061B101002000002062DD0100E202A8405A +:1017300081320000000080CC85930100040000404D +:1017400081B200000400004081B2000004000040AB +:1017500081B20000000000E7A7B30100000000D83C +:10176000A9B301000000004049B10100AE0300CB65 +:10177000A3C901000000002046B10100000000D212 +:10178000F1B10100000000D0F1B10100000000D370 +:10179000F1B10100E10200D4E1B100000400004019 +:1017A00081B200000400004081B20000040000404B +:1017B00081B200000400004081B20000040000403B +:1017C00081B200000400004081B20000040000402B +:1017D00081B200000000A2CC85FF00000000005094 +:1017E00081B00100FA02A24181500000F902A2F288 +:1017F00080300000000080CC8583010004000040A0 +:1018000081B200000400004081B2000004000040EA +:1018100081B20000B5030040A199010000002F41F2 +:1018200099B301000A032244816C0000120322488C +:10183000816C00000C03224C816C000016032250C6 +:10184000816C000017032254816C00001903225898 +:10185000816C00001E03225C816C0000500100407E +:1018600081B20000000000BC09B00100DD9F00CA89 +:1018700001B000000000004003B001000000004182 +:10188000F38301001003A242056C00000000004138 +:1018900005B00100DD9F22CA07140000DD9F00454E +:1018A000F3930000DD9F2043956F0000DD9F80CA09 +:1018B00005300000DD9F220180300000DD9F00CB5D +:1018C000DB910000570100BCABB30000000000BC7E +:1018D000B1B30100DD9F00CACFB30000FF0000CA12 +:1018E00081880100DD9FA240747D000060002040DF +:1018F000609901001B03A8B1823000001A03004068 +:1019000081B20000DD9F00CA79B3000004000040EE +:1019100081B200000000004E81B0010000000043D1 +:10192000CB8301000000454081B201002203A241A7 +:10193000815000000000454081B201000000454098 +:1019400081B201002D039182823000000000008AE4 +:1019500080B00100AE9F004080CE01002B03A64066 +:10196000813200002D03564081B20000B5030040D3 +:10197000A19901000000005307900100B503004049 +:10198000A19901000000005207900100D89F00417A +:101990008BB300000000004E81B001000000004247 +:1019A000CD8301000000464081B201003203A24114 +:1019B000815000000000464081B201000000464016 +:1019C00081B201003D039181823000000000008956 +:1019D00080B00100AE9F004080CE01003B03A640D6 +:1019E000813200003D03554081B20000B503004044 +:1019F000A19901000000005207900100B5030040CA +:101A0000A19901000000005307900100D89F0041F8 +:101A10008BB30000B0030040A1990100C4142F4013 +:101A200099B301005701004049B100000400004093 +:101A300081B200000400004081B2000004000040B8 +:101A400081B200000400004081B2000004000040A8 +:101A500081B200003094004043990100009000F8EA +:101A600080980100100000F288E40100200000408E +:101A7000209901000000005F239101004D031F9198 +:101A80008032000030000040209901000000005F1B +:101A90002391010050031F9180320000400000405C +:101AA000209901000000005F2391010053031F9162 +:101AB000803200000000005F2391010055031F9158 +:101AC000803200000008804020990100040000409E +:101AD00081B200000000004784B001000000A2486D +:101AE000848400000000005F61B101000000005C20 +:101AF0008F9001000000004762B101005A03A84026 +:101B000081320000000800478EC801005803005CC5 +:101B10008F800000E00000406199010058152D40C1 +:101B20008DB00100D0142DF088B00100000000FA43 +:101B30008AB001000000004581B0010007000045A7 +:101B400082880100000000438BF001000000004883 +:101B500083E0010000000046829401002000004163 +:101B600060990100000000418DC001007403225FF4 +:101B70008D6C00006503A2418150000063030040AA +:101B800081B2000008000040859801000000004478 +:101B900082B001000000004186B00100001C00433B +:101BA00086D801000000A641855001007003004165 +:101BB00083E000006E030040813201000000004815 +:101BC00085E00100D0142F468494010020000042DB +:101BD00060990100C0000040619901000000804050 +:101BE00081B201000400004081B200000400004006 +:101BF00081B200000400004081B2000004000040F7 +:101C000081B200000400004081B2000004000040E6 +:101C100081B20000070000458088010000000043F9 +:101C20008BF0010000040040839801008503A0416F +:101C3000815000008303004182E8000000008041E1 +:101C40008EC001000400004081B20000040000408A +:101C500081B200000000004049B1010000020040D4 +:101C600083980100003900404599010000000040C0 +:101C7000F1B101008B03A24183500000000000403D +:101C800085B001000B00004482F401001A1500A683 +:101C900086B0010070150040459901000008004021 +:101CA000F199010000000042F0B10100003900404C +:101CB000E1990100040000406199010070150043A2 +:101CC000629901009503A840813200009703225ACF +:101CD000737D00007A000040619901009803A8B16B +:101CE0007E3100000008004284C801009003A24138 +:101CF000835000000000804081B2010004000040D9 +:101D000081B200000400004081B2000004000040E5 +:101D100081B2000058152D408DB00100D0142DF077 +:101D200088B00100000000408FB00100010000A653 +:101D300090B0010000F800489098010000000045B4 +:101D400093B00100000000FA8AB001008003004057 +:101D500081320100020000A680B00100AC032240E5 +:101D6000826C0000B0030040813201005803004043 +:101D700081320100000000418DC00100B503225FE7 +:101D80008D6C0000A703A24193500000A503004002 +:101D900081B20000FF070047848801000000A640D0 +:101DA00081B20000ED9F0047803001000002004733 +:101DB0008EC80100B003004081B200000000004462 +:101DC00050B30100BB032018896C0000040000A67A +:101DD00084B00100200000A686B001000010004081 +:101DE000559B0100BE03004081B20000040000A624 +:101DF00084B00100200000A686B001000010004061 +:101E0000559B01000000004250D30100000000A8D3 +:101E10004FB30100000000434ED301006E030040A9 +:101E2000813201008203004280300100B003004093 +:101E300081320100C70322A78F6C00005A030040C3 +:101E400081320100C403004081B2000000008040E4 +:101E500081B20100C8142EBB85B00100000000EE65 +:101E600082B0010000000041E0B10100000000A2CA +:101E7000A0B3010000000044A5B30100E19F00CA27 +:101E8000A7330100E09F004081B200000400004041 +:101E900081B20000D6032242756F0000D8032241B0 +:101EA000756F0000DA031ECA81320000DC031FCA0E +:101EB00081320000000000CAC9B10100DD9F00426C +:101EC00075B30000000000CACDB10100DD9F0041E4 +:101ED00075B30000000000CACFB10100DD9F0040D3 +:101EE00075B30000008100A6C6B10100DD9F00406F +:101EF00081B20000008000A6C6B10100DD9F004055 +:101F000075B300000400004081B2000004000040EE +:101F100081B200004501004D933001004501004EA3 +:101F2000933001004501004C93300100EC9F0040CC +:101F300081320100DD9F004081B2000004000040BA +:101F400081B200000400004081B2000004000040A3 +:101F500081B200005495004045990100DD9F00CA00 +:101F6000E5B100000400004081B200000400004020 +:101F700081B200000400004081B200000400004073 +:101F800081B200000400004081B200000400004063 +:101F900081B20000CC142E4087B00100000000A2E6 +:101FA000A0B3010015040043B2330100000068DA59 +:101FB00089B001007C0000408B98010000000050B7 +:101FC00089F001000000004189D0010003000044B5 +:101FD000888C01000000004487C00100000000411F +:101FE000A5B3010015040043B2330100000000DA7C +:101FF000F1B101000000004487C001000000004171 +:10200000A5C301000B042244895000000B042244A4 +:102010008B500000FA03A250A56F000000000042A0 +:10202000A5E30100000000CAA7B30100E19F00BBC7 +:1020300085300100CC142ED295C30100AE0300CB35 +:10204000A3C901000000002042B1010000000050BF +:1020500081B001000804A241815000000704A2F2EF +:1020600080300000FA030040A5B3000000000042E9 +:10207000A5E30100000000CAA7B30100E19F00BB77 +:1020800085300100E09F004081B200000400004064 +:1020900081B20000000000D92BB101000010004007 +:1020A00083980100DB00004081320100FFFF0094B3 +:1020B000B48B01000000804081B20100000000D913 +:1020C0002BB101000010004083980100DD000040AA +:1020D0008132010000008094B4B30100040000408C +:1020E00081B200000400004081B200000400004002 +:1020F00081B200000400004081B2000004000040F2 +:1021000081B200000400004081B2000004000040E1 +:1021100081B20000000000D92BB10100000000DAFC +:1021200027B1010006C000402D990100DE000040EB +:1021300081320100001000408398010002C4004178 +:102140002C990100DE000040813201000040004077 +:1021500083980100058200412C990100DE000040B7 +:10216000813201002D048094803200000C01004077 +:10217000813201002804004081B200000480004048 +:102180002D990100DE0000408132010000008040F6 +:1021900081B201003104001210C9000000488040E3 +:1021A0000B980100C04980400B980100804B804093 +:1021B0000B980100404D80400B980100004F80407B +:1021C0000B980100C05080400B9801008052804065 +:1021D0000B980100405480400B980100005680404D +:1021E0000B980100C05780400B9801008059804037 +:1021F0000B980100405B80400B980100005D80401F +:102200000B980100C05E80400B9801008060804008 +:102210000B980100406280400B98010000648040F0 +:102220000B980100C06580400B98010080678040DA +:102230000B980100406980400B980100006B8040C2 +:102240000B980100C06C80400B980100806E8040AC +:102250000B980100407080400B9801000072804094 +:102260000B980100C07380400B980100807580407E +:102270000B980100407780400B9801000079804066 +:102280000B980100C07A80400B980100807C804050 +:102290000B980100407E80400B9801000400004034 +:1022A00081B200000400004081B200000400004040 +:1022B00081B200000400004081B200000400004030 +:1022C00081B200000400004081B200000400004020 +:1022D00081B200005904001210C900000080804043 +:1022E0000B980100008280400B9801000084804020 +:1022F0000B980100008680400B9801000088804008 +:102300000B980100008A80400B980100008C8040EF +:102310000B980100008E80400B98010000908040D7 +:102320000B980100009280400B98010000948040BF +:102330000B980100009680400B98010000988040A7 +:102340000B980100009A80400B980100009C80408F +:102350000B980100009E80400B98010000A0804077 +:102360000B98010000A280400B98010000A480405F +:102370000B98010000A680400B98010000A8804047 +:102380000B98010000AA80400B98010000AC80402F +:102390000B98010000AE80400B98010000B0804017 +:1023A0000B98010000B280400B98010000B48040FF +:1023B0000B98010000B680400B98010000B88040E7 +:1023C0000B98010000BA80400B98010000BC8040CF +:1023D0000B98010000BE80400B98010004000040F3 +:1023E00081B200000400004081B2000004000040FF +:1023F00081B200000400004081B2000004000040EF +:1024000081B200000400004081B2000004000040DE +:1024100081B200000000004087B1010000000040D0 +:1024200097B001000000004B80B10100010000A640 +:1024300082B1010082048541974000000000004005 +:1024400097B101000000004097B001000000004B70 +:1024500090B10100010000A692B1010087048541FE +:10246000974000000000804081B20100040000405D +:1024700081B200000400004081B20000040000406E +:1024800081B200000400004081B20000040000405E +:1024900081B2000090046040813200000000001210 +:1024A00080B10100FFFFF04B82890100930460407E +:1024B000813200000000004A80B101000100F0A656 +:1024C00082B101009604604081320000FFFF004BA2 +:1024D000848901000000F0C224B001000000004A1D +:1024E00090B10100FFFF804B928901000000004A7B +:1024F00090B10100010080A692B10100FFFF004BE6 +:1025000094890100000080CA94B0010004000040DA +:1025100081B200001000004E98E4010000000007A6 +:10252000989401000000004399E001000000008041 +:10253000989401000000004999E001000000004C5F +:1025400088940100A604474081320000AD04222097 +:10255000876F000000001F4081B2010000000040B2 +:1025600081B201000000004081B201000000004083 +:1025700081B20100A604004081B2000000001F806B +:1025800086B30100B004224F777D0000C0040040F4 +:10259000813201000000004F61B1010000000044E1 +:1025A00062B10100B104A84081320000B804224B9E +:1025B000897C0000B604224F777D0000C0040040F3 +:1025C000813201000000004562B10100B604A8405C +:1025D000813200000000802087B301000400004029 +:1025E00081B200000400004081B2000004000040FD +:1025F00081B200000400004081B2000004000040ED +:1026000081B200000400004081B2000004000040DC +:1026100081B200000000005099B001006F0000403E +:1026200061990100C104A8B152330000C604224BD5 +:10263000537F00006F00004061990100C404A8B1FD +:102640007E310000C104A241995000000000A24F59 +:1026500077FD00000400004081B20000040000404B +:1026600081B200000400004081B20000040000407C +:1026700081B200000400004081B20000040000406C +:1026800081B200000400004081B20000040000405C +:1026900081B200001000004E98E401000000000725 +:1026A000989401000000004399E0010000000080C0 +:1026B000989401000000004899E00100D604004C05 +:1026C00088940000D604474081320000DD042220B7 +:1026D000876F000000001F4081B201000000004031 +:1026E00081B201000000004081B201000000004002 +:1026F00081B20100D604004081B2000000001F80BA +:1027000086B30100E004224F777D0000F004004012 +:10271000813201000000004F61B10100000000445F +:1027200062B10100E104A84081320000E804224ABD +:10273000897C0000E604224F777D0000F004004011 +:10274000813201000000004562B10100E604A840AA +:10275000813200000000802087B3010004000040A7 +:1027600081B200000400004081B20000040000407B +:1027700081B200000400004081B20000040000406B +:1027800081B200000400004081B20000040000405B +:1027900081B200000000005099B001006F000040BD +:1027A00061990100F104A8B152330000F604224AF5 +:1027B000537F00006F00004061990100F404A8B14C +:1027C0007E310000F104A241995000000000A24FA8 +:1027D00077FD00000400004081B2000004000040CA +:1027E00081B200000400004081B2000004000040FB +:1027F00081B200000400004081B2000004000040EB +:1028000081B200000400004081B2000004000040DA +:1028100081B200007B000040619901000005A8B171 +:102820008030000012051D4080320000401800403A +:1028300049990100040000A686B001001005A240DD +:1028400086040000DE9F9C4080320000FFFF0040B5 +:1028500088880100300500504731010036000044EF +:1028600088CC01000C055240813200003005004048 +:10287000473101000000004189B0010030050048E7 +:10288000473101003005000547310100DE9F00405F +:1028900081B200002800004047991B00DE9F0041E4 +:1028A000E1C11A007818004049991B00190522540B +:1028B000817C1A001405424081321A00008200B364 +:1028C00067DF1B0000001A4493931B0028000040A0 +:1028D00047991B00300500418930010027050F4052 +:1028E00080320000FF7F00408888010030050050E2 +:1028F000473101003600004488CC01001F05994093 +:10290000803200000000004889D0010021059B4072 +:10291000803200000000004C89D0010023051F44D4 +:1029200080320000300500404731010000000041C6 +:1029300089B00100300500484731010030050058DA +:1029400047310100DE9F004081B2000010000040CE +:1029500086F401006F00004386880100DE9F260593 +:10296000473100003005004189300100DE9F004002 +:1029700081B200000400004081B200000400004069 +:1029800081B200000400004081B200000400004059 +:1029900081B200000000A044F041010000000040AE +:1029A00081B2010000008041E1C10100040000404B +:1029B00081B200000400004081B200000400004029 +:1029C00081B200000400004081B200000400004019 +:1029D00081B200004C010007913001000000A240CC +:1029E00097EC00000000800591C001000400004049 +:1029F00081B200000400004081B2000004000040E9 +:102A000081B200000400004081B2000004000040D8 +:102A100081B200004C010040813201004405A24017 +:102A2000976C00003A000040B39B01004505004050 +:102A300081B2000040000040B39B01001004004040 +:102A400081320100000000DAF5B1010010040042FB +:102A5000B3430100000000DAF5B1010010040042A8 +:102A6000B3430100000000DAF5B101004E00004060 +:102A7000B39B01001004004081320100080000DA1D +:102A8000F7F5010050000040919801000000004758 +:102A90008FB0010010040048B2330100000000DADA +:102AA000F7B10100080000DAF7F50100000000426C +:102AB00091C001005005A2418F500000000000416C +:102AC00045D1010008000040B39B01001004004004 +:102AD00081320100000000DAFDB101000A0000406F +:102AE000B39B01001004004081320100000000DAB5 +:102AF000FDB101001A000040B39B0100100400402A +:102B000081320100000000DAFDB101001800004030 +:102B1000B39B01001004004081320100000000DA84 +:102B2000FDB1010038050040813201001E0000485F +:102B3000B2CB01001004004081320100000000DA35 +:102B400091C0010000000048B2CB01001004004019 +:102B50008132010000006EDA8FB0010002000048EF +:102B6000B2CB01001004004081320100000000DA05 +:102B7000FDB1010004000048B2CB01001004004088 +:102B800081320100000080DAFDB101000400004044 +:102B900081B200007A052245FD7F0000401600400A +:102BA00045990100DB9F00404931010008000048C1 +:102BB000B2CB010015040040813201007805A2402B +:102BC0008F6C00007D052220B56F00007A05004063 +:102BD00081B20000DA9F004081321F007D05224053 +:102BE000976C1E007A05424081321E000000004FA3 +:102BF00067931F00DF9F005867931E005416004024 +:102C000047991F00000000FEF4B11F0000000040C3 +:102C100081B21F00000000FEF4B10100000000407E +:102C200081B20100000000FEF4B10100000000408C +:102C300081B20100000000FEF4B10100000000407C +:102C400081B20100000000FEF4B10100000000406C +:102C500081B20100000000FEF4B10100000000405C +:102C600081B20100000000FEF4B101004600004006 +:102C7000B39B01001004004081320100080000DA1B +:102C8000F7F501004800004095980100000000445D +:102C900097B001001004004AB2330100000000DACE +:102CA000F7B10100080000DAF7F50100000000426A +:102CB00095C001009005A241975000002A000040F5 +:102CC000A59B010040160040A19B0100000000CA26 +:102CD000A7B30100E19F00BB85300100E09F0040E9 +:102CE00081B200000400004081B2000004000040F6 +:102CF00081B200000400004081B2000004000040E6 +:102D000081B200000400004081B2000004000040D5 +:102D100081B20000B8052245FD7F0000E0150040AB +:102D2000479901001A0000A280DC01000000005059 +:102D3000F1B10100F0150040F1990100000000CA56 +:102D4000F1B101000700004061990100200000403E +:102D500062DD0100A705A8BBE131000000000050C2 +:102D600083B00100AA05A24183500000A905A2F288 +:102D7000823000004C01004081320100B005A240C9 +:102D8000976C00003A000040B39B0100B105004081 +:102D900081B2000040000040B39B0100F0150040EC +:102DA000439901001004004081320100B805A2FAE5 +:102DB000B46F000010040042B3430100B805A2FA4A +:102DC000B46F000010040042B3430100BB0522FAB7 +:102DD000B46F0000B8054240813220000000004E70 +:102DE00067932100DF9F0058679320004016004042 +:102DF00045992100DB9F004049312100F615004034 +:102E0000439921005C1600404599210000006EFAAC +:102E10008EB021000000004081B20100000000FEE1 +:102E2000F4B101000000004081B20100000000FE8A +:102E3000F4B101000000004081B20100000000F088 +:102E4000B4B30100C905A2408F6C0000FC1520201E +:102E5000E1B10100CE05004081B22400DA9F0040BC +:102E600081322500CE052240976C2400CB054240DC +:102E7000813224000000004F67932500DF9F005837 +:102E80006793240038050040813225001E00004869 +:102E9000B2CB25001004004081320100D30522503E +:102EA000B56F00000000005091C001000000004814 +:102EB000B2CB0100F615004043990100200400F256 +:102EC000B433010002000048B2CB0100F815004005 +:102ED00043990100200400F2B433010004000048CB +:102EE000B2CB0100FA15004043990100200400F222 +:102EF000B433010008000048B2CB0100FC150040CB +:102F000043990100000000F094B00100FFFF004A67 +:102F1000B48B010020040040813201000A00004807 +:102F2000B2CB01001000004AB4F7010020040040B9 +:102F30008132010038050040813201001E00004846 +:102F4000B2CB01001004004081320100E90522509B +:102F5000B56F0000EA050050B5B300000000004066 +:102F6000B5B301002004004081320100E09F004021 +:102F700081B200000400004081B200000400004063 +:102F800081B200000400004081B200000400004053 +:102F900081B2000000160040479901003031004026 +:102FA000F599010032330040F599010034350040B5 +:102FB000F599010036370040F59901003839004095 +:102FC000F599010041420040F59901004344004059 +:102FD000F599010045460040F59901004748004039 +:102FE000F5990100494A0040F59901002C00004084 +:102FF0008398010000000040F7B10100FC05A241E8 +:103000008350000080162E0683B00100360000FBBE +:10301000F6A90100FF05A2418350000022000040F4 +:1030200083980100000000FBF6B101000206A241F6 +:10303000835000006200004095980100DC9F004032 +:103040008132010000162D0683B001008016004079 +:10305000459901005C0000FBF6A901000806A241A9 +:103060008350000000000070F9B101000000007101 +:10307000F9B1010000000072F9B101000000007315 +:10308000F9B1010000000074F9B1010054000040E2 +:1030900095980100DC9F0040813201000000007023 +:1030A00095B0010014062270B56F00000000804149 +:1030B00097B001000000804097B00100040000407C +:1030C00081B200000400004081B200000400004012 +:1030D00081B20000456700A6E0B201000123007044 +:1030E000E19A0100CDEF00A6E2B2010089AB0071C8 +:1030F000E39A0100BA9800A6E4B20100FEDC007277 +:10310000E59A0100321000A6E6B201007654007381 +:10311000E79A0100D2C300A6E8B20100F0E1007412 +:10312000E99A01008016004A44C901000000000726 +:1031300081B001000000004A80D001000000004082 +:10314000F7B101002506A241815000008016004A17 +:1031500044C90100FC162A47E7B501000300004AF4 +:10316000E8E50100000000408DB001005003004080 +:10317000A399010080163D468DE00100000000503B +:1031800089B00100000000FC40B0010000000041D7 +:10319000A3C101002E06A24189500000000000706A +:1031A000EBB2010000000071EDB2010000000072FE +:1031B000EFB2010000000073F1B2010000000074E2 +:1031C000F3B201000000004083B001000F00004195 +:1031D0008088010050030040A2C901004B06A050A6 +:1031E000836C00000D00004098C801000000004FF3 +:1031F000998401005003004CA2C901000000002086 +:1032000086B001000800004098C801000000004F8F +:10321000998401005003004CA2C901000000002065 +:1032200086A401000200004098C801000000004F81 +:10323000998401005003004CA2C901000000002045 +:1032400086A4010050030040A2C901000000004311 +:1032500040A401000100002088E401000000005F9C +:1032600041F0010000000044409401000500007599 +:1032700089E401001B00007585F401000000004492 +:10328000849401005506A353836C0000000000766F +:1032900089B00100000000778984010000000076F9 +:1032A0008BB00100000000208BA40100000000781A +:1032B0008B840100640600458894000027000041CB +:1032C00080CE01005A06AA4081320000000000763C +:1032D00089B001000000007789A40100640600782D +:1032E00089A400003B00004180CE01005706AA409F +:1032F000813200000000007689B0010000000077F4 +:1033000089840100000000768BB001000000007885 +:103310008B840100000000458894010000000077C4 +:103320008BB00100000000788B840100640600452A +:10333000889400000000004484C00100000000796F +:1033400085C001000000002084C001006B06A3536B +:10335000836C0000825A00A684C001009979004263 +:1033600084C801007806004081B2000027000041B7 +:1033700080CE01007006AA4081320000D96E00A6FE +:1033800084C00100A1EB004284C80100780600401F +:1033900081B200003B00004180CE01007506AA40CA +:1033A000813200001B8F00A684C00100DCBC0042FB +:1033B00084C801007806004081B2000062CA00A6FD +:1033C00084C00100D6C1004284C8010078060040D4 +:1033D00081B2000000000078F3B201000000007725 +:1033E000F1B201001E00007689E4010002000076BF +:1033F000EFF6010000000044EE96010000000075A9 +:10340000EDB2010000000042EAB2010000000041FC +:1034100083C001004F00004180CE010037062A40E2 +:103420008132000000000075E1C20100000000765A +:10343000E3C2010000000077E5C20100000000784F +:10344000E7C2010000000079E9C201002B068141BA +:103450008D4000000000804081B201000400004067 +:1034600081B200000400004081B20000040000406E +:1034700081B200000400004081B20000040000405E +:1034800081B200000400004081B20000040000404E +:1034900081B2000000000050FD9301004016004082 +:1034A00045990100DB9F00404931010008000048B8 +:1034B000B2CB01001504004081320100B906224060 +:1034C0008F6C0000DA9F004081320100B906A240F3 +:1034D000976C00005E160040439901007C1620F6B0 +:1034E000E0B101000000004031B301009D06224F11 +:1034F0008F7C000000000051FD9301009F062240D8 +:103500008F7C0000A3060054FD930000A106224218 +:103510008F7C000000000052FD930100A3062241B1 +:103520008F7C000000000053FD930100B70622517C +:10353000FD7F000038050040813201000C0000488A +:10354000B2CB01001004004081320100B206A2405B +:10355000B56F00001E000048B2CB01001004004807 +:1035600096300100000000DA97C001000400004B13 +:10357000B2CB010010040040813201000E0000486F +:10358000B2CB010020040040813201000C00004851 +:10359000B2CB010000000030B5B3010020040040B0 +:1035A000813201000E000048B2CB0100100400403F +:1035B00081320100B6062240B56F0000BA06005401 +:1035C000FD93000000000051FD8301001C0000FE7F +:1035D0007FD90100BA06A6408132000000000055E4 +:1035E000FD9301000000804081B201000400004012 +:1035F00081B200000400004081B2000004000040DD +:1036000081B200000400004081B2000004000040CC +:1036100081B20000E79F004081320100C406225CB5 +:103620001F7C0000E39F00881CB00000E99F005C45 +:103630001F00010000002E0548B1010000000040FD +:10364000E1B1010004002D0348B10100000000F0C9 +:103650003CB001002800001402C801000000000175 +:1036600034B0010000002D0532B001002200000539 +:103670000AC801001000000348C90100000000F85A +:1036800018B00100000000F804B00100000000F8CC +:103690000EB001000C0000A40CC80100EA9F00401D +:1036A000813201000000004023B001000A0722011E +:1036B0008032000000003C4423E0010000002EA402 +:1036C00080B001000000001048C10100D906A30726 +:1036D000026C0000DA0668011AB0000000006807FA +:1036E0001AB001000000000D02D00100000000052A +:1036F000F0B101000000000CF0B101000000000278 +:10370000E0B101000000000D0AC00100EC062240FB +:10371000036C0000E6062242236C0000000000411A +:1037200023C001000000004761B10100200000A497 +:1037300062DD01002307284081320000E3060040DB +:1037400081B200000000001080C0010000000047AE +:1037500061B101000000004062B10100E806A8402C +:1037600023300000E39F00881CB0000023070040C6 +:1037700081B200000000001080C00100000000477E +:1037800061B101000000004062B10100EE06A840F6 +:1037900023300000E39F00881CB0000022000019C5 +:1037A00048C9010000002D1448C101000F0000F2BB +:1037B0003A880100000000423BE001000E000014C6 +:1037C00002C801000000001D02C00100FA06231A11 +:1037D000025000000000004603C001002307000162 +:1037E00034C000000C002D1D48C10100F00000F2A3 +:1037F000308801000000004231F001000000001498 +:1038000002B001000000001D02C00100000000180D +:1038100002C001000207221A025000002307000123 +:1038200034C000002200001948C9010002002D1414 +:1038300048C10100000000F614B001000000001DA6 +:1038400014D001000000001814D001000000001E78 +:1038500024B001001200001710C801002307001A4D +:1038600010C0000000003C4423E00100000000A460 +:1038700086B0010000002E1048C101000F07A312FE +:103880000E6C0000100760071AB000000000601204 +:103890001AB001000000680D16940100FFFF000B34 +:1038A00016D8010000000008F0B101000000000C73 +:1038B000F0B1010000000002E0B1010000000010C2 +:1038C00086C001000000004661B1010020000043F5 +:1038D00062DD01001707A85C1F1000004007220DE1 +:1038E000145000004007220D245000000000000D7D +:1038F00010C001001E072242236C00002307004174 +:1039000023C000000000004661B10100400000102B +:1039100062DD01001F07A85C1F000000E39F008814 +:103920001CB000000000004023B001003F07A20DC2 +:103930000E5000002E0722461F7C000000000046AB +:103940001F8001003080001042C901002C0722F2C4 +:10395000640600000000004761B101004000001053 +:1039600062DD01002907A84081320000E39F008842 +:103970001CB0000020800003469901000000005F99 +:10398000E191010000002D0648B10100000000F89F +:1039900018B00100000000F804B0010033071FF068 +:1039A0000E300000D306004C0DC0000000002E5F5A +:1039B0000F800100D3062307146C000030000010B4 +:1039C00048C9010024000040F199010000000003F3 +:1039D000F0B1010000000000F0B10100000000168D +:1039E000F0B101002400000000C801000000004701 +:1039F00061B10100200000A462DD01003C07A8467F +:103A00001F100000D30600030CB00000D306000D09 +:103A100018C000005F07A2441F7C000000000019CE +:103A20000AB001002200000548C901000A002D1457 +:103A300048C1010002002040E5B10100040020401F +:103A4000E5B101000D002D1D48C10100090000F382 +:103A5000388801000D002050E7B1010004002D401E +:103A60003FB00100000000F432B00100040020402B +:103A7000E1B101002200000548C9010000002D1439 +:103A800048C101000200001D94F401000000004044 +:103A900091B001005207A0FC9040000000000041DE +:103AA00091C001005007A24195500000000000A401 +:103AB00096B0010004002E0548B101000000004846 +:103AC000F0B101000000004B48B1010000000018F7 +:103AD00048C101000200001894F4010000002D18F4 +:103AE00090B001005C07A0FC904000000000004185 +:103AF00091C001005A07A241955000000000004803 +:103B0000E0B1010010002040E5B1010004002D05E6 +:103B100048B10100000000F880B02D00000000F066 +:103B200016B02D002200000548C92D000000001429 +:103B300048C12D00640743303D072C000000009E63 +:103B400085B02D0000001B413DC32D000400204224 +:103B5000ECB12D000000001E82B0010002002E1DFD +:103B600082C001000000661882C00100000000420F +:103B700080C001006E07A0418044000000000041A9 +:103B800081C001001000004092F401000A002E30B4 +:103B900081840100720790409240000000000041C3 +:103BA00093C001000000662093A401000000001DE6 +:103BB00048C1010004002019E8B101000000001E06 +:103BC00016C001007807A01916440000000000414B +:103BD00017C001000D002F1E32C001007D07A2405A +:103BE000156C00007C07A01C16400000000000417E +:103BF00017C00100000063F33894010010000005B5 +:103C000048C9010004002E1E98B001000000601A8F +:103C100098C001000C002040E1B101008B07224652 +:103C20001F7C0000000000461F8001003080001053 +:103C300042C90100890722F2640600000000004723 +:103C400061B101004000001062DD01008607A8405C +:103C500081320000E39F00881CB000002080000338 +:103C6000469901000000005FE191010030800010E2 +:103C700044C901001200001AF0C901000000001739 +:103C8000F0B1010010000005E0C901003000001093 +:103C900080C801000000004461B101002000004024 +:103CA00062DD01009107A840813200009B07225C81 +:103CB0001F7C000000003C4423E0010000002D10A8 +:103CC00048C101009B0722F2640600000000004684 +:103CD00061B101004000001062DD01009807A840BA +:103CE00081320000E39F00881CB00000EB9F005C65 +:103CF0001F00010020002F0548B101000000000B4B +:103D0000E4B101000000005017F00100A10790F29B +:103D1000164000000000004117C0010000006620AE +:103D200017A40100100000142AC801000000001DA3 +:103D30002AC00100000000502BE00100000000F24A +:103D40002A9401003080001042C90100AC0722F221 +:103D5000640600000000004461B101004000001052 +:103D600062DD0100A907A84081320000E39F0088BE +:103D70001CB000000080001710DC0100C9072240C1 +:103D8000156C0000B407A2441F7C00000000004432 +:103D90001F900100B307229F136C000002000088EF +:103DA0001CCC0100E49F004081B2000000000041F3 +:103DB0003FC30100E69F004081320100B707A241E6 +:103DC000877C00000000001E3EC00100C9072240A1 +:103DD000156C0000BA07201E146C00000000000AD9 +:103DE0003CB00100E59F001E24300100BF072208FF +:103DF0002E3000000000005211C001000000001A27 +:103E000010C001002307004017B00000E49F0088A5 +:103E10001CB00000E59F004081320100BC07A208F1 +:103E20002E300000808000A604B001000600004093 +:103E300087980100008000034499010004002204D7 +:103E4000E0310000E89F001F8C30010000000040BE +:103E50000FB00100E29F005C1F9000000080000393 +:103E60004499010004002204E0310000E69F004074 +:103E700081320100CE07A241877C0000CF07001EDF +:103E80003EC000000000001F8CB001000000004098 +:103E900005B00100E89F00400F300100E29F005C88 +:103EA0001F9000000400004081B2000004000040A8 +:103EB00081B200000400004081B200000400004014 +:103EC00081B200000400004081B200000400004004 +:103ED00081B200000400004081B2000004000040F4 +:103EE00081B200000400004081B2000004000040E4 +:103EF00081B200000400004081B2000004000040D4 +:103F000081B200000400004081B2000004000040C3 +:103F100081B200000400004081B2000004000040B3 +:103F200081B200000400004081B2000004000040A3 +:103F300081B200000400004081B200000400004093 +:103F400081B200000400004081B200000400004083 +:103F500081B200000400004081B200000400004073 +:103F600081B200000400004081B200000400004063 +:103F700081B200000400004081B200000400004053 +:103F800081B200000400004081B200000400004043 +:103F900081B200000400004081B200000400004033 +:103FA00081B200000400004081B200000400004023 +:103FB00081B200000400004081B200000400004013 +:103FC00081B200000400004081B20000F70700BC8D +:103FD00080B200000380004081B2000003800040F6 +:103FE00081B200000380004081B2000003800040E5 +:103FF00081B200000380004081B2000003800040D5 +:1040000081B200000380004081B2000003800040C4 +:1040100081B200003180004081B200003480004055 +:1040200081B200003580004081B2000004000040F1 +:1040300081B200001B80818080320000E787A240AF +:10404000916F00000000004C90B301005C952EA21F +:1040500080B00100FF000080F489010090952AC81B +:10406000E5B10100000000A1F0B101000000004036 +:10407000F0B10100000000A4F0B10100000000D088 +:10408000F0B10100000000D1F0B10100000000D249 +:10409000F0B101000000004CF0B10100000000D4BC +:1040A000F0B10100000000D3F0B10100000000EE0B +:1040B000F0B101000000004EF0B10100000000402E +:1040C00044B1010018801181983000000000514077 +:1040D00081B201001A801182983000000000524025 +:1040E00081B20100E7870048FD930000B60300405D +:1040F000A19901002380A242FD7F00002080008062 +:1041000080320000228011818230000022805140E4 +:1041100081B2000022801182823000002280524051 +:1041200081B200002C800048FD93000027800080B1 +:10413000803200002680A253077C0000000051530B +:10414000079001002A800052079000002980A252A7 +:10415000077C00000000525207900100000000534D +:104160000790010000000048FD9301000000004698 +:10417000F39301005C952EA252B30100FF00008072 +:10418000F48901000000004CE4B10100000000A926 +:1041900045B101003080004C80B200000000454075 +:1041A00081B201000000554081B20100C682054085 +:1041B00049B10000C682054049B100000000054039 +:1041C00049B101004C010040813201000000004B68 +:1041D000DEB2010000000040FD9301000000004835 +:1041E000FD830100020000409B9B0100000000A530 +:1041F0009CB30100480300408132010058952044DF +:10420000E0B101000494004043990100000000F275 +:1042100024B10100000C00EE968801000000004A65 +:1042200097F001004480A243976C00000000004218 +:10423000FD93010000C000A636B10100D01400407B +:104240004799010005000040F59901000038004041 +:10425000F599010000060040F599010003000040B7 +:10426000F599010005100040F59901000209004090 +:10427000F599010004000040F59901006003004039 +:10428000813201008803004081320100A003004018 +:1042900081320100B982004081320100B1820040C8 +:1042A0008132010060952040E1B10100709520400D +:1042B000E1B1010000000049DD9101000000004073 +:1042C00091B30100000000407BB30100A0980040C2 +:1042D000813201000000004085B301005C95204060 +:1042E000E1B101003C8200408132010090060040B3 +:1042F000813201000000005F2F810100A281004097 +:1043000081320100A5980040813201000000454043 +:1043100081B201000000554081B2010001830040DC +:1043200081B200000400004081B20000040000409F +:1043300081B200000400004081B20000040000408F +:1043400081B200000400004081B20000040000407F +:1043500081B200002800004047990100C682004158 +:10436000E1C1000078180040499901001905225464 +:10437000817C00006C80424081320000008200B4E9 +:1043800069DF010000001A449393010028000040F7 +:10439000479901001805004081B200000400004068 +:1043A00081B200000400004081B20000040000401F +:1043B00081B200000400004081B20000040000400F +:1043C00081B200000400004081B2000004000040FF +:1043D00081B2000055820040813201007D80224080 +:1043E000976C00007A804240813200000000004F4C +:1043F00069930100438100586993000054160040FE +:1044000047990100000000FEF4B101008005004062 +:1044100081B2000080804240813200000000004EE6 +:1044200069930100438100586993000040160040E1 +:10443000459901004005004049310100F615004052 +:10444000439901005C1600404599010000006EFA96 +:104450008EB00100C105004081B2000004000040A0 +:1044600081B200000400004081B20000040000405E +:1044700081B200000400004081B20000040000404E +:1044800081B200000400004081B20000040000403E +:1044900081B200009680004081B200005582004049 +:1044A0008132010096802240976C00009380424048 +:1044B000813200000000004F6993010043810058E1 +:1044C0006993000038050040813201001E00004859 +:1044D000B2CB0100D005004081B2000004000040D2 +:1044E00081B200000400004081B2000004000040DE +:1044F00081B200000400004081B2000004000040CE +:1045000081B200000400004081B2000004000040BD +:1045100081B200008302004081B20000B802004076 +:1045200081B20000D49F004081B20000D59F0040BE +:1045300081B20000D69F004081B20000D79F0040AA +:1045400081B200007201004181C000005501514953 +:10455000FD9300005501524AFD9300005501554955 +:10456000FD8300005501564AFD83000050019181F2 +:10457000803000005501454081B200005001918219 +:10458000803000005501464081B20000000000402C +:1045900089B00100000000F880B00100000000F0C8 +:1045A00016B001002200000548C9010000000014F7 +:1045B00048C10100B48043303D0700000000009E68 +:1045C00085B0010000001B413DC3010004002042F2 +:1045D000ECB101000000A240916F0100000000401A +:1045E00049B10100AE0300CBA3C9010000000020C7 +:1045F00046B10100C480A240E16D0000000000D27D +:10460000F1B10100000000D3F1B10100000000424F +:10461000F0B101000000004561B101002000002060 +:1046200062DD01000000A8D0E1B10000C1800040BF +:1046300081B20000000000A898B001000480004092 +:104640008BB30000B1030040A1990100C980A242D0 +:10465000976F000000000045A1C1010000000000AC +:1046600080B001000000A2048094000080153F4249 +:1046700097E301000000004049B101000000600321 +:10468000029401000000004007B00100040000CBCC +:1046900099CB0100000000CCF3830100D380A2423B +:1046A000976F0000000000CBF3930100AE0300CB36 +:1046B000A3C901000000002044B101000000004433 +:1046C000F1B1010000000000F0B1010000000004A1 +:1046D000F0B10100000000A1E0B1010005000040C0 +:1046E000619901002000002062DD0100DA80A8400D +:1046F00081320000F9020020423101000000A24195 +:10470000056C0100000080CBDB9101000000194125 +:104710008BB301006000004061990100E080A8B106 +:104720008C3300006000004061990100E280A8B174 +:1047300094330000E88014C681320000180000C6DF +:1047400083F401002283224F83040000C4800040D0 +:1047500081B20000FF0100C681880100000000C690 +:1047600097A30100C4801F5C975300006D821EC692 +:1047700081320000F2802248FD7F0000F280225842 +:10478000816C0000F2802248816C0000C000004073 +:1047900084CC0100F2809F428032000022830040DE +:1047A00081B20000C480A2C68F060000C4801EC66D +:1047B0008132000000002F4381F00100F6800040AC +:1047C00010C900004481004081B200007E81004099 +:1047D00081B20000398200CA63B3000075810040D5 +:1047E00081B200005581004D83B000006081004E11 +:1047F00061B100004C81004085B000005581004C43 +:1048000083B000002E81004085B00000F881004098 +:1048100049B1000086810040C1B10000F481004030 +:1048200081B200004C81004085B00000F0030040E0 +:1048300049B10000228300CA9BB300009081004070 +:10484000C1B1000094810040C1B100009B810040D3 +:10485000C1B100009C810040C1B100009D810040B9 +:10486000C1B100009E810040C1B100009F810040A5 +:1048700081B000009F81004181B000002D82004086 +:1048800081B20000AE8200BBABB300003A8200CA26 +:10489000CFB30000C803004049B10000E803004066 +:1048A00081B20000C480004081B200002283004039 +:1048B00081B20000E003004081B20000228300CA00 +:1048C00077B300005681004D83B000005E81004E3A +:1048D00061B100004C8100BB85B000005681004CE6 +:1048E00083B000004C8100BB85B000002E8100BB6E +:1048F00085B000002081004081B20000228300CA00 +:104900004DB300007005004049B10000A005004013 +:1049100049B10000268122428F6F00002881224188 +:104920008F6F00002A811ECA813200002C811FCAAD +:1049300081320000000000CAC9B101002283004298 +:104940008FB30000000000CACDB1010022830041F6 +:104950008FB30000000000CACFB1010022830040E5 +:104960008FB30000008100A6C6B101002283004081 +:1049700081B20000008000A6C6B101002283004081 +:104980008FB30000781800404999010010002F9C57 +:1049900089B00100468100403933010018002F9B87 +:1049A00089B00100468100403733010000002F9A92 +:1049B00089B00100468100403533010008002F997D +:1049C00089B001004681004033330100008000AE11 +:1049D00047C90100C480A240E16D00008000004092 +:1049E000F1990100000000CAF1B10100000000428D +:1049F000F0B1010040180040E199010000000045BD +:104A000061B10100200000AE63DD0100418128405A +:104A1000813200003E81004081B20000418142406D +:104A2000813200000000005C6993010022831A4477 +:104A3000939300004481424081320000438100583A +:104A40006993000000000044F0D101000000A44080 +:104A500081B200004B81A240E16D000000000044E3 +:104A600045D1010000008040E1B10100000080411B +:104A7000E1D101004C81375C61310000000000424F +:104A800062B1010052812840813200004D81225CD8 +:104A9000777D0000C480174081B200004D81004046 +:104AA00081B20000000000CA63B101005281A84039 +:104AB000813200002283174081B2000057810040FC +:104AC00081B00000578100BB81B0000000000041B0 +:104AD00060B10100C480A241767D0000000000406A +:104AE00062B101005981A84081320000000000CA73 +:104AF00063B1010022832840813200005B810040C5 +:104B000081B200005095004047990100618100BBCF +:104B100087B0000050952F4087B00100658122408A +:104B2000957F0000C480A240E16D0000C480224057 +:104B3000956F0000228360409583000002002DF0F5 +:104B400084B00100C4802240856C0000C480A24073 +:104B5000857C0000C480A24E777D000069813640CC +:104B6000813200000000004262B101006A81A84069 +:104B7000813200000000004362B101006C81A84056 +:104B800081320000000000CA63B101006E81A840BC +:104B9000813200000000164081B201007481224180 +:104BA00043510000000800CA95CB01006881004114 +:104BB00085C0000022830040E1B100007781A2425D +:104BC000676F00000000004167B301007781424039 +:104BD000813200000000004065B301000000004089 +:104BE0009383010000001ACA6997010022832640BE +:104BF000813200007C8142408132000022831A44CD +:104C000093930000C4802043956F0000228380CAE4 +:104C10006733000022832240656F0000C480A248F1 +:104C2000DB7D00002283006FDB91000085000040E7 +:104C30008132010035802240803200002283004012 +:104C400081B2000000000058959301000000005F51 +:104C5000959301008C81A244216F00000000005F49 +:104C6000958301000000005E95930100000000574D +:104C700095930100000000CAC3B101008F81225B3F +:104C8000957F00000000004BFD930100228300404F +:104C900081B200001BFD00CA959B01000D0100CAF6 +:104CA000C53101000000005F95830100228300CA26 +:104CB000C5B10000DF6F00CA959B010000000055E0 +:104CC00095930100000000CAC7B101002283225F52 +:104CD000957F00000D010040813201000000005F5F +:104CE00095830100228300CAC7B10000228300CA55 +:104CF000C9B10000228300CACBB10000228300CAE0 +:104D0000CDB10000228300CACFB1000000002E42C6 +:104D100081E001009814004048C90100228300CAC4 +:104D2000E1B100000000004009B10100200000A630 +:104D300082B00100A481A25E0B7D000000800041D2 +:104D400008990100A681A25E0B7D0000208000A6CC +:104D500008B10100A8819F8582300000000000306A +:104D600083840100DD812230836C0000A781A24F83 +:104D70000B7D00000000004121B30100028000A66D +:104D800082B0010028820040813201001000004101 +:104D900084E40100038000A682B001002882004064 +:104DA00081320100F0FF00418688010000000043CD +:104DB000849401000F0000A686B0010010C40043D7 +:104DC00086980100BD81A243846C0000000000436E +:104DD00021B30100200000A682B001001C000041A8 +:104DE00082DC0100BA81A25E0B7D0000040000415C +:104DF00008990100CF81004081B20000410100A666 +:104E000086B00100500C004386980100C281A24385 +:104E1000846C00000000004121B30100CF810040FC +:104E200081B20000410100A686B00100600C004381 +:104E300086980100CF81A243846C000000000042EC +:104E400021B30100188000A682B001002882004032 +:104E500081320100FFFF004182880100007700419C +:104E6000828C010001020041829801002000004173 +:104E700082DC01001800004182DC0100CD81A25ECD +:104E80000B7D00000000004108B10100200000A6D9 +:104E900082B00100D081A25E0B7D00004013004172 +:104EA00008990100D8812243216F0000200000A64C +:104EB00082B001001200004182DC0100D581A25EB7 +:104EC0000B7D00000004004108990100F3810040BF +:104ED00081B20000200000A682B00100190000414C +:104EE00082DC0100DA81A25E0B7D000000A000419F +:104EF00008990100F381004081B2000000000044E5 +:104F000021B301000000004083B001000000005FF9 +:104F1000839001000000005E8390010000000057B4 +:104F20008390010000000041C2B101000C0100406B +:104F3000813201000000005F838001000000004119 +:104F4000C2B101000C01004081320100200000A626 +:104F500082B001000400004182DC01002000004119 +:104F600008990100200000A682B001001100004154 +:104F700082DC0100EC81A25E0B7D0000010000419B +:104F800008990100200000A682B00100EF81A25E16 +:104F90000B7D00004013004108990100010000A6AC +:104FA00082B00100400000412E99010000008040C5 +:104FB00081B20100200000A680B00100000000CAFC +:104FC00081940100F681A25E0B7D000022830040E7 +:104FD00008B10000C8142EBB85B00100F981A25EA3 +:104FE0000B7D00000000004087B0010008822243D2 +:104FF000216F000017822244216F0000118000A65B +:1050000082B0010028820040813201001F82224AC2 +:10501000837C000000000040879001000382224D45 +:10502000837C000000000041879001000582224F30 +:10503000837C000000000043879001000782224E1D +:10504000837C000000000042879001001F82004026 +:1050500081B20000018000A682B0010028820040D9 +:1050600081320100018000A682B001002882004048 +:10507000813201001F822242837C00000000004038 +:10508000879001001C8000A682B0010028820040A9 +:105090008132010012822245837C00000000004121 +:1050A0008790010014822244837C000000000043AA +:1050B0008790010016822243837C0000000000429A +:1050C000879001001F82004081B20000018000A68D +:1050D00082B001002882004081320100018000A6D8 +:1050E00082B0010028820040813201001F822242EA +:1050F000837C000000000040879001000000004316 +:10510000879001000000004187900100008000A608 +:1051100082B0010028820040813201002382224BAC +:10512000837C0000000000408780010000000043F5 +:10513000E0B10100FF7F00A2A08B0100000000444D +:10514000A5B30100B88000CAA73301004181004027 +:1051500081B200002000004182DC01002982A25EB1 +:105160000B7D00000000004108B101002B829F85EB +:10517000823000000000804081B20100308214F7CC +:10518000813000003082A249FD7F0000000000480D +:10519000FD930100338215F8811400003382A24A86 +:1051A000FD7F000000000048FD9301003582A2C889 +:1051B000813200004000004080DC0100001000400F +:1051C00080DC010000000040EFB301003782424064 +:1051D000F13300004381004068970000228300BB48 +:1051E0006BB30000228300BBB1B3000022830040F8 +:1051F00081B20000000300408198010000000040DF +:1052000018B101008000004083980100001900409F +:10521000459901000000424081B20100000043FFB7 +:10522000F1B10100000000FFF1B1010000000041F8 +:1052300081C001000000004018B101004082A2417D +:1052400083500000001600404599010000190040FD +:10525000439901000000004743C1010000000040E5 +:1052600083B00100000000F380B001000000005B8B +:1052700081D001000000004180D00100000000400A +:10528000F6B101000000005B43C1010000000041D5 +:1052900083C001004A82A254836C000000000040D9 +:1052A000F7B101000000004183C001005182A20655 +:1052B000836C00000000804081B2010000160040B5 +:1052C0004399010080162E0683B00100360000FBD2 +:1052D000F6A901005782A24183500000220000403D +:1052E00083980100000000FBF6B101005A82A24140 +:1052F000835000006200004095980100DC9F004050 +:105300008132010000162D0683B001008016004096 +:10531000459901005C0000FBF6A901006082A241F2 +:105320008350000000000070F9B10100000000711E +:10533000F9B1010000000072F9B101000000007332 +:10534000F9B1010000000074F9B1010054000040FF +:1053500095980100DC9F0040813201000000007040 +:1053600095B001006C822270B56F00000000804192 +:1053700097B001000000804097B00100C480A242B5 +:10538000976F0000B6030040A199010000002F4272 +:1053900099B3010078822244816C00008082224807 +:1053A000816C00007A82224C816C00008582225040 +:1053B000816C000086822254816C00008882225811 +:1053C000816C00008D82225C816C000050010040E5 +:1053D00081B20000000000BC09B00100228300CAB5 +:1053E00001B000000000004003B0010000000041D7 +:1053F000F38301007E82A242056C000000000041A0 +:1054000005B00100228322CA07140000228300464F +:10541000F393000022832043956F0000228380CA0B +:10542000053000002283220180300000C480A248A1 +:10543000DB7D0000228300CBDB910000570100BC24 +:10544000ABB30000000000BCB1B30100228300CA6E +:10545000CFB30000FF0000CA818801002283A24070 +:10546000747D000060002040609901008A82A8B12C +:10547000823000008982004081B20000228300CA8D +:1054800079B300000000004E81B00100000000432D +:10549000CB8301000000454081B201009082A2410F +:1054A000815000000000454081B2010000004540ED +:1054B00081B201009B829182823000000000008A4C +:1054C00080B00100AE9F004080CE01009982A640CE +:1054D000813200009B82564081B20000B60300403A +:1054E000A19901000000005307900100B60300409D +:1054F000A19901000000005207900100D89F0041CF +:105500008BB300000000004E81B00100000000429B +:10551000CD8301000000464081B20100A082A2417B +:10552000815000000000464081B20100000046406A +:1055300081B20100AB8291818230000000000089BD +:1055400080B00100AE9F004080CE0100A982A6403D +:1055500081320000AB82554081B20000B6030040AA +:10556000A19901000000005207900100B60300401D +:10557000A19901000000005307900100D89F00414D +:105580008BB30000B1030040A1990100C4142F4067 +:1055900099B301005701004049B10000A0942E4387 +:1055A00097B0010000000040F1B10100B282A241B9 +:1055B0009750000050952040E1B10100AC942E437B +:1055C00097B0010000000040F1B10100B682A24195 +:1055D000975000000000804081B20100AE030040FF +:1055E000A39901000000004081B001006015004057 +:1055F000859801000800004040E4010000000059C7 +:10560000419401000000005041E001000000004210 +:10561000409401000000005741900100000000414B +:1056200081C001000000A342816C01000000004124 +:10563000A3C10100BC82A042816C0000BC8200506A +:1056400085C000000183A241017D0000CF82225865 +:10565000737D00007800004061990100C782A8B105 +:105660009C300000300038459DE001000400A25F3E +:105670001F7C00000400225E1F7C000000C000A60A +:105680001EA401000100000E10C90000CF8233C427 +:1056900081300000D282A1AD9D200000C68213405F +:1056A00081B200000000134E5A83010030003845DB +:1056B0009DE001000400A25F1F7C00000400A25EC8 +:1056C0001F7C00000400A240056C0000DD8222ABBC +:1056D00080040000DB82A240017D0000DD82225FA9 +:1056E000577D00001288005F1FB40000DD82225E3B +:1056F000577D00008088005F1FB40000E3822254C1 +:10570000737D00007400004061990100DD82A8B142 +:10571000003000000000005F1FB40100F784A25FAA +:10572000017C00009587004081B20000E582A25F05 +:1057300059270000E782A25C737D0000EE82A25E22 +:10574000737D0000FA82225C737D0000FB8237408B +:10575000813200007C00004061990100E882A8B11C +:10576000363000007C00004061990100EA82A8B157 +:10577000003000001F000000028801003785175F1D +:105780001FB40000FB823440813200007E000040E4 +:1057900061990100EF82A8B112300000F782522116 +:1057A00013040000000014412FC301000000005F3B +:1057B0001FB40100FF3F0009008C010000000043FE +:1057C00001F001004F83003413840000FF3F1409EF +:1057D000008C01000000005F1FB40100C48300437F +:1057E00001F000000000004081B20100FB82334064 +:1057F000813200000400A24E5A7F00000700004ED4 +:1058000080E401000039004080C801000400A2408B +:10581000066C0000C682134E5A930000E787A24828 +:10582000FD7F0000058302E681320000068383E5E8 +:10583000813200008E82004297B300009E820042B7 +:1058400097B3000009832246F37F00000C83A24136 +:10585000F37F0000C6800042973301000C8322448E +:10586000F37F00000C83A241F37F0000C680006F2D +:10587000973301000400A2AC803200001183225A49 +:10588000737D00007A000040619901000E83A8B189 +:105890007E310000010000CF11C900001783A24033 +:1058A000937F000017832244937F0000138342A557 +:1058B000803000001683A240937F000038831A4096 +:1058C0009393000000001A4081B20100DF80A240E3 +:1058D000737D0000E2872244216F0000D9872240B7 +:1058E000657D00000005A25B737D00000400A249F5 +:1058F000337D000021832248337D0000FF010099A1 +:1059000080D801000000005081E00100A8982F40DD +:1059100033B1010000000040E0C1010001830040FC +:1059200081B20000C68200408BB300000400A25E7A +:105930001F7C00000400225F1F7C00000000005E4E +:105940001F900100C682005F1F8000000400A25E5D +:105950001F7C00000400225F1F7C00000000005E2E +:105960001F9001000000005F1F8001000000005830 +:1059700061B101000000004E62B10100C682284002 +:10598000813200002C83004081B200000000004002 +:105990000FB001000400A25E1F7C00000400225F23 +:1059A0001F7C0000328333401F3000000400A24EF1 +:1059B0005A7F00000700004E80E4010000390040DB +:1059C00080C801000400A240066C0000C682134E8D +:1059D0005A9300003A83A0CE815000004D83A0CDA1 +:1059E000816C0000000000A59CB30100000000B124 +:1059F00081B001004D8322B58114000080152F4035 +:105A000049B101003E83424081320000000060B491 +:105A100065970100D0152E4069B3010000001A44BB +:105A20009383010004002240E16D00001A0000A2EF +:105A300080DC010000000044F1B10100000000B171 +:105A4000F1B10100000000B5F1B101000500004016 +:105A5000619901008000004062DD01004883A8A137 +:105A6000E0310000178300889EB300001783A24135 +:105A7000676F00001783006FDB9100004D83424089 +:105A80008132000017831A40938300000004004015 +:105A900089980100099900008A3001000400A25A87 +:105AA000017C000004002240016C00000099000904 +:105AB00046C901003F0000F30C8801005C83A64248 +:105AC000136000009B9600950330010057836140EE +:105AD0008132000075000040619901005883A8B12F +:105AE0000C300000A9967110943001005D830058BD +:105AF0001F9000008D9600950330010023830088DD +:105B00001CB0000000002D0348B1010004002DF07E +:105B10002EB0010080040017968801000400A64002 +:105B2000813200004AC1001796D801000400A64047 +:105B300081320000EE070040979801006883234BF4 +:105B4000E46D00006883224BFD7F000000000040F0 +:105B50001F90010022002F4081B201006B83831748 +:105B60008032000026000040479901006D838517B0 +:105B7000803200000000004847C1010073832255B5 +:105B80002F7C00000000004243D101000F0000FA0A +:105B9000968801000000004297E0010000000042EA +:105BA00097D001007483004B44C10000120000A292 +:105BB00044C90100280000F602CC01000A0000A13F +:105BC00042C90100000000F816B00100000028F0F2 +:105BD00010B00100000000F01AB00100000000A2A7 +:105BE0002AB00100C0283C460DE0010000002D4411 +:105BF00095B001008083A2F80E300000908322410E +:105C00009550000000002D5049C101007C830040E8 +:105C100081B200007D83A2F8166C00007D83A2F89B +:105C2000106C00007D83A2F01A6C00008E83225855 +:105C30001F7C000000993F4213F0010085836540FE +:105C4000813200008983A2F3740600000000000680 +:105C5000E69501008E83754081B2000000000006C9 +:105C600096B001003F0075F30C880100000000555C +:105C700061B101000000004B62B101008C83A840BB +:105C8000813200008E836740813200009683774125 +:105C90002DC30000948322581F7C00000000005593 +:105CA00061B101000000000662B101009283A840CA +:105CB000813200009483674081320000D5837741B0 +:105CC0002DC30000030000071AF401001895000717 +:105CD00016300100A8832241816C00009C8322427F +:105CE000816C0000238300881CB00000A783225F22 +:105CF0000F7C00004E96005F01100100A28322403D +:105D0000956C00000480000342C90100000000F20D +:105D100002B00100A595005295300100AC95004BF2 +:105D200002B000000000005F0F800100010400408D +:105D300089980100099900008A300100B496000991 +:105D400096300100F08700400FB00000B783A25AE0 +:105D50001F7C00000400A25A1F7C000000B5000D4B +:105D600042C901000400220BE67D000000B7000DCF +:105D700042C901000400220BE67D0000709400403F +:105D800081320100B7832220856C0000B2839C0F12 +:105D900080320000238300881CB000008D95005CD9 +:105DA0001F000100C8970042613101002383008871 +:105DB0001CB00000900400079630010000002D0583 +:105DC00048B101000400A24BE17D00000400A25C88 +:105DD0001F7C000000002D0548B10100BB8382F04C +:105DE000183000006C8900458FB00000282000A604 +:105DF00096B00100C18322179604000034040040CD +:105E000089980100099900008A3001005B97004BD6 +:105E1000953001006C89004B8FB000005D96000347 +:105E200048310100AF930040813001006C8900408F +:105E300081B20000000000400FB0010000040040EB +:105E400089980100099900008A300100040022406D +:105E5000016C000000002E1048B1010000006850E5 +:105E600003B0010000000003F0B101004000000099 +:105E7000E0C9010000002E5049C10100000000509F +:105E8000F1B1010000000003F0B101000000004288 +:105E900061B101002000001062DD0100D083A84044 +:105EA000813200001000001062C90100D283A800F6 +:105EB000E0310000238300881CB0000000002D03A7 +:105EC00048B10100000000400FB00100000000F8E0 +:105ED0002EB00100000000F202B0010000000040FE +:105EE00017B00100004100A696B00100EE072E4752 +:105EF00097900100E883221796040000E683224B66 +:105F0000FD7F0000E68323A2026C0000A5950052ED +:105F10009530010004002241975000000C002D0034 +:105F200012B00100000000F000B001000000005CB1 +:105F300001800100AC95004B02B000000000000998 +:105F400000B001000000005003B001000584005CB7 +:105F500017900000FA8322432F7C000000000045C8 +:105F60001F900100F383225F2F7C000000002E10A1 +:105F700048B1010000000058F1B101001000000319 +:105F8000F0C9010010000000E0C90100EF83624287 +:105F9000613100000000001062B10100F083A840F0 +:105FA00081320000238372881CB0000020002D0382 +:105FB00048B10100FF0F00F680880100F783A2A618 +:105FC000816C0000FA8300F23AB00000F484A24B26 +:105FD000FD7F0000C9940040813201000688004026 +:105FE00081B200000584224A2F7C000005842248EB +:105FF0002F7C00000A002D0348B101003F0000F291 +:10600000868801001F0000438488010005000043CA +:1060100080F4010098943D4281E001000584A24291 +:10602000E07D0000F484A24BFD7F0000C994004095 +:10603000813201000688004081B200000204004065 +:1060400089980100099900008A300100078469409D +:1060500081320000000000A309B001000000794176 +:1060600047C301000400A0A1096C00000E8422A116 +:10607000096C0000278300881CB000000A8400031C +:1060800048B100004884A392036C00002B980040A4 +:10609000953001000000004143C3010000000016DC +:1060A00080B2010006882708803200001584225C37 +:1060B000177C0000168400002AB0000012000000C7 +:1060C0002AC801000200000880C801001A84A24307 +:1060D0002F7C00005E970040813201003684005E14 +:1060E00017900000040000018CCC01005E97004C6A +:1060F0000330010000002E4602B001001000001025 +:1061000048C901000C000001F0CD01002C00004046 +:10611000F0C9010000000016F0B1010010000015E8 +:10612000E0C901000000004361B10100A00000A42B +:1061300062DD01002384A854171000003684005E3D +:1061400017900000120000002AC801003584224385 +:106150002F7C0000040000018CCC01000000004CEA +:1061600003B001007F9700436131010000002E461B +:1061700002B001001000001048C901000C0000012D +:10618000F0CD01000C000009F0C90100000000186A +:10619000F0B1010010000015E0C90100000000434B +:1061A00061B10100A00000A462DD01003684285422 +:1061B000171000003284004081B200007F97004336 +:1061C00061310100388422502F7C0000000000560D +:1061D0001790010007000017988801003B84A24136 +:1061E000996C00000000005517900100000000436A +:1061F00061B101004000001062DD01003C84A84054 +:1062000081320000238300881CB0000066970040A4 +:1062100081320100438422432F7C0000168000035A +:1062200044C901000000001DE4B101000097005EB8 +:10623000051001004684A25F2F7C000086930001B8 +:1062400038430100C99400408132010006880040B3 +:1062500081B200004A84A24BFD7F0000F18400411E +:1062600043C300000000004027B0010000000040D0 +:106270002DB001000000004011B001004D84350137 +:10628000863000006D00004061990100568428B1FD +:10629000303000004E84224D757D00000000001655 +:1062A00080B20100DD84A740116C000000000041B5 +:1062B00043C301000400A240276C0000F0840040AA +:1062C00081B200006D000040619901005684A8B1C0 +:1062D000123000000000001680B201006084A74068 +:1062E000116C00000000004143C3010000000009E0 +:1062F00010B00100000000182CB00100DE070043C0 +:1063000080CE01004E84AA408132000065840040A6 +:1063100081B2000040003E4327E001000000000978 +:10632000F0B1010000000018E0B1010000000041E0 +:1063300027C001004E84A30B8750000000001540C9 +:106340001BB001000000004023B001000400A203C4 +:10635000486D0000120000002AC8010040002D40D6 +:1063600039B001006F84A240276C000022000008B1 +:1063700012C801000400A216306C0000DE070040C5 +:10638000259801007284004081B20000000000F8EE +:1063900012B00100000000F030B001000000000B5E +:1063A00025B001000000001032B0010014002001EF +:1063B000E0B10100EE070040379801007784230127 +:1063C000366C00000000000136B00100828482417A +:1063D000234000002080001042C901007E8422403A +:1063E000E36D00000000004361B1010040000010B7 +:1063F00062DD01007B84A840813200002383008895 +:106400001CB00000F3940043233001000000001092 +:1064100032B001000000004123B001000000000381 +:1064200048B101000080001944C90100938422454D +:106430001F7C00000400A241236C00000400A20B9A +:10644000256C00000000004CF1B1010000000009C3 +:10645000F0B1010000000018F0B10100000000439D +:1064600061B101002000001962DD01008A84A815D5 +:10647000E03100000000005003D001000000005097 +:1064800033C001000000004C25D001000C002D4C51 +:1064900013C001000000005037D001000000005080 +:1064A0002BC00100778400451F8000009584A31253 +:1064B000366C00009684681B28B00000000068124B +:1064C00028B0010000000009F0B101000000001830 +:1064D000F0B101000000004361B10100200000198B +:1064E00062DD01009984A815E0310000C184221406 +:1064F000025000000000005033C0010000000014F2 +:1065000024D001000C002D1412C00100B984A21483 +:1065100036500000A984225C1F7C000030800010EF +:1065200042C90100A7842240E36D00000000004240 +:1065300061B101004000001062DD0100A484A840A8 +:1065400081320000238300881CB00000000000039B +:1065500048B101000C002D5C1F800100100000F00C +:106560002AC801000000005C2B80010004002250BA +:106570002B6C0000F007004037980100AF84230126 +:10658000366C00000000000136B00100BA84221B06 +:10659000026C00003000001048C9010000002E5CB1 +:1065A0001F90010000000050F1B101000000000345 +:1065B000F0B10100FF070015E08D0100000000426E +:1065C00061B10100A00000A462DD0100B684A84012 +:1065D00081320000BA84000348B1000000000014BA +:1065E0002AC001007784A240256C00000000004111 +:1065F00039C0010004002013386C000040003D4306 +:1066000039E001000000000B25B00100000000F897 +:1066100012B00100778400F030B000000400A25CEA +:106620001F7C00000080001942C90100C88422407C +:10663000E36D00000000004361B10100400000195B +:1066400062DD0100C584A8408132000023830088F8 +:106650001CB00000F39400402B30010018002E0302 +:1066600048B10100CC8422502F7C0000000000566D +:10667000179001000700001798880100CF84A241FD +:10668000996C00000000005517900100D28422434D +:106690002F7C000000000054179001001600201D00 +:1066A000E4B10100D484A340276C0000D684605F6D +:1066B000179000000084000B16DC0100000060133E +:1066C000169401000097005E051001000400A2402E +:1066D0000F6C00000688A25F2F7C0000148000036E +:1066E00042C90100000000F202B0010086930001DF +:1066F000384301000688004081B200000400A20374 +:10670000486D00000400224D757D0000000000402F +:1067100083B001000000004D61B1010000000016CF +:1067200080B2010004002740116C00000000001638 +:1067300062B10100E384A84081320000000000083B +:1067400062B10100E584A84081320000F084221388 +:10675000826C000040003D4383E00100000000F82F +:1067600010B00100000000F02CB001000000001685 +:1067700062B10100EB84A8408132000000000008F3 +:1067800062B10100ED84A84081320000E78400413D +:1067900083C000000000154081B20100008200A605 +:1067A00004B00100A0980040479901003005004165 +:1067B00089300100A595005295300100AC95004B41 +:1067C00002B00000068800400FB000000000005F2B +:1067D00001800100100000000EF4010004002640BA +:1067E000813200003F0000000088010005040040E5 +:1067F00089980100099900008A3001000300000710 +:106800001AF401001895000716300100088522418E +:10681000816C000003852242816C00002383008884 +:106820001CB000000785225F0F7C00000000005FA5 +:106830000F800100060400408998010009990000BA +:106840008A300100F08700400FB000001785A25A7F +:106850001F7C00000400A25A1F7C000000B5000D40 +:1068600042C901000400220BE67D000000B7000DC4 +:1068700042C901000400220BE67D00007094004034 +:106880008132010017852220856C000012859C0F43 +:1068900080320000238300881CB000008D95005CCE +:1068A0001F000100C8970042613101002383008866 +:1068B0001CB00000900400079630010000002D0578 +:1068C00048B101000400A24BE17D000000002D054D +:1068D00048B10100000000F018B001001C85223A08 +:1068E000016C0000000000008EB001006C890040C7 +:1068F00001B000000000004081B201002E002D0513 +:1069000048B101002185A240E76D00000A00004067 +:106910008F9801006C89004001B000001D94004078 +:106920008132010004002200803200003504004062 +:1069300089980100099900008A3001008D96009520 +:1069400003300100238300881CB0000000002D03E9 +:1069500048B1010022002DF02EB0010004001F17E5 +:1069600080320000282000A696B001002E85221754 +:10697000960400005B97004B953001006C89004C39 +:106980008FB0000030858317803200000000004483 +:1069900043C10100328585178032000000000048A5 +:1069A00043C10100280000F602CC0100120000A142 +:1069B0002AC801005D96004081320100AF9300417A +:1069C000813001006C89004081B2000000000001AC +:1069D00000D0010000002E1048B101002800004046 +:1069E000F199010000000003F0B101000000000077 +:1069F000F0B101003C8564476131000000000010E7 +:106A000062B101003D85A81BE0310000238374883A +:106A10001CB000000000004503E001000400A005D8 +:106A2000036C00000400A309036C000008002D03A0 +:106A300048B101006E8501FB08300000D88587FB56 +:106A400022300000000000FA0EB00100000000F843 +:106A500014B00100030000071AF4010018950007A4 +:106A6000163001005F852241816C00004E85224274 +:106A7000816C0000238300881CB000005E85225FCB +:106A80000F7C0000380000047E8901005485A65F59 +:106A90000F00000031940040053001000A0400405E +:106AA00089980100099900008A3001005B85004047 +:106AB00081B20000130000408798010000002D0300 +:106AC00048B101000C002DF082B00100000000F080 +:106AD00084B001002C9600400530010008040040FD +:106AE00089980100099900008A3001000400A25C25 +:106AF0001F7C00000000005C1F900100F087004038 +:106B00000FB000006C85A25A1F7C00000400A25A3E +:106B10001F7C000000B5000D42C901000400220BDB +:106B2000E67D000000B7000D42C901000400220B01 +:106B3000E67D000070940040813201006C852220C7 +:106B4000856C000069859C0F8032000023830088DB +:106B50001CB000008D95005C1F000100C89700422A +:106B600061310100238300881CB0000090040007FD +:106B70009630010000002D0548B10100000000F032 +:106B800018B001007085210480200000718500404C +:106B900010C90000A488004B81B000009F8500430D +:106BA00081B00000A38500FB22B00000A488004152 +:106BB00081B000006C89004E8FB000009485005AAF +:106BC0008FB00000798500478FB00000A488005383 +:106BD00081B00000A488005681B0000032002D056D +:106BE00048B101000704004089980100099900009C +:106BF0008A3001003C040040899801000999000A8C +:106C00008A3001003D0400408998010018000011FD +:106C10008AE40100099900F28A1401000000004092 +:106C200081B201006C89A00AE46D00008785A24151 +:106C3000197C00008685220A803200006C8900538E +:106C40008FB000006C8900548FB000009085220A3C +:106C5000803200008A85A20AE46D00006C89005D24 +:106C60008FB00000000000F280B001000000000AB8 +:106C700080D001008E85A091816C00006C89005E3F +:106C80008FB00000250000408F9801006C89004003 +:106C900081B2000092852091E56D00006C8900545E +:106CA0008FB00000210000408F9801006C890040E7 +:106CB00081B2000032002D0548B1010007040040F8 +:106CC00089980100099900008A3001003C040040C5 +:106CD000899801000999000A8A3001003D040040AA +:106CE00089980100099900F28A30010000000040F3 +:106CF00081B201006C89A00AE46D0000240000400C +:106D00008F9801006C89004081B2000037002D058A +:106D100048B10100040000F382F40100A488A042FD +:106D2000836C0000A488005481B00000000000F2D1 +:106D30000EB00100040023400F6C0000040020AAE4 +:106D40000F6C0000090400408998010009990000B7 +:106D50008A300100030000071AF4010000B5000D9D +:106D600042C901000700000716880100B185220B07 +:106D7000E67D00000A000040879801007F980040EF +:106D80008132010004001C0F80320000000000402E +:106D90000FB00100F087005C1F900000C3852250F7 +:106DA000FD7F0000BE85A254FD7F0000B685225500 +:106DB000FD7F00008200004087980100AD85004003 +:106DC00081B2000004002253FD7F00001480000304 +:106DD00042C90100000000F096B001001000004B15 +:106DE00080F401000CBC004087980100BE8522435E +:106DF000806C0000FFFF004B80880100AD85A2433E +:106E0000806C00007C96004047990100BF85464099 +:106E100081320000C285A0F0306F0000B4851E40B2 +:106E200081B2000000001E4131C301007F94004088 +:106E300025300100C7859C0F803200002383008825 +:106E40001CB000008D95005C1F0001001480000341 +:106E500042C901000400225A1F7C0000000000F01B +:106E600096B0010000002F0548B101001000000796 +:106E700018E401000008000CE099010090040007EC +:106E80009630010000B5000D46C90100CF853040A5 +:106E9000813200000400A20BE67D00000000000B20 +:106EA000E6910100000200A146C901000400A20B06 +:106EB000E67D00000000000BE691010004002E05B5 +:106EC00048B1010000001040E1B10100A488004079 +:106ED00081B00000000000FB28B00100000000FBB2 +:106EE00086B00100000000F814B00100E3852246DE +:106EF000237C000004002240876C0000DF852240D4 +:106F0000877C0000000000481F900100E1852241BD +:106F1000877C0000000000471F900100E3852242AB +:106F2000877C0000000000451F9001000400224003 +:106F3000097C0000E485661B2C300000000000A0E6 +:106F400013B001000000764141C301001686239270 +:106F5000156C00001686A2451F7C00001C86224B83 +:106F6000FD7F0000170000D0A2C901000000004012 +:106F700027B001000200000A24C80100BF940040AD +:106F80000F3001001486220840300000000000414C +:106F9000A3C10100F007001224CC0100ED85AA4135 +:106FA000274000000400A349276C000001000013E3 +:106FB00080CC01000E8626402330000000000040F7 +:106FC00083B001006000000384C8010010000010BD +:106FD00048CD0100170000D0A2C90100FB85A240E6 +:106FE000836C00000786004183B0000000800042EF +:106FF00044990100000068213896010000002E50DD +:1070000049C101000086A244236C00003000000347 +:1070100048C9010000000044F1B101000C0000204B +:10702000F0C901000000004461B10100A00000A40B +:1070300062DD01000386A842E03100000000004448 +:1070400085C001000000004123C001000000004194 +:10705000A3C10100F985A241815000000E862240A3 +:10706000236C00000000004461B1010040000010EA +:1070700062DD01000B86A840813200002383008876 +:107080001CB000000B040040899801000999000021 +:107090008A3001000000000348B10100EE07004003 +:1070A00025980100170000D02AC801002786001784 +:1070B00010B000000A970040813201001C86004099 +:1070C00081B20000BF940092253001000000004012 +:1070D00031B001000B0400408998010009990000BB +:1070E0008A3001001C8622082E30000027860041CD +:1070F00027B00000808000A604B001000600004018 +:10710000879801007F98000A8C30010004001C0F52 +:1071100080320000000000400FB001000000005C61 +:107120001F9001000400A09F136C00002686229F80 +:10713000136C0000020000881CCC01002783004073 +:1071400081B20000F08700413FC300000000004012 +:107150000FB001002800000180CE01003B862A40CC +:10716000813000000080001044C901004000004050 +:10717000819801003086A2481F7C00003086A2471B +:107180001F7C00003086A307036C000080000040D5 +:10719000819801003386A340026C000028000001A2 +:1071A000F0CD0100358600400FB0000028000040FF +:1071B000F0CD0100040000400ECC010028000003C7 +:1071C000F0C9010028000000F0C90100000000160D +:1071D000E0B101000000004761B101002000001093 +:1071E00062DD01003986A85C1F1000000400220A3D +:1071F000803200000400A203486D0000000000403F +:1072000043990100000000F008B00100A0012D40EA +:1072100000C001001C87220F420500004E869C0F13 +:10722000803200000000005C1F8001000080001020 +:1072300042C9010049862240E36D0000000000477A +:1072400061B101004000001062DD01004686A840E7 +:1072500081320000238300881CB000004E86220784 +:10726000803200000000000342B10100000000076E +:1072700042C10100008000A1469901000000005FAA +:10728000E1910100C006A2451F7C00001000000330 +:1072900048C9010000002D5429C00100000000F879 +:1072A00018B00100000000F804B00100000000F870 +:1072B0000EB0010004002640813200000400A25FED +:1072C0000F7C00003E00001480CE01000400AA40A4 +:1072D00081320000420000030AC801000C0000A433 +:1072E0000CC8010016950040813201000000001416 +:1072F00002B001000000001424D0010000000014BE +:1073000010C001001200000810C801000000004079 +:1073100023B00100FE7F000544C901000400A2A2C1 +:10732000860600000000000AE4B101007C8622010C +:107330008032000000003C4423E0010000002EA445 +:1073400080B001000000001048C101006986A30759 +:10735000026C00006A8668011AB00000000068072D +:107360001AB001000000000D02D00100000000056D +:10737000F0B101000000000CF0B1010000000002BB +:10738000E0B101000000000D0AC001007686224035 +:10739000036C000076862242236C0000000000414E +:1073A00023C001000000004761B10100A00000A45B +:1073B00062DD01009C862840813200007386004017 +:1073C00081B200000000001080C0010000000047F2 +:1073D00061B101000000004062B101007886A84060 +:1073E00023300000238300881CB000009C860040EE +:1073F00081B2000000003C4423E00100000000A432 +:1074000086B0010000002E1048C101008186A31241 +:107410000E6C0000828660071AB000000000601247 +:107420001AB001000000680D16940100FFFF000B68 +:1074300016D801001B990008983001000000680868 +:107440003E9601000000000CF0B1010000000002B7 +:10745000E0B101000000001086C0010000000046FD +:1074600061B101002000004362DD01008A86A85C52 +:107470001F100000BC86220D146C00009086220DA7 +:10748000246C00000000000D10C001009586000D66 +:1074900024D000000400224BFD7F000000000041CA +:1074A0002BC0010000000015A2B101001000002057 +:1074B00010C80100F007004025980100978622427D +:1074C000236C00009C86004123C0000000000046A1 +:1074D00061B101004000001062DD01009886A85CE7 +:1074E0001F000000238300881CB000000000004043 +:1074F00023B00100BC86220D14500000BB86A20DF3 +:107500000E500000A88622461F7C000000000046A6 +:107510001F8001003080001042C90100A686224071 +:10752000E36D00000000004761B101004000001061 +:1075300062DD0100A386A840813200002383008819 +:107540001CB0000020800003469901000000005F8D +:10755000E191010000002D0648B10100000000F893 +:1075600018B00100000000F804B00100040022F08F +:107570000E300000AE86A25F0F7C00006386004CD8 +:107580000DC0000000002E5F0F80010063862307FE +:10759000146C00000400A2461F7C000030000010A4 +:1075A00048C9010024000040F199010000000003D7 +:1075B000F0B1010000000000F0B101000000001671 +:1075C000F0B101002400000000C8010000000047E5 +:1075D00061B10100A00000A462DD0100B886A846E8 +:1075E0001F100000638600030CB000006386000DCE +:1075F00018C0000004002E140AD00100120000057B +:1076000048CD0100FE7F000542C901000400A2A48C +:10761000860600000400A2A1860600000C002AF2E3 +:10762000E0B10100C4862240316C00000000601807 +:10763000389601001E00004043990100008100F6C9 +:1076400080CE0100C886A6408132000000000044C0 +:1076500043C10100CA86220BED6D0000080000A1A5 +:1076600042C90100020000A146C901000400A2A114 +:10767000860600000F0000FA948801000400A2456D +:10768000956C00000200004A86E40100000000F64C +:107690000EB00100D48622471F7C000004001F4367 +:1076A0000E500000D486A0460F40000000000041AC +:1076B0000FC00100D88622481F7C00000000004057 +:1076C00091B0010004000FA242310000DB860040AF +:1076D00089B000000C0000A242C901000000004374 +:1076E00089B001000000004395D00100000000FCBB +:1076F00082B00100DE86A041904000000000004101 +:1077000091C00100E38622471F7C0000E386A0436E +:10771000896C0000E3862045896C0000E386A04167 +:107720000E400000000000410FC0010000000041B9 +:1077300089C00100DB86A24195500000F0862248F6 +:107740001F7C00001000004892F40100FFFF004879 +:1077500090880100EA8690489240000000000041B5 +:1077600093C001000A0000A244C901000000662085 +:1077700093A401000A00004380CC0100000000A295 +:1077800080C001000400A240426D00000400A2A1DC +:10779000860600000400A2461F7C00001B9900170B +:1077A00098300100FF0700177E8901000400A64001 +:1077B000813200003080001044C901001200001422 +:1077C000F0C9010000000017F0B10100120000052F +:1077D000E0CD01003000001080C80100000000442E +:1077E00061B101002000004062DD0100FA86A8407E +:1077F000813200000587225C1F7C000000003C44B1 +:1078000023E0010000002D1048C101000487224040 +:10781000E36D00000000004661B10100400000106F +:1078200062DD01000187A8408132000023830088C7 +:107830001CB000000000005C1F8001000887A24708 +:107840001F7C00000C9500408132010088870017E2 +:1078500010B00000139500408132010000002F039A +:1078600048B101000C87A00716400000000000414D +:1078700017C001000000000BE4B10100000000503F +:1078800017F00100108790F2164000000000004140 +:1078900017C001000000662017A4010010000014AA +:1078A0002AC80100000000502BE00100000000F297 +:1078B0002A9401003080001042C901001A8722403A +:1078C000E36D00000000004461B1010040000010C1 +:1078D00062DD01001787A840813200002383008801 +:1078E0001CB000000080001710DC010088870040F9 +:1078F00081B2000024879C0F803200000000005CF1 +:107900001F8001000080001042C90100248722402E +:10791000E36D00000000004761B10100400000106D +:1079200062DD01002187A8408132000023830088A6 +:107930001CB00000298722078032000000000003ED +:1079400042B101000000000742C10100008000A117 +:10795000469901000000005FE191010004002E0340 +:1079600048B101000000000AE0B101002E8722406A +:10797000316C00000C0000404599010000006018C7 +:107980003896010000002E1048B1010000000050A0 +:10799000F1B1010000000008F0B101000000000397 +:1079A000E0B101000000004461B1010000000010DE +:1079B00062B101003387A840233000002383008890 +:1079C0001CB0000000002D5211C001001000000387 +:1079D00048C90100000000F818B00100000000F8DC +:1079E00004B00100000000F80EB001000C0000A47B +:1079F0000CC8010004002240156C000000003C444B +:107A000023E00100000000A486B0010000002E1059 +:107A100048C101004287A3120E6C0000438768072B +:107A20001AB00000000068121AB001001B9900088B +:107A3000983001000000004081B2010000000010F9 +:107A400086C00100000068083E9601000000000C9E +:107A5000F0B1010000000002E0B1010000000046AA +:107A600061B101002000004362DD01004A87A85C8B +:107A70001F1000007C87220D146C00005087220D1F +:107A8000246C00000000000D10C001005587000D9F +:107A900024D000000400224BFD7F000000000041C4 +:107AA0002BC0010000000015A2B101001000002051 +:107AB00010C80100F00700402598010057872242B6 +:107AC000236C00005C87004123C0000000000046DA +:107AD00061B101004000001062DD01005887A85C20 +:107AE0001F000000238300881CB00000000000403D +:107AF00023B001000400220D145000007B87A20D6A +:107B00000E500000688722461F7C000000000046DF +:107B10001F8001003080001042C9010066872240AA +:107B2000E36D00000000004761B10100400000105B +:107B300062DD01006387A840813200002383008852 +:107B40001CB0000020800003469901000000005F87 +:107B5000E191010000002D0648B10100000000F88D +:107B600018B00100000000F804B00100040022F089 +:107B70000E3000006E87A25F0F7C00003C87004C37 +:107B80000DC0000000002E5F0F8001003C8723071E +:107B9000146C00000400A2461F7C0000300000109E +:107BA00048C9010024000040F199010000000003D1 +:107BB000F0B1010000000000F0B10100000000166B +:107BC000F0B101002400000000C8010000000047DF +:107BD00061B10100A00000A462DD01007887A84621 +:107BE0001F1000003C8700030CB000003C87000D14 +:107BF00018C000000400A2461F7C00008687225C9B +:107C00001F7C00000000005C1F80010000003C445D +:107C100023E0010000002D1048C1010086872240AA +:107C2000E36D00000000004661B10100400000105B +:107C300062DD01008387A840813200002383008831 +:107C40001CB000000000001710B001008887004041 +:107C50002BB00000008000034499010000000004E4 +:107C6000E0B1010004002640813200000400A09F22 +:107C7000136C00008F87229F136C000002000088A5 +:107C80001CCC01002783004081B200009498004181 +:107C90003F430100000000408DB0010000000040A3 +:107CA00005B001007F9800400F3001000400A25C85 +:107CB0001F7C00000688005C1F9000001000000080 +:107CC0000EF4010004002640813200000000003A5A +:107CD000018401009B872250016C00000D040040CC +:107CE00089980100099900008A300100030000070B +:107CF0001AF401001895000716300100A6872241EA +:107D0000816C0000A1872242816C000023830088DF +:107D10001CB00000A587225F0F7C00000000005F00 +:107D20000F8001000E0400408998010009990000AD +:107D30008A300100F08700400FB00000B387A25ADC +:107D40001F7C00000400A25A1F7C000000B5000D3B +:107D500042C901000400220BE67D000000B7000DBF +:107D600042C901000400220BE67D0000709400402F +:107D700081320100B3872220856C0000B0879C0F00 +:107D800080320000238300881CB000008D95005CC9 +:107D90001F000100C8970042613101002383008861 +:107DA0001CB00000900400079630010000002D0573 +:107DB00048B10100000000F018B001000000000010 +:107DC00080B00100A488A25F816C0000A8002D4350 +:107DD0001980010037002DF024B00100040000F3E9 +:107DE0008EF401000F0000F3908801000400A3430B +:107DF0008F6C00000400A343916C0000C4872248EC +:107E00008E6C0000360000404399010058003D434D +:107E1000E7E10100C4871FF0246C0000C387234101 +:107E20008F6C0000A488004781B00000A48800483F +:107E300081B000004000004043990100B0002DF0E7 +:107E400014B00100C987220A904000005F980040EA +:107E500091300100A488A24080320000B0002D457E +:107E600081B00100D58722F02C300000A3002D3016 +:107E700083B00100AC002DF382E00100CF87A34165 +:107E80002C6C00000000001682B0010098002DF05C +:107E900082C0010088002DF082D00100000000F2B5 +:107EA00098E80100A488204C826C00007C002D41E1 +:107EB00098E80100A48820F0986C0000F087220A5E +:107EC000803200004002000C7E890100F087A6404D +:107ED00081320000A488004981B00000200000A683 +:107EE00080B00100DD872243216F00001380004035 +:107EF00080DC0100DE87004081B200001A80004073 +:107F000080DC0100DE87A25E0B7D000000000040E7 +:107F100008B10100E0879F8580320000E4870040BF +:107F200081B200001A832240577D0000010000400A +:107F300057990100E487424081320000000000446C +:107F40009393010001831A5B69930000EA8722463C +:107F5000F37F0000EA87A241F37F0000C680004261 +:107F600097330100040000CB81C80100ED87224057 +:107F7000F27F0000C680006F97330100EF87224038 +:107F8000737D0000E08000418BB30000E787004074 +:107F900081B20000F7879C0F803200000080001043 +:107FA00042C90100F7872240E36D00000000004550 +:107FB00061B101004000001062DD0100F487A840BB +:107FC00081320000238300881CB000003494220218 +:107FD00080320000F88742408132000000000044F7 +:107FE0009393010034941A026897000002889C0F52 +:107FF000803200000080001042C901000288224047 +:10800000E36D00000000004561B101004000001078 +:1080100062DD0100FF87A8408132000023830088D1 +:108020001CB00000449422028032000003884240C9 +:1080300081320000000000449393010044941A022E +:10804000689700000D889C0F8032000000800010AF +:1080500042C901000D882240E36D00000000004588 +:1080600061B101004000001062DD01000A88A840F3 +:1080700081320000238300881CB000002F8322027D +:10808000803200000E88424081320000000000442F +:108090009393010000001A02689701002F830040AB +:1080A00005B00000008000A656B1010056952F4093 +:1080B00005B001000400A240E76D0000B89429411A +:1080C000E7B1010000000054EF930100000000F24E +:1080D0000EB001000400A30C556F00002900004001 +:1080E0000D9801000900000712E40100000000A73C +:1080F00013C00100030000071AF401000700000785 +:1081000016880100FFFF001034D8010000000003B2 +:10811000349401000000004023B00100201800400A +:1081200011980100040020AA0F6C000000B5000D9A +:1081300042C901004688220BE67D00002588604088 +:1081400081320000FFFF0007848901002E8805C2EC +:1081500024300000580400408132010000002D0549 +:1081600048B10100638870F0183001001000000C65 +:1081700082F401000400A2410E6C00004688004019 +:1081800081B200000000704081B201003D88A0482B +:10819000236C00000000005035D001000080001A60 +:1081A00042C9010037882240E36D00000000004210 +:1081B00061B101004000001A62DD01003488A8406E +:1081C00081320000238300881CB00000209800400A +:1081D00043990100638800F8183001003888A241F3 +:1081E00023500000FFFF001034D8010000000003FE +:1081F00034940100201800401198010000002E1A4C +:1082000048B1010000000044F1B101000000000885 +:10821000F0B101000000004261B101002000001A2D +:1082200062DD01004188A809E03100000000004142 +:1082300023C001000000005035C0010000000044D0 +:1082400011C00100528822410D5000000000004181 +:108250000FC001004E88A0AA0F6C00000000004172 +:108260000FB001000900000712E40100000000A7A0 +:1082700013C00100000000401BB001002288004133 +:1082800017B000000002000912C8010022888341D3 +:10829000174000000000004017B001002288004194 +:1082A0001BC000005D882340236C000000000050CC +:1082B00035D001000080001A42C901005A882240CE +:1082C000E36D00000000004261B101004000001AAF +:1082D00062DD01005788A8408132000023830088B6 +:1082E0001CB000002098004043990100638800F80A +:1082F000183001005B88A2412350000000000041BB +:108300000FC001006088A0AA0F6C000000000041AF +:108310000FB00100B8942007E4B101005695204049 +:10832000E7B10100F08700400FB00000FFFF000C34 +:1083300080D801000400264081320000C002000CF9 +:108340007E8901007C882654613100006F88870C8B +:10835000803200001F040040899801000999000C38 +:108360008A3001000000005461B101000F0000409C +:10837000629901006F882840813200000400A254F5 +:10838000777D00006B88004081B20000778822462C +:10839000197C00002A040040899801000999000C0A +:1083A0008A3001000000005461B101000D0000405E +:1083B000629901000000A84081B200000400A254AC +:1083C000777D00007088004081B200007C882249DF +:1083D000197C00000E000040629901000000A840D6 +:1083E00081B200000400A254777D0000778800402D +:1083F00081B2000010000040629901000000A84016 +:1084000081B200000400A254777D00007C88004007 +:1084100081B2000030942F55F1930100004000A676 +:1084200056B101002F83A241E551000064000040D5 +:10843000E599010084884440813200008788A29336 +:10844000576F00000000004157C3010000001CAB43 +:1084500027B301002F832250FD7F00002F8322517C +:10846000FD7F00002F83A2411D53000050460040B5 +:108470001D9B010038050040813201000E000048BC +:10848000B2CB010010040040493101009388224022 +:10849000B56F00000E000048B2CB0100200400417F +:1084A000B55301002F83004081B20000000000514D +:1084B000FD83010040160040459901004005004041 +:1084C000493101001E000048B2CB010010040040F9 +:1084D00081320100000000DA91C001000400004870 +:1084E000B2CB010020040040B533010060162040EB +:1084F000E5B1010055820040B53301000800004895 +:10850000B2CB0100FFFF004AB48B01002004004001 +:10851000813201000A000048B2CB01001000004A7D +:10852000B4F7010020040040813201002F83004095 +:1085300081B200000400A205486D00000200004066 +:10854000439901000400A2F20E6C00000400A20294 +:10855000803200000500004043990100000000F354 +:1085600008B00100AE882250816C00000F0400406A +:1085700089980100100000408AE401000999000474 +:108580008A14010004002048096C000004002057F0 +:10859000816C000004002040E6B1010003000040AF +:1085A00096E401000000000496C00100B488004B6E +:1085B00010C90000E48B004109B000000400002055 +:1085C0008FB00000040000208FB0000004000020E5 +:1085D0008FB00000040000208FB0000004000020D5 +:1085E0008FB00000040000208FB0000004000020C5 +:1085F0008FB00000040000208FB00000198C0041F3 +:1086000009B00000040000208FB00000040000202A +:108610008FB00000040000208FB000000400002094 +:108620008FB00000040000208FB000000400002084 +:108630008FB00000040000208FB000000400002074 +:108640008FB00000558C004509B00000558C0045E6 +:1086500009B00000558C004509B00000558C00455C +:1086600009B00000040000208FB0000004000020CA +:108670008FB00000040000208FB000000400002034 +:108680008FB000009C8C004309B00000CB8C0043ED +:1086900009B00000CF8C004409B000003E8E0045B8 +:1086A00009B00000040000208FB00000040000208A +:1086B0008FB00000040000208FB0000004000020F4 +:1086C0008FB00000040000208FB00000DF8C00435A +:1086D00009B00000DD8C004309B00000E08B0045CC +:1086E00009B00000040000208FB00000040000204A +:1086F0008FB00000040000208FB0000004000020B4 +:108700008FB00000988D004209B00000988D0043A2 +:1087100009B00000988D004409B00000E08B0045CE +:1087200009B00000040000208FB000000400002009 +:108730008FB00000040000208FB000000400002073 +:108740008FB00000040000208FB00000B88D0043FF +:1087500009B00000040000208FB00000E08B00454D +:1087600009B00000040000208FB0000004000020C9 +:108770008FB00000040000208FB000000400002033 +:108780008FB00000040000208FB00000E08D004397 +:1087900009B00000E08D004409B00000E08B004506 +:1087A00009B00000040000208FB000000400002089 +:1087B0008FB00000040000208FB0000004000020F3 +:1087C0008FB00000040000208FB00000E08D004258 +:1087D00009B00000040000208FB00000E08B0045CD +:1087E00009B00000040000208FB000000400002049 +:1087F0008FB00000040000208FB0000004000020B3 +:108800008FB00000040000208FB000000F8E0044E5 +:1088100009B00000040000208FB00000E08B00458C +:1088200009B00000040000208FB000000400002008 +:108830008FB00000040000208FB000000400002072 +:108840008FB00000E08B004209B00000228E00458E +:1088500009B00000228E004509B00000E08B004501 +:1088600009B00000040000208FB0000004000020C8 +:108870008FB00000040000208FB000000400002032 +:108880008FB00000248E004209B00000248E004307 +:1088900009B00000248E004409B00000248E004579 +:1088A00009B00000040000208FB000000400002088 +:1088B0008FB00000040000208FB0000004000020F2 +:1088C0008FB00000040000208FB0000004000020E2 +:1088D0008FB000002F8E004409B00000E08B0045EF +:1088E00009B00000040000208FB000000400002048 +:1088F0008FB00000040000208FB0000004000020B2 +:108900008FB00000418E004209B00000308E00435D +:1089100009B00000418E004409B00000E08B004522 +:1089200009B00000040000208FB000000400002007 +:108930008FB00000040000208FB000000400002071 +:108940008FB00000040000208FB00000438E004371 +:1089500009B00000378E004409B00000E08B0045EC +:1089600009B00000040000208FB0000004000020C7 +:108970008FB00000040000208FB00000E08B0041A9 +:1089800009B00000968D004209B00000968D0043AA +:1089900009B00000968D004409B00000E08B00454E +:1089A00009B00000040000208FB000000400002087 +:1089B0008FB00000040000208FB00000E08B004169 +:1089C00009B00000458E004209B00000458E00430A +:1089D00009B00000458E004409B00000E08B00455E +:1089E00009B00000040000208FB000000400002047 +:1089F0008FB00000040000208FB0000004000020B1 +:108A00008FB00000040000208FB0000004000020A0 +:108A10008FB00000040000208FB000004C8E004595 +:108A200009B00000040000208FB000000400002006 +:108A30008FB00000040000208FB000004E8E004276 +:108A400009B00000040000208FB0000004000020E6 +:108A50008FB00000040000208FB000000400002050 +:108A60008FB00000040000208FB000000400002040 +:108A70008FB00000040000208FB000000400002030 +:108A80008FB000005B8E004309B00000C18E004330 +:108A900009B00000CF8C004409B000003E8E0045B4 +:108AA00009B00000040000208FB000000400002086 +:108AB0008FB00000040000208FB0000004000020F0 +:108AC0008FB00000040000208FB00000C98E00436A +:108AD00009B00000CF8C004409B000003E8E004574 +:108AE00009B00000040000208FB000000400002046 +:108AF0008FB00000040000208FB0000004000020B0 +:108B00008FB00000040000208FB00000DD8E004315 +:108B100009B00000040000208FB00000E08B004589 +:108B200009B00000040000208FB000000400002005 +:108B30008FB00000040000208FB00000040000206F +:108B40008FB00000968C004309B00000C58E004332 +:108B500009B00000CF8C004409B000003E8E0045F3 +:108B600009B00000040000208FB0000004000020C5 +:108B70008FB0000002002D0548B101000400A2F2F0 +:108B80000E6C00000400A2028032000007002D409D +:108B900081B20100000000F308B0010010040040A1 +:108BA00089980100100000478AE401000999000437 +:108BB0008A1401000400204E096C00002A000047BE +:108BC00080CE0100040024408132000006002047CE +:108BD000E6B101000400004796E4010000000047F0 +:108BE00096D001000000004796D00100000000046C +:108BF00096C001007D89004B10C90000F98E004924 +:108C000009B000000400002085B00000040000202E +:108C100085B000000400002085B0000004000020A2 +:108C200085B000000400002085B000000400002092 +:108C300085B000000400002085B000000400002082 +:108C400085B000000400002085B000000400002072 +:108C500085B000000400002085B000000400002062 +:108C600085B000000400002085B000000400002052 +:108C700085B00000328F004209B0000004000020DF +:108C800085B000000400002085B000000400002032 +:108C900085B000000400002085B000000400002022 +:108CA00085B000000400002085B000000400002012 +:108CB00085B000000400002085B000000400002002 +:108CC00085B000000400002085B0000004000020F2 +:108CD00085B000000400002085B0000004000020E2 +:108CE00085B00000398F004609B000000400002064 +:108CF00085B000000400002085B0000004000020C2 +:108D000085B000000400002085B0000004000020B1 +:108D100085B000000400002085B0000004000020A1 +:108D200085B000000400002085B000000400002091 +:108D300085B000000400002085B000000400002081 +:108D400085B000000400002085B000000400002071 +:108D500085B000000400002085B000004A8F00426A +:108D600009B000000400002085B000006D8F0042B3 +:108D700009B000000400002085B0000004000020BD +:108D800085B000000400002085B000000400002031 +:108D900085B000000400002085B000000400002021 +:108DA00085B00000678F004A09B000000400002071 +:108DB00085B000000400002085B000000400002001 +:108DC00085B000000400002085B00000748F0043CF +:108DD00009B000000400002085B00000DF8F0044CF +:108DE00009B000000400002085B00000040000204D +:108DF00085B000000400002085B0000004000020C1 +:108E000085B000000400002085B0000004000020B0 +:108E100085B00000DD8F004B09B000000400002089 +:108E200085B000000400002085B000000400002090 +:108E300085B000003D8F004109B000000400002013 +:108E400085B000003D8F004309B000003D8F004415 +:108E500009B000003D8F004509B000003D8F00467D +:108E600009B000003D8F004709B000003D8F004869 +:108E700009B000003D8F004909B000003D8F004A55 +:108E800009B000003D8F004B09B000003D8F004C41 +:108E900009B000003D8F004D09B000000400002023 +:108EA00085B000000400002085B00000489000421A +:108EB00009B000000400002085B000004890004484 +:108EC00009B000000400002085B00000040000206C +:108ED00085B000000400002085B0000004000020E0 +:108EE00085B000000400002085B0000004000020D0 +:108EF00085B000004890004B09B00000040000203D +:108F000085B000000400002085B0000004000020AF +:108F100085B000000400002085B00000040000209F +:108F200085B000006590004509B0000004000020F5 +:108F300085B000000400002085B00000040000207F +:108F400085B000000400002085B000007D9000473F +:108F500009B000000400002085B0000056900045D4 +:108F600009B000000400002085B0000004000020CB +:108F700085B000001593004609B0000004000020F1 +:108F800085B000000400002085B00000040000202F +:108F900085B000000400002085B00000040000201F +:108FA00085B000006D8F004609B000004A8F004672 +:108FB00009B00000658F004709B00000658F0048C8 +:108FC00009B000000400002085B00000040000206B +:108FD00085B000000400002085B00000678F004AC3 +:108FE00009B000000400002085B00000040000204B +:108FF00085B000000400002085B0000004000020BF +:1090000085B000000400002085B0000004000020AE +:1090100085B00000DF8F004509B00000748F004369 +:1090200009B00000658F004709B00000658F004857 +:1090300009B000000400002085B0000004000020FA +:1090400085B000000400002085B00000DD8F004CDA +:1090500009B000000400002085B0000004000020DA +:1090600085B000000400002085B00000040000204E +:1090700085B000000400002085B00000040000203E +:1090800085B000008490004409B000008490004244 +:1090900009B00000C98B004709B00000C98B004827 +:1090A00009B000000400002085B00000040000208A +:1090B00085B000000400002085B000008490004BC3 +:1090C00009B000000400002085B00000040000206A +:1090D00085B000003D8F004109B00000AF9000470F +:1090E00009B000000400002085B000009290004705 +:1090F00009B000000400002085B00000040000203A +:1091000085B000000400002085B0000004000020AD +:1091100085B000000400002085B00000040000209D +:1091200085B000009290004709B0000004000020C4 +:1091300085B000000400002085B00000040000207D +:1091400085B000000400002085B00000040000206D +:1091500085B000000400002085B00000040000205D +:1091600085B000009290004709B00000AF90004722 +:1091700009B00000658F004709B00000658F004806 +:1091800009B000000400002085B0000004000020A9 +:1091900085B000000400002085B0000092900047D8 +:1091A00009B000000400002085B000000400002089 +:1091B00085B000000400002085B0000004000020FD +:1091C00085B000000400002085B0000004000020ED +:1091D00085B000000400002085B0000004000020DD +:1091E00085B00000BE90004709B00000BE90004866 +:1091F00009B000000400002085B000000400002039 +:1092000085B000000400002085B0000004000020AC +:1092100085B000000400002085B00000040000209C +:1092200085B000002F91004009B000005191004727 +:1092300009B000004391004809B000008A9000473F +:1092400009B000008A90004709B000005191004722 +:1092500009B000005A91004709B000005A91004837 +:1092600009B000000400002085B0000043910048D0 +:1092700009B000008A90004709B000008A900047BA +:1092800009B000004391004809B00000040000202C +:1092900085B000000400002085B00000040000201C +:1092A00085B000004890004309B000000400002091 +:1092B00085B000004890004509B000004890004685 +:1092C00009B00000658F004709B00000658F0048B5 +:1092D00009B000000400002085B000004890004A5A +:1092E00009B000000400002085B000004890004C48 +:1092F00009B000000400002085B000000400002038 +:1093000085B000000400002085B00000AE9000474A +:1093100009B00000A090004809B0000091900047FB +:1093200009B000009190004709B00000AE900047DE +:1093300009B00000C98B004709B00000C98B004884 +:1093400009B000000400002085B00000A090004893 +:1093500009B000009190004709B0000091900047CB +:1093600009B00000A090004809B0000004000020EF +:1093700085B000000400002085B000005D9100422F +:1093800009B000000400002085B000005D91004499 +:1093900009B000000400002085B000000400002097 +:1093A00085B000000400002085B00000040000200B +:1093B00085B000000400002085B0000004000020FB +:1093C00085B000005D91004B09B000000400002052 +:1093D00085B000000400002085B0000004000020DB +:1093E00085B000000400002085B0000004000020CB +:1093F00085B000005D91004309B00000040000202A +:1094000085B000005D91004509B000005D91004607 +:1094100009B000005D91004709B000005D9100486F +:1094200009B000000400002085B000005D91004AF2 +:1094300009B000000400002085B000005D91004CE0 +:1094400009B000005D91004C09B00000040000204C +:1094500085B000000400002085B00000040000205A +:1094600085B000007A91004609B000000400002099 +:1094700085B000000400002085B00000040000203A +:1094800085B000000400002085B000007D900047FA +:1094900009B000000400002085B000007A91004669 +:1094A00009B000000400002085B000000400002086 +:1094B00085B000000400002085B0000004000020FA +:1094C00085B000000400002085B0000004000020EA +:1094D00085B000009C92004609B000000400002006 +:1094E00085B000000400002085B0000004000020CA +:1094F00085B000000400002085B000007D9000478A +:1095000009B000000400002085B000009C920046D5 +:1095100009B000000400002085B000000400002015 +:1095200085B000009C92004609B0000004000020B5 +:1095300085B000000400002085B000000400002079 +:1095400085B000000400002085B00000C5920042F4 +:1095500009B000000400002085B0000004000020D5 +:1095600085B000000400002085B000000400002049 +:1095700085B000000400002085B000000400002039 +:1095800085B00000C392004A09B00000040000202A +:1095900085B000000400002085B000000400002019 +:1095A00085B000000400002085B000000400002009 +:1095B00085B000000400002085B0000004000020F9 +:1095C00085B00000C592004609B0000004000020EC +:1095D00085B00000658F004709B00000658F004826 +:1095E00009B000000400002085B000000400002045 +:1095F00085B000000400002085B00000C392004A3E +:1096000009B000000400002085B000000400002024 +:1096100085B000000400002085B000000400002098 +:1096200085B000000400002085B000000400002088 +:1096300085B000000400002085B000000400002078 +:1096400085B000000400002085B000000400002068 +:1096500085B000006A91004109B0000004000020BC +:1096600085B000000400002085B000000400002048 +:1096700085B000000400002085B000000400002038 +:1096800085B000000400002085B000007791004202 +:1096900009B000000400002085B00000779100446C +:1096A00009B000000400002085B000000400002084 +:1096B00085B000000400002085B0000004000020F8 +:1096C00085B000000400002085B0000004000020E8 +:1096D00085B000007791004B09B000000400002025 +:1096E00085B000000400002085B0000004000020C8 +:1096F00085B000000400002085B0000004000020B8 +:1097000085B000007791004309B0000004000020FC +:1097100085B000007791004509B0000077910046C0 +:1097200009B000007791004709B000007791004828 +:1097300009B000000400002085B0000004000020F3 +:1097400085B000000400002085B000007791004C37 +:1097500009B000000400002085B0000004000020D3 +:1097600085B000000400002085B000000400002047 +:1097700085B000006590004C09B000000400002096 +:1097800085B000000400002085B000000400002027 +:1097900085B000000400002085B000007D900047E7 +:1097A00009B000000400002085B000005690004C75 +:1097B00009B000000400002085B000000400002073 +:1097C00085B000008393004609B00000040000202B +:1097D00085B000000400002085B000000A9300421C +:1097E00009B000000400002085B000000A93004486 +:1097F00009B000000400002085B000000400002033 +:1098000085B000000400002085B0000004000020A6 +:1098100085B000000400002085B000000400002096 +:1098200085B000000A93004B09B00000040000203E +:1098300085B000000400002085B000000400002076 +:1098400085B000000400002085B000000400002066 +:1098500085B000000400002085B000000400002056 +:1098600085B000000A93004509B000000A93004645 +:1098700009B00000658F004709B00000658F0048FF +:1098800009B000000400002085B0000004000020A2 +:1098900085B000000400002085B000000A93004C51 +:1098A00009B000000400002085B000000400002082 +:1098B00085B000000400002085B0000056900042F2 +:1098C00009B000001593004609B000000400002014 +:1098D00085B000000400002085B0000056900046CE +:1098E00009B000000400002085B000007D90004712 +:1098F00009B000000400002085B000001593004668 +:1099000009B000000400002085B000000400002021 +:1099100085B000001593004609B000000400002047 +:1099200085B000000400002085B000000400002085 +:1099300085B000001C93004309B000000400002023 +:1099400085B000000400002085B000000400002065 +:1099500085B000000400002085B000007D90004725 +:1099600009B000000400002085B000001C930043F3 +:1099700009B000000400002085B0000004000020B1 +:1099800085B000001C93004D09B0000004000020C9 +:1099900085B000000400002085B000000400002015 +:1099A00085B000000400002085B000003293004321 +:1099B00009B000000400002085B000000400002071 +:1099C00085B000000400002085B0000004000020E5 +:1099D00085B000000400002085B0000004000020D5 +:1099E00085B000000393004A09B000000400002085 +:1099F00085B000000400002085B0000004000020B5 +:109A000085B000000400002085B0000004000020A4 +:109A100085B000000400002085B000000400002094 +:109A200085B000003293004309B00000040000201C +:109A300085B00000658F004709B00000658F0048C1 +:109A400009B000000400002085B0000004000020E0 +:109A500085B000000400002085B000000393004A98 +:109A600009B000000400002085B0000004000020C0 +:109A700085B000000400002085B000000400002034 +:109A800085B000004A93004309B0000004000020A4 +:109A900085B000000400002085B000000400002014 +:109AA00085B000000400002085B000007D900047D4 +:109AB00009B000000400002085B000004A93004374 +:109AC00009B000000400002085B000000400002060 +:109AD00085B000004A93004D09B00000040000204A +:109AE00085B000000400002085B000004A8F0042CD +:109AF00009B000000400002085B000006D8F004216 +:109B000009B000000400002085B00000040000201F +:109B100085B000000400002085B000000400002093 +:109B200085B000000400002085B000000400002083 +:109B300085B000006D93004209B0000004000020D1 +:109B400085B000000400002085B000000400002063 +:109B500085B000000400002085B000000400002053 +:109B600085B000000400002085B000000400002043 +:109B700085B000006D8F004609B000004A8F004696 +:109B800009B00000658F004709B00000658F0048EC +:109B900009B000000400002085B00000040000208F +:109BA00085B000000400002085B000006D930046E1 +:109BB00009B000000400002085B00000040000206F +:109BC00085B000000400002085B0000004000020E3 +:109BD00085B000007493004A09B000000400002022 +:109BE00085B000000400002085B0000004000020C3 +:109BF00085B000000400002085B000007D90004783 +:109C000009B000000400002085B000007493004AF1 +:109C100009B000000400002085B00000040000200E +:109C200085B000001693004609B000000400002033 +:109C300085B000000400002085B000000400002072 +:109C400085B000001693004609B000000400002013 +:109C500085B000000400002085B000000400002052 +:109C600085B000000400002085B000007D90004712 +:109C700009B000000400002085B0000016930046E3 +:109C800009B000000400002085B00000040000209E +:109C900085B000001693004609B0000004000020C3 +:109CA00085B000000400002085B000000400002002 +:109CB00085B000000400002085B000007D930042C4 +:109CC00009B000000400002085B00000040000205E +:109CD00085B000000400002085B0000004000020D2 +:109CE00085B000000400002085B0000004000020C2 +:109CF00085B000000393004A09B000000400002072 +:109D000085B000000400002085B0000004000020A1 +:109D100085B000000400002085B000000400002091 +:109D200085B000000400002085B000000400002081 +:109D300085B000007D93004609B0000004000020BB +:109D400085B00000658F004709B00000658F0048AE +:109D500009B000000400002085B0000004000020CD +:109D600085B000000400002085B000000393004A85 +:109D700009B000000400002085B0000004000020AD +:109D800085B000000400002085B00000748F004DF5 +:109D900009B000000400002085B00000040000208D +:109DA00085B000000400002085B000000400002001 +:109DB00085B000000400002085B0000004000020F1 +:109DC00085B000000400002085B0000004000020E1 +:109DD00085B000000400002085B0000004000020D1 +:109DE00085B000000400002085B0000004000020C1 +:109DF00085B000000400002085B0000004000020B1 +:109E000085B000000400002085B0000004000020A0 +:109E100085B000000400002085B00000748F004D64 +:109E200009B00000658F004709B00000658F004849 +:109E300009B000000400002085B0000004000020EC +:109E400085B000000400002085B000000400002060 +:109E500085B000000400002085B000000400A205C9 +:109E6000486D0000040022078032000007002E4BDE +:109E700019900100FB870004E6B10000C98B224263 +:109E8000197C00000F97003A81300100C98B004017 +:109E900081B20000C98B2242197C0000FF1F000F15 +:109EA0001E8C01007396004081320100DB8B9C0FF9 +:109EB000803200000000005C1F8001000080001064 +:109EC00042C90100DB8B2240E36D00000000004529 +:109ED00061B101004000001062DD0100D88BA84094 +:109EE00081320000238300881CB000001D852202FF +:109EF00080320000DC8B42408132000000000044D0 +:109F00009393010000001A02689701001D8500402C +:109F100005B000000400A205486D000004002207FF +:109F20008032000005002E4B19900100FB870004D1 +:109F3000E6B100000000004087B0010000000040D2 +:109F40008DB001000080000342C90100400000A163 +:109F500044C90100000000F0E0B101007F98000654 +:109F6000074001000400A25C1F7C00000000000606 +:109F700007D00100D4002E5C1F90010000000007F4 +:109F8000F0B101000C80000342C90100000000F0A4 +:109F9000F0B101000000004081B20100000000FEAD +:109FA00096B00100000000FE96C00100000000F025 +:109FB000F0B101000000004081B20100000000FE8D +:109FC00096C00100000000FE96C00100000000F0F5 +:109FD000F0B101000000004081B20100000000FA71 +:109FE00096C00100000000FE96C001000030004B4A +:109FF000948801000000004695F001000000004A2E +:10A0000096C001005E012E34978401000200004BCF +:10A01000E4E5010064012040E1B10100090000070E +:10A0200086E4010000002EA787C001001000001088 +:10A0300048C9010010000040F19901005801004397 +:10A04000F0C9010058010005E0C90100000000440A +:10A0500061B10100A00000A462DD0100088CA840ED +:10A06000813200000000000548B101001A000040E4 +:10A070009798010008002E4095B00100108C204BED +:10A08000946C000000000040F1B101000D8C004113 +:10A0900095C000001080001042C90100178C2240BA +:10A0A000E36D00000000004461B1010040000010B9 +:10A0B00062DD0100138CA8408132000023830088F8 +:10A0C0001CB000000000000548B101000F970040DF +:10A0D00081300100E08B004081B200000C80000361 +:10A0E00042C90100000000F886B00100000000F83D +:10A0F00088B001001480000398C801000400A2A1E8 +:10A10000986C00001E8C444081320000218CA24CCF +:10A11000FD7F0000228C004CFD930000238C20F07A +:10A12000566F0000000000F056B3010000001C4014 +:10A1300081B2010064000040819801006400004089 +:10A1400080CC01000400A64081320000D80000400D +:10A15000819801000400A2438104000000800010E7 +:10A1600044C9010064000040F1990100700000053D +:10A17000F0C9010000000043F0B1010000000047F9 +:10A1800061B101002000001062DD01002E8CA844A6 +:10A19000E0310000100000108CC801000080004673 +:10A1A00044C9010040000040F19901006801000528 +:10A1B000F0C9010064000043F0C90100040024401C +:10A1C000813200000000004761B10100000000463C +:10A1D00062B10100378CA844E0310000238300887D +:10A1E0001CB000000900000786E4010038002EA71B +:10A1F00087C001008B002D0548B101003F8C224330 +:10A20000E77D00000000004445C10100428C22446B +:10A21000E77D00000000004C45C101000000004A3D +:10A2200019900100680120A2E4B1010088000040FB +:10A2300043990100468C230BE56D000000000041AE +:10A24000199001000080001044C901005000004036 +:10A25000F199010058010043F0C9010058010005BF +:10A26000E0C901000000004461B1010000000010DD +:10A2700062B101004B8CA84081320000238300882A +:10A280001CB000005C002E0548B1010000800003F6 +:10A2900042C90100000060F096B00100A00000403B +:10A2A000439901000400A2F2803200000F970041A0 +:10A2B00081300100E08B004081B20000588CA2493F +:10A2C000197C000086000040479901005C8C00402A +:10A2D000E5B1000086002F49198001005C8CA2F2D4 +:10A2E000803200008B0000404799010000000042CE +:10A2F000E79101005F8CA246197C0000A00000409D +:10A3000047990100638C0040E5B10000A0002F4692 +:10A3100019800100638CA2F2803200008B000040A3 +:10A320004799010000000041E79101000700004E3D +:10A3300080E401000039004080C801000400A24010 +:10A34000066C0000A80000404399010034002DF085 +:10A3500024B00100000000FB0CB00100000000FB75 +:10A3600010B00100000000FB12B001000F0000F36C +:10A3700016880100040000F314F40100938C2640B9 +:10A3800081320000798C220A166C000058003D438F +:10A3900013E00100000000F882B00100040022F088 +:10A3A000843000001B980040813201002383008824 +:10A3B0001CB000000000000548B101000000004191 +:10A3C00013C00100788CA043136C00000000004013 +:10A3D00013B001006E8C004115D00000938C220A4E +:10A3E000803200000400A208126C000058003D43B7 +:10A3F00013E00100000000F882B00100040022F028 +:10A40000843000001B980040813201004000204051 +:10A41000E1B10100238300881CB0000000000005AA +:10A4200048B10100938C224115500000000000410A +:10A4300011C00100868CA043116C00000000004098 +:10A4400011B0010004002206106C000058003D43CA +:10A4500011E00100000000F836B00100040022F015 +:10A46000003000000000005083B001005497004706 +:10A4700061310100238300881CB000003194000585 +:10A48000483101000000004561B1010040000010AA +:10A4900062DD01008F8CA840813200002383008898 +:10A4A0001CB00000828C000548B10000370020403D +:10A4B000E7B101008697005181300100E08B004038 +:10A4C00081B2000037000040439901000400A2F36C +:10A4D0008032000034002E41F5B10100001100402F +:10A4E000E59901000400A248197C0000A08C0048F6 +:10A4F0001990000037000040439901000400A2F3C6 +:10A500008032000034002E41F5B1010000110040FE +:10A51000E59901000080000342C90100000000F835 +:10A5200094B00100A78C2245237C0000B0002FF0DE +:10A530008CB00100000060F08CC001007C00004085 +:10A54000439901000400A3F08C6C000090000040CF +:10A550004399010035002DF08CB0010034002DF33B +:10A5600084B00100040022F3846C000058003E43D4 +:10A5700085E00100AE8C2248197C000000000041FB +:10A580008DC001000000680A8CC0010038002A4A12 +:10A59000E0B1010028000000E0C901003C00201BE0 +:10A5A000E0B101001080000342C90100000000F882 +:10A5B00038B00100000000F826B00100040022F8C5 +:10A5C00002300000BC8C2301146C0000000000F875 +:10A5D00080B00100000000F882B001004C0020F0C3 +:10A5E000E4B1010044002040E0B1010048002041F6 +:10A5F000E0B10100A8002D1032B001005F9800F01A +:10A6000024300100C58CA244816C0000C38C22411F +:10A61000197C0000BC9500403B300100ED8CA20885 +:10A620003C300000C58C004081B20000BF94004067 +:10A6300081320100ED8CA2083C3000005000201C4B +:10A64000E0B1010054002013E0B101004E002001F0 +:10A65000E4B101004000200AE0B101008697005FEC +:10A6600081300100E08B004081B2000037000040E3 +:10A6700047990100959500F394300100A08C224A7F +:10A6800080320000D18C004081B2000037000040D1 +:10A6900047990100959500F3943001000400204390 +:10A6A000976C000058003E4397E001000000001B3B +:10A6B000F0B101001F006000008C0100E08B8511EB +:10A6C000803200000480000342C90100B0002FF076 +:10A6D0008CB00100000060F08CC001007C000040E4 +:10A6E000439901000400A3F08C6C00008697005F82 +:10A6F00081300100E08B004081B20000040022495B +:10A70000197C0000DF8C004919800000E48C224194 +:10A71000197C0000BC9500403B300100E88CA20889 +:10A720003C3000008697005F81300100E08B0040E4 +:10A7300081B20000BF94004081320100E88CA20881 +:10A740003C3000008697005F81300100E08B0040C4 +:10A7500081B2000050002D1032B0010054002DF0E5 +:10A7600038B001004E002DF026B0010040002DF25F +:10A7700002B00100000000F014B001003000001031 +:10A780008CC801000080004644C9010068012D44C6 +:10A7900061B10100100068F280C8010000000008EB +:10A7A000F0B1010058010005E0C901000000000BF4 +:10A7B00037B001000000004036D001005C012E409F +:10A7C00010C001000000000680C00100000000521F +:10A7D00081D0010018970040E431010020000046BC +:10A7E00062DD0100F98CA840233000000E95004086 +:10A7F000813201001695004081320100078D8241AF +:10A80000234000002080001042C90100048D224036 +:10A81000E36D00000000004661B10100400000103F +:10A8200062DD0100018DA840813200002383008891 +:10A830001CB000000000000548B10100000000103D +:10A8400032B001000000004123B001000080001977 +:10A8500044C901000F8D2241197C00000B8DA3011A +:10A860000C6C00000C8D000604B00000000000011C +:10A8700004B001000E8D2002366C00000000001BA9 +:10A8800004B00100128D0002E0B10000118DA3019F +:10A890000C6C0000128D000604B0000000000001E6 +:10A8A00004B001000000680216940100FFFF000BD5 +:10A8B00016D80100000068083E9601000000001C48 +:10A8C000F0B101000000004661B101002000001954 +:10A8D00062DD0100178DA813E0310000548D2202C3 +:10A8E0001450000044002D020CD001003F8DA20244 +:10A8F00002500000258D225C1F7C00002080000398 +:10A9000042C90100248D2240E36D00000000004791 +:10A9100061B101004000001062DD0100208DA840FF +:10A9200081320000238300881CB000000000000575 +:10A9300048B1010044002D5C1F80010048002DF04B +:10A9400038B001004C002DF026B0010038002FF285 +:10A9500002B00100418D2201146C00000400A440EB +:10A9600081320000338D22461F7C0000000000462B +:10A970001F80010020002D0348B10100328D2240CC +:10A98000E36D00000000004461B1010040000010D0 +:10A9900062DD01002F8DA8408132000023830088F2 +:10A9A0001CB0000038002F0548B10100000000F87D +:10A9B00094B0010038002DF096B001000000004C6A +:10A9C000E1C101002000000348C901000000224A43 +:10A9D000F1B1010044000005F0C901000000004A87 +:10A9E000F0B101000000004BE0B1010000000047A1 +:10A9F00061B10100A00000A462DD01003C8DA85CF3 +:10AA00001F100000418D000548B100000000000249 +:10AA100038C0010004002440813200004F8D22061E +:10AA2000803200000000005033C001004D8DA202B2 +:10AA3000366C000004002241197C000004008F0DD8 +:10AA400042310000040022F0803200000400225C49 +:10AA5000E17D00000400A2F06A060000100000F88A +:10AA600010C801000000005C11800100F0070040E8 +:10AA700037980100FD8C00A11AB000000000000210 +:10AA800010C00100FD8C000236D000005000201CD8 +:10AA9000E0B1010054002013E0B101004E0020019C +:10AAA000E4B101004000200AE0B101005B8D005FCD +:10AAB00001B000000400A202026C00000400A20227 +:10AAC0000C6C000037002D4601B00100040000F3BB +:10AAD00080F401005A8DA043816C000000000055F5 +:10AAE00001B0010040002040E1B1010000800019E8 +:10AAF00042C90100618D2240E36D00000000004664 +:10AB000061B101004000001962DD01005E8DA840C6 +:10AB100081320000238300881CB0000013950040A0 +:10AB2000813201003080001042C90100688D22404E +:10AB3000E36D00000000004461B10100400000101E +:10AB400062DD0100658DA84081320000238300880A +:10AB50001CB0000060012F0548B101000000000B8F +:10AB6000E4B101000000005017F001006D8D90F27B +:10AB7000164000000000004117C0010000006620E0 +:10AB800017A40100320000A62AC00100000000F254 +:10AB90002A940100708D45486131000000D0001EEC +:10ABA00062DD0100758D284005300000718D22485E +:10ABB000777D0000788D004081B200000000001514 +:10ABC00062B10100838D284081320000758D004004 +:10ABD00081B2000000001D0092B00100808D224172 +:10ABE000197C0000040022403B6C00000400A348D4 +:10ABF0003B6C00000080000342C90100C99400F8CA +:10AC0000003001007D8DA2413B500000848D004941 +:10AC100000B00000FF07001E008C0100C994004036 +:10AC200081320100848D004900B0000000001D4702 +:10AC300019800100878D225F016C00008E98004012 +:10AC400081320100AA88000080B000008E8D225C55 +:10AC50001F7C00002080000342C901008E8D22402D +:10AC6000E36D00000000004761B1010040000010EA +:10AC700062DD01008B8DA8408132000023830088B3 +:10AC80001CB000008E8D400548310000FFFF00071A +:10AC900094890100948D85CA943000008E98185CC8 +:10ACA0001F0001000E00000F1E8C0100B78700403E +:10ACB00081B200008697180080300100E08B0047C9 +:10ACC000198000000000004019800100E08B22473D +:10ACD000197C0000BF940040813201009B8DA208C6 +:10ACE00080320000E08B004081B2000018970040E5 +:10ACF0000D3001009C01004045990100FFFF000B51 +:10AD0000988801008B002D5017F00100A18D904C08 +:10AD1000164000000000004117C00100A38D22432F +:10AD2000E77D00000000004445C1010000006620EE +:10AD300017A4010068010040439901005C012EF254 +:10AD400080B00100020062407ECD0100000000578B +:10AD500081C0010000002E1048B101000300004036 +:10AD6000F08D010000000008F0B10100580100055D +:10AD7000E0C901000000004461B1010000000010C2 +:10AD800062B10100AD8DA8408132000023830088AC +:10AD90001CB000000000000548B10100B18D45481D +:10ADA000613100000050000862DD0100B78D2840CD +:10ADB00005300000B28D2248777D0000C9941D083F +:10ADC00000300100E08B004081B20000E08B1D47A5 +:10ADD000198000000400A205486D00003500004005 +:10ADE00047990100010063F384C80100BD8DA043B1 +:10ADF000856C00000000634085B00100A8000040A1 +:10AE00004399010037002FF024B00100040022F321 +:10AE10009E060000010063F382CC0100CB8DA241AD +:10AE20009E060000E08B224483700000A8000040D2 +:10AE3000439901000400A2F0246C00003600004099 +:10AE40004399010058003D43E7E10100E08B1FF00A +:10AE5000246C00008E98004881300100AA882341AC +:10AE6000836C0000AA88004781B0000034000040D5 +:10AE70004399010004002242E66D000058003D4362 +:10AE800085E00100000000F836B00100000000F08D +:10AE900000B0010004002200803200000400A20083 +:10AEA000BE06000028000040839801005497004728 +:10AEB00061310100238300881CB0000000002D03D5 +:10AEC00048B1010008002DF094B00100000000F826 +:10AED0008EB0010090002DF014B0010000000005BC +:10AEE00048B10100A88CA2408F7C0000DE8D224773 +:10AEF0008F7C00000400A248197C0000A88C004848 +:10AF000019900000040022468F7C0000608E0040F3 +:10AF100081B200000400A205486D000036002D5DDE +:10AF200005B4010037002DF380B00100000000F3EC +:10AF30008EB00100F00000477E8901000400264029 +:10AF4000813200005C003D4381E00100A8002DF04B +:10AF500094B001000400224A80320000000000F09A +:10AF600024B001002000001086DC010040800003B6 +:10AF700044C901009293004AF03101000400A25C30 +:10AF80001F7C000036002F5C1F900100F28DA25044 +:10AF90008F50000034002040E1B10100E08B004000 +:10AFA00081B20000F00000477E89010004002640C5 +:10AFB000813200000000634181C00100F78DA04391 +:10AFC000816C00000000634081B001003700204721 +:10AFD000E6B10100E08B2247803200000400004708 +:10AFE0000CF401000000004F8F8401000C8E2247FA +:10AFF0000C6C000058003D4381E001000C8E1FF0F6 +:10B00000246C00000000005C1F8001000080001024 +:10B0100042C90100058E2240E36D0000000000459A +:10B0200061B101004000001062DD0100028EA84005 +:10B0300081320000238300881CB00000058E42404E +:10B0400005300000000000449393010000001A5DE9 +:10B05000699301000A8E23410D6C0000E08D00050C +:10B0600048B100008E98000548310100AA880048C8 +:10B0700081B00000E08B22408F6C00008697005F5B +:10B0800081300100E08B004081B200004002000CE2 +:10B090007E8901000400A64081320000A200004029 +:10B0A00043990100000000F384B00100A6002D497F +:10B0B00019900100020000F280F40100B8002D4058 +:10B0C00081B20100000000F280C0010000000040D9 +:10B0D00082F8010019000040819801001D8EA040F7 +:10B0E000826C00002C010040819801001D8EA3405D +:10B0F000826C00000000004180B001001F8E204CD7 +:10B10000856C00000000004185C0010086002040E1 +:10B11000E4B10100A2002042E6B10100E08B004052 +:10B1200081B200000F97005081300100E08B004099 +:10B1300081B200000480000342C90100040022F033 +:10B1400080300000000000408DB001007F9800407A +:10B15000873001000400A25C1F7C0000B0002F5C5F +:10B160001F900100000060F080C001007C000040E2 +:10B17000439901000400A3F0806C00008697005FF3 +:10B1800081300100E08B004081B2000004000040EB +:10B1900081B20000E08B2246197C0000A000004034 +:10B1A00047990100010062F296CC0100E08BA640B5 +:10B1B000813200008697004A813001005B9700468B +:10B1C00095300100E08B004081B20000E08B224905 +:10B1D000197C00008600004047990100010062F2DE +:10B1E00080CC0100E08BA640813200008697004AA7 +:10B1F000813001005B97004795300100E08B0040F3 +:10B2000081B2000031940040813201000400A25C50 +:10B210001F7C0000E08B005C1F9000000400A24631 +:10B22000197C0000E08B004081B200000400A249BC +:10B23000197C0000E08B004081B20000BA000040A1 +:10B2400047990100010062F280C80100498E9040D8 +:10B2500080320000FFFF624081980100A40000409E +:10B2600047990100E08B2240E56D0000E08B004132 +:10B27000E5C100000F97004D81300100E08B0040D8 +:10B2800081B200005C00004047990100040022F0F8 +:10B290009630000000000040E1B101000080000392 +:10B2A00044C901000000004BE0B101000000004073 +:10B2B0008DB001007F980040873001008B00004076 +:10B2C00047990100598E80F396300000000000403D +:10B2D000E781010000000047199001000400A25C12 +:10B2E0001F7C0000E08B005C1F90000037000040D6 +:10B2F000439901000400A2F38032000034000040B2 +:10B300004599010001000040F5990100001100403D +:10B31000E5990100BF94004081320100718EA208BE +:10B32000803200003700004047990100000000F320 +:10B3300082B001000000635183D00100340000405E +:10B3400047990100010063F384CC0100698E9F429C +:10B35000803200000000634285B00100000000451B +:10B3600003F001000000000100C001006B8E375C9B +:10B37000613100000000001B62B101006C8EA84B1F +:10B38000191000000000000062B101006E8EA8409C +:10B3900081320000F087174081B200000080000376 +:10B3A00042C9010090002DF094B00100AC002DF0D6 +:10B3B00030B0010035002DF028B0010034002DF32D +:10B3C00084B00100040022F3846C000058003E4366 +:10B3D00085E0010001000018F0C901000000004AEA +:10B3E000E0B1010038002000E0B101003C00201B6A +:10B3F000E0B1010040002040E1B101000000004048 +:10B400002BB001006A9700400D30010000000018C9 +:10B4100016C00100828EA0141644000000000041F6 +:10B4200017C001000E0000A244C90100000000186E +:10B43000F8B10100B0002D14F8B101001050004027 +:10B44000879801008B8E224A197C0000003000434F +:10B4500086C801000030000B16C801008B8EA44086 +:10B46000813200000000004117C0010001006E435E +:10B4700086980100AE970030813001008F8EA04188 +:10B48000174000000000004117C00100968E224ABC +:10B49000197C0000080000A244C90100CC002DABBB +:10B4A000F9B10100000000AB17C00100958EA0F0BB +:10B4B000164400000000004117C00100000064F0C5 +:10B4C00082B00100900000404599010000006041F9 +:10B4D00031C00100BC000040439901009C8E060C65 +:10B4E00080320000A00020F2E4B10100040009460F +:10B4F000191000009C01004045990100FFFF000B5E +:10B50000988801008B002D5017F00100A18E904CFF +:10B51000164000000000004117C00100A38E224326 +:10B52000E77D00000000004445C1010000006620E6 +:10B5300017A4010068010040439901005C012EF24C +:10B5400080B00100020062407ECD01000000005783 +:10B5500081C0010000002E1048B10100030000402E +:10B56000F08D010000000008F0B101005801000555 +:10B57000E0C901000000004461B1010000000010BA +:10B5800062B10100AD8EA8408132000023830088A3 +:10B590001CB000000000000548B10100B18E454814 +:10B5A000613100000050000862DD0100B28EA84049 +:10B5B0000530000035001D4047990100010063F38C +:10B5C00084C80100B88EA043856C00000000634071 +:10B5D00085B001003700004047990100040022F3C4 +:10B5E0009E060000010063F382CC01000400A2412A +:10B5F0009E0600008B000040479901000400A24510 +:10B60000E77D000000000045E79101008697005F9C +:10B6100081300100E08B004081B200003700004023 +:10B6200047990100959500F394300100608E224AFD +:10B6300080320000D18C004081B200003700004011 +:10B6400047990100959500F3943001009A8C224AA5 +:10B6500080320000D18C004081B2000036000040F2 +:10B6600043990100000000FB12B001000F0000F33D +:10B6700090880100040000F30CF40100040026404F +:10B6800081320000CB8C2206906C00000400AA409E +:10B69000813200005C003D4313E00100A8002DF062 +:10B6A00094B0010004002240956C000037002FF098 +:10B6B00024B0010036002A50E7D1010000006341A8 +:10B6C00013C00100D88EA043136C0000000000409E +:10B6D000E7B101008F9300108630010023830088BA +:10B6E0001CB00000DA8E4205483100000000004422 +:10B6F00093930100CB8C1A5D699300000400A205AE +:10B70000486D000036002D1086B001005C003D43FE +:10B71000E7E10100A8002DF094B001000400224AE6 +:10B720008032000035002FF024B0010001006BFBD7 +:10B7300084C80100E78EA043856C000035002040DE +:10B74000E7B101000000004081B20100010063F395 +:10B7500012C80100EA8EA043136C000000000040F4 +:10B76000E7B101004080000344C901009293004A00 +:10B77000F0310100238300881CB00000ED8E4205EB +:10B7800048310000000000449393010000001A5D5E +:10B79000699301003700004047990100040022F33B +:10B7A0009E060000110063F382CC010004001F41DB +:10B7B00080320000C28D22419E060000350000400C +:10B7C0004399010058003D43E7E10100000000F803 +:10B7D00036B00100D08D00F000B000005E012D05F4 +:10B7E00048B10100FA8E65F21230000000993F4224 +:10B7F00013F00100FF8E2247E77D00002783758844 +:10B800001CB00000F98E004081B20000000000472B +:10B81000E791010000007542199001007500004099 +:10B8200061990100018FA8B10C300000A9960010A9 +:10B8300094300100238300881CB000005E012E05B7 +:10B8400048B10100C0A83D460DE0010000000040E5 +:10B8500097B001000B8F2240E16D0000040002410F +:10B8600097400000088F005043C10000178F224B03 +:10B87000803200000000624B1294010009000007B2 +:10B8800096E40100000000A797C0010030000010FE +:10B8900094C801000080004A449901000000004261 +:10B8A000F1B101005E01004BF0C901005E0100052D +:10B8B000E0C901000000004461B101002000004A1D +:10B8C00062DD0100158FA840813200000080001069 +:10B8D00044C9010000000050F1B10100040000095A +:10B8E00096E40100000068A897C00100D40000059C +:10B8F000E0C901000000004461B101000000001037 +:10B9000062B101001D8FA8408132000023830088AE +:10B910001CB0000000993F4213F00100218F6540E8 +:10B92000813200003F0000F39688010000000040D3 +:10B93000E7B101000000755561B10100000000068B +:10B9400062B10100258FA840813200002A8F224B6E +:10B95000803200000000004B62B10100288FA84037 +:10B96000813200000000009713B001000000009633 +:10B9700097B00100308F2009966C0000308F1F09AE +:10B9800096240000278300881CB000002B8F004005 +:10B9900081B200000F97005781300100C98B00056C +:10B9A00048B1000004002242197C00002E00004033 +:10B9B00043990100378F22F3803200000F97004235 +:10B9C00081300100F087004081B20000869700526C +:10B9D00081300100C98B004219800000040022421E +:10B9E000197C00000F97003A8130010086970052C1 +:10B9F00081300100C98B004081B20000000000408E +:10BA000005B001000596004095300100C98B224029 +:10BA1000956C0000240400408998010009990000F9 +:10BA20008A300100458FA2401F7C0000C99400406D +:10BA300081320100F087004081B2000004800003E1 +:10BA400042C90100000000F202B00100A5950052B9 +:10BA500095300100AC95004B02B00000F08700402B +:10BA600081B200002B98004095300100518FA20850 +:10BA700080320000518FA21680320000F0872242EF +:10BA8000197C00000000004B199001000F97003A4C +:10BA900081300100F087004081B20000002300A641 +:10BAA00016B00100548F831E803200000008000B86 +:10BAB00016DC0100000000002AC001005E970008AB +:10BAC00080300100588F005E179000007F97004380 +:10BAD000613101009E9300408D30010066970007A0 +:10BAE000161401000080001042C90100608F22403E +:10BAF000E36D00000000004361B101004000001050 +:10BB000062DD01005D8FA840813200002383008840 +:10BB10001CB000000097005E05100100C9940040B1 +:10BB200081320100648F2209803000008697004036 +:10BB300013300100D08B000548B100003C96004056 +:10BB400081320100C98B004081B200000400A24A8A +:10BB50001F7C00000000004A1F9001006C8F2243F0 +:10BB60003D7C0000000000441990010000000043EB +:10BB70003D8001006D8F0042199000000400A24F2B +:10BB80002B7C00000400A2451F7C000014002D4502 +:10BB90001F9001000400A2F0146C00000400A0013A +:10BBA000146C0000DF8F831E80320000DF8F0044A2 +:10BBB000199000002F000040439901000400A247A3 +:10BBC000E77D0000B494004081320100878FA20815 +:10BBD00080320000878FA21680320000838FA2423D +:10BBE000197C00000082000204DC0100A0980040E3 +:10BBF000479901003005004189300100808FA24142 +:10BC0000197C0000C994004081320100F087004097 +:10BC100081B20000A595001594300100AC95004B51 +:10BC200002B00000F087004081B200003C96004066 +:10BC3000813201000000004B199001000F97003A7B +:10BC400081300100F087004081B200008A8F2242DB +:10BC5000197C00003C960040813201008B8F00402F +:10BC600081B200000596004081320100C38F22415D +:10BC7000197C0000C000001598C80100C38FA00BFC +:10BC8000996C0000040022441F7C0000FF070000A4 +:10BC90007E8901000400A6408132000030000010BF +:10BCA00080C801000080004044990100000000505D +:10BCB000F1B1010000000003F0B1010000000042FA +:10BCC00061B101000000004062B10100968FA80040 +:10BCD000E0310000238300881CB000000000000554 +:10BCE00048B10100C000001598C8010030002E0BBB +:10BCF00099D0010000006A5099C001000400200B97 +:10BD0000996C0000C000620180CC01000C8000032F +:10BD100042C901002D002DF022B001000000004CAE +:10BD200080C001000000005C23800100D4003F417E +:10BD3000E7E1010004002242197C00000B0000F240 +:10BD400098E401000000005A998001000400A2005C +:10BD5000986C0000200400408998010009990011A6 +:10BD60008A3001000B000011E4F501002F0020478C +:10BD7000E7B50100AE8F230B816C00000000004F7F +:10BD8000E59101000000000880B00100C100000141 +:10BD900080CE01000400A440813200000000000BAE +:10BDA00003B001000000001502D001005E97000002 +:10BDB0002A4001000000004361B101004000001072 +:10BDC00062DD0100B58FA840813200002383008826 +:10BDD0001CB00000C994000548310100C0000001FA +:10BDE00080CE0100C18F261100300000100000003D +:10BDF0002AC801000000000880B001000000000116 +:10BE000080C00100C00000409998010000000001BE +:10BE100098D001005E97004C02300100C000004045 +:10BE200003980100CB8F004081B2000030002F0842 +:10BE300080B00100C0000015F4C90100C00000017D +:10BE4000E4CD0100C100000180CE01000400A44047 +:10BE5000813200000400200BE56D0000C0000040AE +:10BE6000039801005E9700002A400100D08F224411 +:10BE70001F7C0000AC002F4013B001000000000147 +:10BE8000E0C10100B000004047990100D18F0001DE +:10BE9000E0D100009E9300408D300100806300A639 +:10BEA00016B001006697000716140100008000100C +:10BEB00042C90100D98F2240E36D00000000004319 +:10BEC00061B101004000001062DD0100D68FA84082 +:10BED00081320000238300881CB000000097005EC0 +:10BEE00005100100DC8F2209803000008697004099 +:10BEF00081320100C98B000548B100000400A24A4C +:10BF00001F7C0000DF8F004A1F9000000400A24F3A +:10BF10002B7C00000400A25C1F7C00000400A244F3 +:10BF20001F7C00000000000010B0010024002D154F +:10BF300010C0010028002DF016B0010022002DF0E5 +:10BF400026B0010014002FF20CB001000000000127 +:10BF5000E0D101000000001032B001000000000B31 +:10BF60001BB0010004001F151A5000000000004023 +:10BF700023B00100000000012AB00100BE9600407D +:10BF800035B000002F002040E7B101002990A24504 +:10BF90001F7C00000400A205486D00002400200B57 +:10BFA000E0B1010028002013E0B1010022002006CA +:10BFB000E4B10100FD8F225C1F7C00000000005CEA +:10BFC0001F8001003080001042C90100FD8F224017 +:10BFD000E36D00000000004761B101004000001067 +:10BFE00062DD0100F98FA8408132000023830088C0 +:10BFF0001CB000000000000548B101001400004022 +:10C00000439901000400A2F0146C000000800019A4 +:10C0100042C9010022902240E36D000010902242AC +:10C02000197C000073960040813201005A94004050 +:10C03000813201001D90224B80320000000000433D +:10C0400061B101004000001062DD01000690A840CF +:10C0500081320000238300881CB000000C90224134 +:10C06000197C0000E7940040113001000D9000059C +:10C0700048B10000C9940040813201000F902209AC +:10C080008030000086970040813201002F830040FD +:10C0900005B0000073960040813201004F940040CB +:10C0A000813201000000004361B101004000001036 +:10C0B00062DD01001390A8408132000023830088D4 +:10C0C0001CB0000019902241197C0000E794004048 +:10C0D000113001001A90000548B10000C9940040D9 +:10C0E000813201001C9022098030000086970040B8 +:10C0F000813201002F83004005B0000000000043A2 +:10C1000061B101004000001062DD01001E90A840F6 +:10C1100081320000238300881CB00000000000056D +:10C1200048B1010025902241197C0000E7940040AD +:10C13000113001002690000548B10000C99400406C +:10C14000813201002890220980300000869700404B +:10C1500013300100D08B004005B0000014000040F7 +:10C16000439901000400A2F0146C00000080001943 +:10C1700042C9010032902240E36D000000000043FC +:10C1800061B101004000001062DD01002E90A84066 +:10C1900081320000238300881CB0000000000005ED +:10C1A00048B101000000004005B001003690224176 +:10C1B000197C0000E7940040113001003790000521 +:10C1C00048B10000C99400408132010008002D0AE6 +:10C1D00084B00100000000F082B00100040026409D +:10C1E0008132000014002040E1B101003D90031EA7 +:10C1F000803200003E90004187B0000021000040E6 +:10C20000879801002C960040813201000400A25C56 +:10C210001F7C00000000005C1F9001004390220979 +:10C220008030000086970040133001004690224481 +:10C23000197C00008697004F813001000000004407 +:10C2400019800100C98BA24A1F7C0000D08B0040DE +:10C2500081B200000400A205486D0000BA00204031 +:10C26000E5B101004E909C17803200000400224A84 +:10C27000197C0000CC000040439901003698004032 +:10C2800081320100D497004013300100C00000400B +:10C2900043990100C4002DF082B001000B9800F01A +:10C2A00084300100C994004081320100D08B220902 +:10C2B000803000008697004013300100D08B004092 +:10C2C00081B200002E000040439901005A902240A4 +:10C2D000E76D000032000040439901006590A240E4 +:10C2E000E56D0000F2950040813201002400200B32 +:10C2F000E0B1010028002013E0B101002200200677 +:10C30000E4B1010004002242197C00001400004046 +:10C31000439901000400A2F0803200001400200ABA +:10C32000E0B10100D08B22098030000086970040E8 +:10C3300013300100D08B004081B20000F295004024 +:10C34000813201009D9500408132010073902241AD +:10C35000197C00000000000B99B0010004001F15BB +:10C360009850000073902001986C0000700000034A +:10C3700048C9010000002E461F9001000000005037 +:10C38000F1B1010000000003F0B101000000004223 +:10C3900061B10100A00000A462DD01007090A8005E +:10C3A000E03100000000000548B10100AC002F00A2 +:10C3B00010B0010000000001E0C1010014002F15C1 +:10C3C00010C001000400A2F0803200000000000A4A +:10C3D00080B001000000600180D001000000004733 +:10C3E00019900100E98F2209803200008697000928 +:10C3F00080300100E98F004013B00000008000038E +:10C4000042C90100000000F082B0010013000040AA +:10C41000879801000000004C43C101002C9600F0F9 +:10C42000843001000400A25C1F7C0000C98B005C0A +:10C430001F9000002C002040E7B101002D0020409B +:10C44000E7B101002E000040439901000400A2F36F +:10C450008032000004002242197C0000C98B004297 +:10C46000198000001C960040813201005B97004853 +:10C47000953001000000004561B10100400000104E +:10C4800062DD01008D90A8401330000023830088F6 +:10C490001CB000009390000548B10000929000404D +:10C4A00013B000000000000012B0010008000040BE +:10C4B0004399010014002DF082B0010004002640D1 +:10C4C00081320000040022F084300000130000409C +:10C4D000879801002C960040813201000400A25C84 +:10C4E0001F7C00000000005C1F900100B09000095C +:10C4F00000B000000400A205486D0000C98B87420F +:10C50000191000008B002F4719800100C98B0040D3 +:10C51000E79100000400A2401F7C00002F000040B3 +:10C5200047990100AE902247E77D000004002241B8 +:10C53000197C00001D940040E7310100AE902200FC +:10C5400080320000A990A2401F7C0000C9940040E6 +:10C5500081320100AE90004081B200003000004006 +:10C560004399010032002DF294B00100A59500F22C +:10C5700002300100AC95004B02B000000000000545 +:10C5800048B10100AF90004001B000000000004041 +:10C5900005B00100B590220080320000B490A242A4 +:10C5A000197C00000596004081320100B5900040E2 +:10C5B00081B200003C960040813201005491225C1F +:10C5C0001F7C00000000005C1F8001000080001044 +:10C5D00042C90100BD902240E36D0000000000450B +:10C5E00061B101004000001062DD0100BA90A84076 +:10C5F00081320000238300881CB0000054910005A4 +:10C6000048B10000B494004081320100C490A208F7 +:10C6100080320000C490A216803200000F97004DB7 +:10C62000813001000082000204DC0100F08700403C +:10C6300081B200007400004043990100000000F83E +:10C6400082B00100000000F084B001000000004151 +:10C6500096B00100D5902242961400000080001090 +:10C6600044C9010064006840979801006400004BD1 +:10C6700080CE01000400A64081320000000000418D +:10C68000F0B1010000000042F0B1010070000005AF +:10C69000E0C901000000004561B101002000001068 +:10C6A00062DD0100D190A840813200000400A25C4C +:10C6B0001F7C00000000005C1F900100000000458E +:10C6C00061B101004000001062DD0100D690A85C5D +:10C6D0001F000000238300881CB000005E012D05B0 +:10C6E00048B10100DA9065F21230000000993F4233 +:10C6F00013F00100DF902247E77D00002783758853 +:10C700001CB00000D990004081B20000000000473A +:10C71000E79101000400750996E401000080001013 +:10C7200044C9010000000044F1B10100000068A804 +:10C7300097C0010000000003E0B101000080000389 +:10C74000449901000000004461B1010000000010A4 +:10C7500062B10100E790A840E13100002383008826 +:10C760001CB0000000993F4213F00100EB906505FA +:10C77000483100003F0000F39688010000000040AF +:10C78000E7B101000000754081B20100F390224B37 +:10C79000803200000000005561B101000000004B34 +:10C7A00062B10100F190A840813200000000000752 +:10C7B00016B001000062000B16DC01002F000040E3 +:10C7C000439901000400A247E77D00001D9400404A +:10C7D0008132010010912200803200004E96005FED +:10C7E00001100100F7902240956C000004002241E6 +:10C7F000197C0000040022401F7C00000080001013 +:10C8000044C9010000000050F1B101000000000324 +:10C81000F0B101000000004261B101000000001011 +:10C8200062B101000191A800E0310000238300887B +:10C830001CB000000000000548B1010004800003A6 +:10C8400042C90100000000F202B0010004002031E2 +:10C85000036C0000A595005295300100C99400407A +:10C8600081320100F7902241975000000C800003B4 +:10C8700042C90100000000F000B001000000005CAF +:10C8800001800100AC95004B02B00000F79000055C +:10C8900048B1000066970040033001001780000394 +:10C8A00044C9010000F0000C968801000000634CB0 +:10C8B00097F001000400204D976C00000400224016 +:10C8C000976C00001080000344C90100000000AB19 +:10C8D000E1B101000097005E0510010003000007B0 +:10C8E0001AF40100070000071688010000B5000DCA +:10C8F00046C901001C913040813200000400220B27 +:10C90000E67D00000000000BE681010000B7000D8D +:10C9100046C901000400220BE67D00000000000B68 +:10C92000E68101001000100F94F401009304005FF1 +:10C930009504010076950040813201002A91225031 +:10C94000FD7F000026914640813200002991A240DF +:10C95000316F000004001E4081B2000000001E4143 +:10C9600031D3010000002E0548B101000000004055 +:10C97000E1B10100000000400FB00100AB940041A4 +:10C9800081300100F087004081B20000B494004083 +:10C99000813201003D91A208803200003D91A21633 +:10C9A000803200000082000204DC0100000000452B +:10C9B00003F001000000000100C001003591375C68 +:10C9C000613100000000001B62B101003A91284073 +:10C9D000813200000400A25C777D000036910040A7 +:10C9E00081B200000000000062B101003A91A8404D +:10C9F00081320000F087174081B2000074002240AD +:10CA0000F1B1010000000040E1B101005B97004A74 +:10CA1000953001000400A25C1F7C00001C96005CA5 +:10CA20001F100100C490004081B200000400A24029 +:10CA30001F7C00002F0000404799010051912247C0 +:10CA4000E77D000004002241197C00001D94004095 +:10CA5000E731010051912200803200004C91A24048 +:10CA60001F7C0000C99400408132010051910040B8 +:10CA700081B20000300000404399010032002DF2E5 +:10CA800094B00100A59500F202300100AC95004B76 +:10CA900002B000000000000548B101005B970048AB +:10CAA000953001000400A25C1F7C00001C96005C15 +:10CAB0001F1001000400A205486D00005891874234 +:10CAC000191000008B002F47198001000000004062 +:10CAD000E79101008697004281300100C98B004038 +:10CAE00081B200001C960040813201000400A25C6B +:10CAF0001F7C0000C98B005C1F900000B00000404C +:10CB0000439901000400A2F080320000BA002040E6 +:10CB1000E5B10100D497004081320100C00000401F +:10CB200043990100C4002DF082B001000B9800F081 +:10CB300084300100C994004081320100869700458D +:10CB400081300100C98B2242197C00000F97003A06 +:10CB500081300100C98B004081B200000400004018 +:10CB600081B20000B4940040813201007091A208AB +:10CB7000803200007091A216803200000F970047AB +:10CB8000803001000082000204DC0100F0870040D8 +:10CB900081B200001080000344C9010000E100A63A +:10CBA00084B0010000000040F1B10100000000402D +:10CBB000F1B1010000006007849401000097005E5D +:10CBC00005100100C98B004081B200008A000040BE +:10CBD00047990100C9940041E7410100D08B004012 +:10CBE00081B200000400A205486D00000400A241CB +:10CBF000197C00000400A2481F7C0000F295004050 +:10CC0000813201000400A30A0C6C00009D950040D5 +:10CC100081320100000000012CB00100000000156D +:10CC200010B001000000000010C0010004001F0A45 +:10CC30002C50000014000040439901000400A2F0B1 +:10CC4000803200000000001032B00100A197000601 +:10CC5000043001008E91A2481F7C00008C91844812 +:10CC60001F100000AC000040479901008E91000A9F +:10CC7000E0C100000000000A02B001009E93000124 +:10CC80008C3001000000004361B101004000001041 +:10CC900062DD01008F91A84081320000238300886B +:10CCA0001CB000000000000548B1010000000002B7 +:10CCB00010C001009C91220214500000799600459A +:10CCC0001F0001008691225C1F7C000000000047CD +:10CCD00061B101004000001062DD01009891A85C84 +:10CCE0001F000000238300881CB00000869100050F +:10CCF00048B100000000000B1BB0010008002D40EF +:10CD000085B00100000000F082B00100000000408A +:10CD100005B001002C96004187300100000000455D +:10CD200061B101004000001062DD0100A291A84045 +:10CD300081320000238300881CB000000000000541 +:10CD400048B10100A8912209803000008697004078 +:10CD500013300100AC912244197C00008697004FEB +:10CD600081300100AC91A2471F7C0000000000440C +:10CD700019800100FF070008008C01000400264014 +:10CD800081320000BB91224A1F7C0000B391A216A1 +:10CD900002300000C9940040813201002F00204081 +:10CDA000E7B10100C98B004081B200002D002D08C1 +:10CDB0002AB00100B7912242197C00003C96004045 +:10CDC00081320100B891004081B200000596004018 +:10CDD0008132010030002E002AD0010032002A15D5 +:10CDE000E4B10100C98B0016E4B10000D191221614 +:10CDF000023000000400A2471F7C00000000000871 +:10CE00002AB001002B98004095300100C191A2404A +:10CE1000116C0000D29122402D6C00000400A2058C +:10CE2000486D0000040022441F7C0000AC0000405C +:10CE300047990100B0002B01E0C10100002B00A6C2 +:10CE400016B0010000000001E0D101005E9700086B +:10CE500080300100CA91005E179000007F97004368 +:10CE6000613101000000004361B101004000001089 +:10CE700062DD0100CB91A84081320000238300884D +:10CE80001CB000000000000548B1010066970007D3 +:10CE9000161401000097005E05100100C9940040BF +:10CEA000813201002F002040E7B10100D08B00400B +:10CEB00081B200000000000B1BB0010004001F1530 +:10CEC0001A500000E09120161A6C00000400224065 +:10CED0001F7C00007000000348C9010000002250C0 +:10CEE000F1B1010000000003F0B1010000000000FA +:10CEF000E0B101000000004261B10100A00000A407 +:10CF000062DD0100DD91A8461F1000000000000551 +:10CF100048B101000000000010B001000000001541 +:10CF200010C001000000000A2AB001000000000A41 +:10CF30002CD0010004001F168032000014000040B5 +:10CF4000439901000400A2F080320000AC002F40A1 +:10CF500023B00100EA9184451F100000EB91000A04 +:10CF6000E0C100000000000A02B00100BE960040CF +:10CF700035B000000400A25C1F7C00000080001996 +:10CF800042C90100F4912240E36D0000000000431B +:10CF900061B101004000001062DD0100F091A84085 +:10CFA00081320000238300881CB0000000000005CF +:10CFB00048B101000592A2021A5000000A922240D4 +:10CFC0002D6C0000040022401F7C00000080001037 +:10CFD00044C9010000000050F1B10100000000034D +:10CFE000F0B10100FF070008E08D010000000042E1 +:10CFF00061B101000000001062B10100FC91A84085 +:10D0000081320000238300881CB00000000000056E +:10D0100048B101002F002047E7B501000C80000354 +:10D0200042C90100100000F010C80100F0070040E4 +:10D030001B9801000A92005C118000000400A25FAE +:10D040001B7C0000FF070008988801000000000218 +:10D0500098C001000400200B996C00000000000241 +:10D0600010C0010004002240236C00000400A34310 +:10D07000236C0000E79400401F0001000000000541 +:10D0800048B101001092230D2C6C000000000040FC +:10D090001F900100199222461F7C000000000046EC +:10D0A0001F8001007080000342C9010019922240D4 +:10D0B000E36D00000000004261B10100400000107B +:10D0C00062DD01001592A8408132000023830088B0 +:10D0D0001CB000000000000548B1010008002D4010 +:10D0E00085B00100000000F082B0010000000040A7 +:10D0F00005B001002C96004187300100000000457A +:10D1000061B101004000001062DD01001E92A840E4 +:10D1100081320000238300881CB00000000000055D +:10D1200048B1010024922209803000008697004017 +:10D130001330010028922244197C00008697004F8A +:10D14000813001002892A2471F7C000000000044AB +:10D1500019800100FF070008008C01000400264030 +:10D16000813200003E92224A1F7C00002F92A216BC +:10D1700002300000C9940040813201002F0020409D +:10D18000E7B10100C98B004081B200002D002D08DD +:10D190002AB001003A922242197C00003392A2F395 +:10D1A00084300000000000A585B0010000000041AF +:10D1B00085D00100D4003E4185E001003792224035 +:10D1C0001F7C00000000005A119001000B000008B5 +:10D1D000E4F501003C960040813201003B920040A2 +:10D1E00081B20000059600408132010030002E001F +:10D1F0002AD0010032002A15E4B10100C98B0016C3 +:10D20000E4B100004192A21602300000C99400402F +:10D21000813201009A92004081B200002D002D0859 +:10D220002AB00100549222471F7C00000400A09104 +:10D23000036C00004E922242197C00004792A2F338 +:10D2400084300000000000A585B00100000000410E +:10D2500085D00100D4003E4185E001004B92224080 +:10D260001F7C00000000005A119001000B00000814 +:10D27000E4F50100200400408998010009990008A4 +:10D280008A30010058012D002AD0010060012DF0E4 +:10D2900010B00100000000F02CB0010000000016EA +:10D2A00080B2010004002740116C0000878F00400D +:10D2B00081B200000400A391036C00002B98004190 +:10D2C000953001005D92A208803200005D92A216A6 +:10D2D000803200000000004197B001005B92230DF6 +:10D2E000026C00000000004197C00100AC95004BAB +:10D2F00002B000009A92000548B100000400A205A7 +:10D30000486D0000040022441F7C0000AC002F0187 +:10D3100014B00100B0002B01E0C10100002B00A6F9 +:10D3200016B0010004002241197C00000000000139 +:10D33000E0D101007092230D026C0000008000100B +:10D3400044C9010000000050F1B1010000000003D9 +:10D35000F0B101000000004261B1010000000010C6 +:10D3600062B101006992A800E031000023830088C7 +:10D370001CB000000000000548B101000C80000353 +:10D3800042C90100100000F022C801000000005C4A +:10D39000238001000000000184B001007392230D7E +:10D3A000026C00000000000D02B001000000000847 +:10D3B00080B00100789222401B6C00005E97000153 +:10D3C0008450010081922240856C00000000000121 +:10D3D00080C001001080001046C901000000004F0D +:10D3E0004381010000000042F0B101002000004034 +:10D3F000F0C9010000000016F0B101000000004378 +:10D4000061B10100A00000A162DD01007E92A811BF +:10D41000E031000004002240236C00009092005E86 +:10D42000179000008492230D026C00000000000D94 +:10D4300002B001000000000184D001008992224066 +:10D440001B6C00007F9700436131010090922240E5 +:10D45000856C00000000000112C001001080001067 +:10D4600046C901000000004F438101000000004256 +:10D47000F0B1010000000009F0B101000000001847 +:10D48000F0B10100A00000A162DD01008E92A811A0 +:10D49000E03100000000004361B1010040000010D5 +:10D4A00062DD01009192A80A023000002383008807 +:10D4B0001CB00000C9940005483101009892230D6A +:10D4C000026C0000FF070011008C0100C9940040AD +:10D4D0008132010066970007161401000097005E74 +:10D4E000051001002F002040E7B10100D08B004063 +:10D4F00081B200000080000342C90100000000F872 +:10D5000082B001000400264081320000000000F8D3 +:10D510008CB00100000000F08EB00100EC950040DE +:10D520001330010004000C4780320000000000406E +:10D5300085B001002C960041873001009D95004088 +:10D540008132010004002091036C00000080001073 +:10D5500042C90100AE922240E36D00000000004588 +:10D5600061B101004000001062DD0100AA92A840F4 +:10D5700081320000238300881CB0000000000005F9 +:10D5800048B10100B0922209803000008697004027 +:10D59000133001000000000B1BB00100000000155B +:10D5A0001AD00100B792A241197C00002B980040CC +:10D5B000953001000000001680B20100C0922708DB +:10D5C00080320000C19100002AC000002B98004169 +:10D5D000953001000000001680B20100BB922708C0 +:10D5E000803200005D9200002AC00000000000416F +:10D5F00097B00100BE92230D026C000000000041B4 +:10D6000097C00100AC95004B02B00000000000057F +:10D6100048B10100C98B2242197C00000F97003AE3 +:10D6200081300100C98B004081B200000400A24A91 +:10D630001F7C0000C592004A1F9000000400A24118 +:10D64000197C00000400A24F2B7C00000400A244BF +:10D650001F7C00000400A2451F7C0000FF94000016 +:10D66000103001000000001510C001000000001083 +:10D6700032B00100A197000604300100D292A2440A +:10D680001F7C00000000000B1BB001000000000A1E +:10D690002CD001000000000A02B001009E9300019E +:10D6A0008C3001000080001942C90100D99222404B +:10D6B000E36D00000000004361B101004000001074 +:10D6C00062DD0100D592A8408132000023830088EA +:10D6D0001CB000000000000548B10100000000027D +:10D6E00010C00100E2922202145000007996004519 +:10D6F0001F000100CB92225C1F7C0000000000474D +:10D7000061B101004000001062DD0100DE92A85C02 +:10D710001F000000238300881CB00000CB9200058E +:10D7200048B1000008002D4085B00100000000F065 +:10D7300082B001000000004005B001002C960041BD +:10D74000873001000000004561B101004000001079 +:10D7500062DD0100E792A840813200002383008847 +:10D760001CB000000000000548B10100ED92220944 +:10D77000803000008697004013300100F092224470 +:10D78000197C00008697004F8130010000000044A2 +:10D7900019800100FF070008008C010004002640EA +:10D7A00081320000FF92224A1F7C0000F792A216ED +:10D7B00002300000C9940040813201002F00204057 +:10D7C000E7B10100C98B004081B200002D002D0897 +:10D7D0002AB00100FB922242197C00003C960040D6 +:10D7E00081320100FC92004081B2000005960040A9 +:10D7F0008132010030002E002AD0010032002A15AB +:10D80000E4B10100C98B0016E4B10000BC91A2167E +:10D8100002300000C9940040813201002F002040F6 +:10D82000E7B10100D08B004081B20000040022412A +:10D83000197C00000400A24F2B7C00000400A244CD +:10D840001F7C00000400A2451F7C00000400A24AC7 +:10D850001F7C0000FF94004A1F100100D4910010AB +:10D8600032B000008A002040E7B101000E93A241CF +:10D87000197C0000C99400408132010011930040DE +:10D8800081B20000A595001594300100AC95004BC5 +:10D8900002B000000000000548B1010013932242CD +:10D8A000197C00000F97003A8130010086970045EF +:10D8B00081300100C98B004081B2000065900045B5 +:10D8C0001F90000004002241197C00000400A247C0 +:10D8D0001F7C0000F2950040813201000400A30A81 +:10D8E0000C6C00009D95004081320100D491000134 +:10D8F0002CB0000004002241197C00000400A24862 +:10D900001F7C0000B4940040813201002C93A208D7 +:10D91000803200002C93A2168032000000820002A8 +:10D9200004DC01000000004503F0010000000001DC +:10D9300000C001002493375C613100000000001B2F +:10D9400062B1010029932840813200000400A25CEA +:10D95000777D00002593004081B2000000000000A8 +:10D9600062B101002993A84081320000F08717407E +:10D9700081B2000058012008E0B1010060012016CA +:10D98000E0B10100F29500471F1001000400A30A56 +:10D990000C6C00009D95004081320100D491000183 +:10D9A0002CB0000004002241197C00000400A247B2 +:10D9B0001F7C0000B49400471F1001004393A2088D +:10D9C000803200004393A216803200003F93A242AF +:10D9D000197C00000082000204DC0100A0980040D5 +:10D9E00047990100300500418930010004002241BF +:10D9F000197C0000A595001594300100AC95004BF2 +:10DA000002B00000F087004081B200003C96004068 +:10DA1000813201000000004B199001000F97003A7D +:10DA200081300100F087004081B2000058012008D9 +:10DA3000E0B1010060012016E0B101000400A24F36 +:10DA40002B7C00000400A2441F7C00000400A245BF +:10DA50001F7C0000FF94001032300100D491004080 +:10DA600013B00000B4940040813201005893A20822 +:10DA7000803200005893A21680320000008200021B +:10DA800004DC01000000004503F00100000000017B +:10DA900000C001005093375C613100000000001BA2 +:10DAA00062B1010055932840813200000400A25C5D +:10DAB000777D00005193004081B20000000000001B +:10DAC00062B101005593A84081320000F0871740F1 +:10DAD00081B200000080000342C90100000000F88C +:10DAE00082B001000400264081320000000000F8EE +:10DAF0008CB00100000000F08EB00100EC950040F9 +:10DB00001330010004000C47803200000000004088 +:10DB100085B001002C960041873001009D950040A2 +:10DB2000813201000400A091036C0000008000100D +:10DB300042C901006A932240E36D000000000045E5 +:10DB400061B101004000001062DD01006693A84051 +:10DB500081320000238300881CB000000000000513 +:10DB600048B10100878F220980300000869700406D +:10DB700013300100878F004081B200000400831E33 +:10DB8000803200000400A24F2B7C00000400A2455C +:10DB90001F7C000014002D451F9001000400A2F01E +:10DBA000146C00000400A001146C0000DF8F00441E +:10DBB000199000000400A24A1F7C00007893A24143 +:10DBC000197C00000000004A1F9001007A9100407B +:10DBD00081B200000400A2481F7C0000F295004AB8 +:10DBE0001F1001000400A30A0C6C00009D9500406A +:10DBF00081320100D49100012CB0000004002241C8 +:10DC0000197C00000400A24F2B7C00000400A244F9 +:10DC10001F7C00000400A2451F7C0000FF94004010 +:10DC200081320100D491001032B000008B0000401E +:10DC3000439901000400A246E77D0000659000457D +:10DC40001F9000000000004137C3010000000041A8 +:10DC500033C301003600000102CC01000000D240B5 +:10DC600081B200008C9385178032000000009F482D +:10DC700003D000008E939C178032000000009F4C60 +:10DC800003D000000000800134C301004080000385 +:10DC900044C901000000004AF0B101000400264020 +:10DCA0008132000000000040F1B1010000000012CC +:10DCB000F0B10100D1940041E13101000080004346 +:10DCC00044C9010010000040F19901000000004823 +:10DCD000F0B1010000000049F0B101004000000374 +:10DCE000E0C901000000004561B1010000000043EF +:10DCF00062B101000000A84081B200009B93004087 +:10DD000081B200002D04004089980100099900A506 +:10DD10008A300100BA002040E5B10100B0002F01B7 +:10DD20008CD0010004001FF080320000000000468B +:10DD3000E0C10100AC002F4013B00100CC002D0168 +:10DD4000E0C10100A9939C17803200000400224A20 +:10DD5000197C00003698004081320100AB932247C5 +:10DD6000197C00000000005F13900100D497004769 +:10DD700019100100C0002D441F900100C4002DF0B7 +:10DD800082B001000B9800F084B0000090002D05D7 +:10DD900048B10100C093A24B1F7C00001594A24C17 +:10DDA0001F7C0000C0931F1CE06D0000C393A20104 +:10DDB00080320000A8002D468FB00100B9931F1CCF +:10DDC000E06D0000B400004043990100BB9322F0D5 +:10DDD0003A6C000012941FF03A6C00000000A24060 +:10DDE00080B200000000804F8FB001008A00004028 +:10DDF0004399010013942042E76D0000BF93224035 +:10DE000080320000000080598FB00100000080586F +:10DE10008FB00100C2932240803200000000805C7D +:10DE20008FB001000000805B8FB00100AC000040AB +:10DE300043990100B0002DF084B00100C793A242C5 +:10DE4000246C0000D29323F0026C0000B00000A10B +:10DE500080CE01000400A64081320000CF93A2F0E2 +:10DE6000803200001494A242246C00001494A24159 +:10DE7000036C0000CE93A24080320000000080516D +:10DE80008FB00100000080528FB0010014941F1267 +:10DE9000845000001494A001846C0000C0930040E2 +:10DEA00081B200008B00004043990100FD93A2461F +:10DEB000E77D00001400004043990100EF9322F039 +:10DEC00014300000DB93200A026C0000EC93031E68 +:10DED00080320000DA93A2408032000000008044CB +:10DEE0008FB00100000080498FB00100E093220A4A +:10DEF000026C0000E393A241197C0000DF93A24072 +:10DF000080320000000080558FB001000000805674 +:10DF10008FB00100E293A2408032000000008043F5 +:10DF20008FB00100000080488FB0010000000001A8 +:10DF300082B001000000000A82D00100E993209124 +:10DF4000836C0000E893A2408032000026008040ED +:10DF50008F980100270080408F980100EB93A2402A +:10DF6000803200001F0080408F9801002000804018 +:10DF70008F980100EE93A240803200002200804082 +:10DF80008F980100230080408F98010088002D4465 +:10DF90008FB00100F893A241197C0000F593A243D1 +:10DFA0003D7C0000F593A2F2026C00000000A2404C +:10DFB00080B20000000080498FB00100F793A240BA +:10DFC00080320000000080438FB0010000008048D4 +:10DFD0008FB00100F593A091036C0000F3932243EE +:10DFE0003D7C0000FC93A24080320000280080406D +:10DFF0008F980100290080408F9801001400004094 +:10E00000439901000694A2F01430000088002D44CA +:10E010008FB001000394A2F2026C00000000A24045 +:10E0200080B20000000080498FB00100F5932241CA +:10E03000197C0000F3932091036C0000F5930040DD +:10E0400081B200000A94200A026C00000994A240E8 +:10E0500080320000000080448FB001000000804941 +:10E060008FB001000F94220A026C0000E393A241DA +:10E07000197C00000E94A240803200000000805500 +:10E080008FB00100000080568FB001001194A240B3 +:10E0900080320000000080438FB001000000804803 +:10E0A0008FB001001794004395B000001794004111 +:10E0B00095B000001794004295B0000017940044FA +:10E0C00095B000001794004C95B00000300400405B +:10E0D000899801000999004A8A3001005B97004045 +:10E0E000813201001C94A240803200000000804B6D +:10E0F0008FB001000000804C8FB001000400A20529 +:10E10000486D00002D000040439901002E002FF3C0 +:10E1100084B001002294A2F39630000000008040F9 +:10E1200001B001002D002A41E7D10100D4003D419A +:10E1300085E001000B0000F200E401002894225A5F +:10E14000017C0000000000401F9001002994005A4B +:10E1500001800000000000401F80010000006341BA +:10E1600085C001002C94A0A5856C000000006340D0 +:10E1700085B001001204004089980100099900004F +:10E180008A3001000000804081B201000000A0A59B +:10E19000856C01000000E34085B001000C800003A5 +:10E1A00042C9010012000040879801007F9800F0EA +:10E1B0008CB000000400225F1F7C000041942240CC +:10E1C0000F6C000000002F0548B101000400225A26 +:10E1D0001F7C0000100000F098F401000400A2076A +:10E1E000986C00001000000C98F401000400A207D5 +:10E1F000986C00003E94A24B197C00003F9422F0E2 +:10E20000186C00000000604B199001004395000756 +:10E21000103001002F83004005B000004394225AC3 +:10E220001F7C0000AB940040813001002F83004030 +:10E2300005B000000400225F1F7C000000002F05D5 +:10E2400048B101000000604B199001000400225AFF +:10E250001F7C0000040022400F6C0000100000F042 +:10E2600096F401000400A207966C00001000000C58 +:10E2700096F401000400A207966C00004395000785 +:10E28000103001002F83004005B000000400225F21 +:10E290001F7C000000002F0548B101000000604B0A +:10E2A000199001000400225A1F7C00000400224043 +:10E2B0000F6C0000100000F096F401000400A207AB +:10E2C000966C00001000000C96F401000400A207F8 +:10E2D000966C00004395000710300100000080405C +:10E2E00005B001005A943340813200005D94A1AD25 +:10E2F000952000006F94134081B200000000134A83 +:10E300005A8301003000394595E001000400A25F06 +:10E310005F7C00000400A25E5F7C00001F00000F15 +:10E320005ED801000000005A5F9001000000005E0E +:10E330005F9001000000004045B0010000000004B3 +:10E3400048B00100000000054AB001000000000CC8 +:10E3500058B00100000000074EB001001C850040CD +:10E360005D9801000400A2445F7C0000000000589A +:10E3700061B101000000004A62B101000000A84143 +:10E3800097B000006C94004081B200000000804013 +:10E3900097B001000400A240056C00001C990040E9 +:10E3A000813201007294600796300000FFFF004B3D +:10E3B00084890100000070C224B001007F94A2454E +:10E3C000257C000076943120853000008094221254 +:10E3D000487F000058041112480301001000001289 +:10E3E00096E401000000004B1E9401001704004059 +:10E3F00089980100000000128AB001000999005FAD +:10E400008B1001000000805A1F9001007F94314062 +:10E4100081320000000000B424B001008094221278 +:10E42000487F00005804004081320100170400407A +:10E4300089980100099900128A30010000002F0517 +:10E4400048B101008F940BF08430000000001112DD +:10E45000488301008C942250857000005E010040CA +:10E4600043990100B49600F2963001009304001223 +:10E47000943001000000005A1F90010010000012AB +:10E4800096E401000000804B1E9401001000004241 +:10E4900010F40100040022088032000000B73F435E +:10E4A00011F00100070000088A880100939430A150 +:10E4B0000C30000096942245E67D000080941040C8 +:10E4C00081B2000000002A45E69101000000101210 +:10E4D000488301000400A205486D000000001140BF +:10E4E00081B201000000604B858001005E010040A8 +:10E4F00043990100B49600F29630010000800010AC +:10E5000044C90100D8000040819801002E002D056B +:10E5100048B10100A2942240E76D00008000004055 +:10E5200080C8010000000040F0B1010009000008AF +:10E5300086E40100000068A787C0010000000044D5 +:10E5400061B101000000001062B10100A694A805AD +:10E55000E03100001000001296E401000014004BAE +:10E5600096DC01000000804B1E9401000400225A3A +:10E570001F7C00001000000F84F401001F00004207 +:10E5800084880100B094224080320000B19400429F +:10E5900068B10000000000426AB10100B194315A34 +:10E5A0001F0000000400A242487F000000009142CA +:10E5B00048930100B4943540813200006D00004062 +:10E5C00061990100BA9428B12C300000B594224D15 +:10E5D000757D0000000000402DB001000000954056 +:10E5E00011B001006D00004061990100BA94A8B11A +:10E5F000103000000000001680B20100040027085F +:10E60000803200000000954081B201007F00004090 +:10E6100061990100C59428B110300000BF949FBAE1 +:10E6200080320000150000408998010009990040DF +:10E63000813201000000804011B001000400225C22 +:10E64000117C00000400A25A117C00000400220882 +:10E650004806000000008024118401000400A25C30 +:10E66000017C00000400A25A017C0000040022008A +:10E670004806000004001FBB803200000000005F5D +:10E6800061B101000010000062DD01000000A8403F +:10E6900081B20000CE94004081B20000AC940040F2 +:10E6A00047990100D294324081320000DA9422F876 +:10E6B00096300000000000F890B00100000000F06B +:10E6C00092B001000000004880B201000400274918 +:10E6D000803200000100004BF0CD01002000924884 +:10E6E000E0C901006C00004061990100DE9428B18E +:10E6F00092300000DA94224C757D00000400124034 +:10E7000091B000006C00004061990100DE94A8B156 +:10E71000903000000000004980B20100040027484A +:10E7200080320000FF000048968801000000004B86 +:10E7300090D001000100004BF0CD01002000004806 +:10E74000F0C9010000009249E0B101000C002D1059 +:10E7500048B10100FF070008828C01000400A25CA0 +:10E76000837C0000FF0700F0008C01000400A25C25 +:10E77000017C000004002240016C00000000A24166 +:10E7800000EC0000F094221A006C0000C994000014 +:10E79000343001000000005049C10100EA94A24158 +:10E7A000235000000000804081B201000C002D10B9 +:10E7B00048B10100FF070015828C01000400A25C33 +:10E7C000837C0000FF0700F0008C01000400A25CC5 +:10E7D000017C000004002240016C00000000A24106 +:10E7E00000EC0000FC94220D006C0000C9940000B5 +:10E7F0001A3001000000005049C10100F694A24106 +:10E80000235000000000804081B201000195831E6A +:10E8100080320000000000441990010024002D0106 +:10E820002CB0010028002DF016B0010022002DF0C0 +:10E8300026B0010014002FF20CB001000400A2F079 +:10E84000146C000004002001146C000000008040E3 +:10E85000E1B10100300000409798010060972E4020 +:10E8600081B2010000000040F1B101000A95A2410F +:10E870009750000064973E439DE0010000008040F7 +:10E88000E1B1010064973E439DE001000000800B70 +:10E89000E8B1010064973F439DE00100000000F0F3 +:10E8A00016C0010000008040E1B1010064973F43C1 +:10E8B0009DE00100000000F416B00100000080405F +:10E8C000E1B1010060173D439DE00100100080A10F +:10E8D00016E401000400A207166C00001A040040B0 +:10E8E000899801001000000B8AE401000999000DCD +:10E8F0008A14010000B5000D42C901001D95304782 +:10E90000170400002095A20BE67D00000000904255 +:10E9100081B0010000B7000D46C901002495A20B8B +:10E92000E67D00000000000BE69101000000904130 +:10E9300081B001000000104081B201002595400720 +:10E94000963000009D040040813201002F95A245C1 +:10E95000957C000001973F4195E00100000000F325 +:10E9600096B001000000004EE6B1010040973E4025 +:10E9700097E001000000004EE6B1010040973E40E4 +:10E980009DE001004295003BE7B100002F9530402B +:10E99000813200003995A20BE67D000000B5000D24 +:10E9A00046C901003595A20BE67D0000000010402D +:10E9B00081B201000000984281B0010000B7000D53 +:10E9C00046C901000000000BE69101000000104064 +:10E9D00081B201000000984181B00100040021A231 +:10E9E000952000000000104A4483010000973E413A +:10E9F00095E001000000004EF6B101000000004E5D +:10EA0000E6B1010040973E409DE001000000003B60 +:10EA1000E7B101000000004A90B10100FFFF0007CC +:10EA2000928901000000984081B00100110400406B +:10EA300089980100099900088A3001000300000844 +:10EA400086F4010000B7004346C901000700000832 +:10EA50008288010004002208803200000400224164 +:10EA6000E67D00004A954008963000009D04004075 +:10EA70008132010058952245957C00005395225A19 +:10EA80001F7C00001000000F96F401004F95315FCD +:10EA9000970400000400A24B487F00000000114BC7 +:10EAA000489301000000004B6AB1010053953040CB +:10EAB0008132000004002241E67D00000000004198 +:10EAC000E68101000000104081B201000000984082 +:10EAD00081B2010000973F4195E00100000000F382 +:10EAE00096B0010040973D4097E00100000063F3BD +:10EAF00088B001006195A23B896C00000000004ACB +:10EB000090B10100010000A692B101000400A24AE8 +:10EB1000447F00006295184A4493000000001840AA +:10EB200081B201003F0400408998010016000012E4 +:10EB30008AE401000999004B8A140100300039452C +:10EB400097E001000400A25F5F7C00000400225EE9 +:10EB50005F7C00001F04002F7ED901000400A64046 +:10EB6000813200006E95225A1F7C00001F04000FA6 +:10EB700098D801000000004C5E94010070950005DB +:10EB80004AB000001F0400A75E840100000000409E +:10EB90004BB001000000005E5F9001000400A2087D +:10EBA0004E6C00000000005861B101000000004BF5 +:10EBB00062B101000000A84081B2000073950040DE +:10EBC00081B20000330400408998010009990007D0 +:10EBD0008A30010078954007963000009D0400407F +:10EBE000813201007C952245957C00000000984010 +:10EBF00081B201000400A24A447F00009B04004A45 +:10EC00004413010000973F4195E00100000000F32C +:10EC100096B0010040973D4097E00100000063F38B +:10EC200088B001003000384597E001000400A25F81 +:10EC30001F7C00000400225E1F7C0000040020AA4C +:10EC40000F6C00000000005F0F90010000000058F2 +:10EC500061B101000000004B62B101008895A8403D +:10EC6000813200007E95A23B896C0000300038455F +:10EC70009DE001000000984081B2010004002208DC +:10EC8000803200000300000894F4010000B7004A3D +:10EC900046C9010007000008968801000400224BC5 +:10ECA000E67D000093040012943001004395005A61 +:10ECB0001F0001000000805A1F9001001100004A4F +:10ECC000E6C901003000004A80CE01000400244063 +:10ECD0008132000034002F4F95840100000000F3C2 +:10ECE00096B001000100634B84C801000000A043FE +:10ECF000856C01000000E34085B0010030002D4428 +:10ED00001F90010032002DF22AB0010004002640BD +:10ED100081320000040022F2023000001D94001035 +:10ED20003230010004002200803200000400224240 +:10ED3000197C00003200A040E5B101000000004055 +:10ED400097B00100F0070040999801000000004AC8 +:10ED500002C001000000005003D00100000000418B +:10ED600097C001000000A34C02D00000A99500400C +:10ED700081B20000000000A836B00100BA9522411F +:10ED8000035000000080001044C901000000005042 +:10ED9000F1B1010070000003F0C901000000004261 +:10EDA00061B101000000001062B10100B295A8003D +:10EDB000E0310000238300881CB00000C9940040AB +:10EDC000813201007C80000342C90100040022401E +:10EDD000E16D0000000000F000B00100AD95005CA6 +:10EDE00001800000C9940040813201000000001B36 +:10EDF00010B1000068012D0682B00100000000F291 +:10EE000082C001000080000346C90100BF94004099 +:10EE100081320100E8952240116C00000000680872 +:10EE2000389601003A0400408998010009990008C9 +:10EE30008A300100F007004182CC0100BF95AA4151 +:10EE40003B400000000000F810B001000000005C32 +:10EE5000118001000400A3483B6C00000100001D6C +:10EE600004CC0100E695264623300000080000038C +:10EE700012C801000480000398C801000400A24CDD +:10EE8000426D00000400A205486D0000640120F0FE +:10EE9000E0B10100E595224105500000200000038B +:10EEA00048C901000C0000F886C801000000224497 +:10EEB000F1B1010000000043F0B1010000000009C1 +:10EEC000E0B101000000004461B10100A00000A415 +:10EED00062DD0100D795A8461F100000E49522418D +:10EEE00005500000E295A24123500000000000A15F +:10EEF0001AB001000000004461B1010040000010A0 +:10EF000062DD0100DD95A8462330000023830088E0 +:10EF10001CB000001000000348C901000000000DF3 +:10EF200042B101000000004413C00100D29500501E +:10EF300049C100000000000548B101000480000341 +:10EF40001AC801000400A205486D000000008040BE +:10EF500081B20100E69522403B6C0000000000F801 +:10EF600000B00100C994005C01000100E895004177 +:10EF70003BD0000000008D4780320100B0002F5FC1 +:10EF800013B00100000060F08CC001007C00004064 +:10EF9000439901000400A3F08C6C00000000804045 +:10EFA00081B201000080000342C90100000000F8A6 +:10EFB00094B00100000000F88CB00100F7958CF8C7 +:10EFC0008E3000000000004419900100040022F877 +:10EFD00014300000000000F816B00100000000F836 +:10EFE00026B0010008002EF80CB001000C002A4ADF +:10EFF000E0B1010028000000E0C901001000201B62 +:10F00000E0B101000496200A0C6C0000000000F83A +:10F0100094B00100000000F896B00100200020F03C +:10F02000E4B101001800204AE0B101001C00204BAF +:10F03000E0B10100EC95004013B000000400A2050F +:10F04000486D00002C002D42199001002E002FF376 +:10F0500082B00100000000F396B001000B96A2A55B +:10F06000976C00000000804195B001000E96A24010 +:10F07000976C00000000004083B001002D0020408C +:10F08000E7B101000000634197C00100D4003E4198 +:10F0900083E001000000004183C001001396A0A599 +:10F0A000836C00000000004083B001002C00204170 +:10F0B000E6B10100189622401F7C00000004000009 +:10F0C00098DC01000B00004CE4F5010019960040AB +:10F0D0001F8000000B000000E4F501001E0400404A +:10F0E00089980100099900008A30010000008040E1 +:10F0F00081B20100D1940040813201000080000300 +:10F1000042C9010004002240E16D000004800003B8 +:10F1100044C9010000000040F1B1010000000040BE +:10F12000F1B101000000604187B0010000800010D3 +:10F1300044C9010000000050F1B101000000004886 +:10F14000F0B1010000000049F0B10100000000032F +:10F15000E0B101000000004561B101002000001095 +:10F1600062DD01000000A85D0590000029960040C6 +:10F1700081B20000D1940040813201000080000380 +:10F1800044C9010000000041F0B101000400264024 +:10F190008132000000000042F0B101000000004098 +:10F1A000F1B1010000000043F0B101000080001047 +:10F1B00044C9010000000050F1B101000000004806 +:10F1C000F0B1010000000049F0B1010000000003AF +:10F1D000E0B101000000004561B101002000001015 +:10F1E00062DD01000000A85D059000003996004036 +:10F1F00081B200000400A205486D00000400820CEA +:10F20000803200002D000040439901002E002FF3B2 +:10F2100084B00100010063F396C8010043969F414A +:10F2200085500000010000A585CC01002D00204282 +:10F23000E6B101000400A3A5976C0000D4003D4195 +:10F2400085E001000B0000F298E401004A9622409C +:10F250001F7C00000400225A997C00000000005A24 +:10F26000998001000400A200986C00002004004076 +:10F2700089980100099900008A300100000080404F +:10F2800081B2010021040040899801000999000021 +:10F290008A3001000400A2006A0600005E012D0011 +:10F2A00080B001005596524381600000020000F2D8 +:10F2B00082F4010056960041809400000000005F37 +:10F2C000819001000000005E61B10100000000407B +:10F2D00062B101000000A84095B0000057969EBBA7 +:10F2E000803200005C96A2401F7C0000C994004060 +:10F2F00081B200000000804195B0010004000015BB +:10F3000042C90100000000542BC00100000000FCB5 +:10F3100024B00100000000FC38B00100000000FE35 +:10F320003CB00100000000FE3AB0010071969C174D +:10F33000803200006696A24A197C00000000804CD2 +:10F340001F9001000C00001E98F401006596A24871 +:10F35000996C00000000001542B101006596A28A78 +:10F36000F16D00000C00000102CC0100000000FC67 +:10F370003EB00100010000F428CC0100CC002D05B6 +:10F3800048B10100709620F03E6C00000000004B78 +:10F390001F9001000000004C2BC00100BF002D0594 +:10F3A00048B10100000080F33AE001000400A2052A +:10F3B000486D00001000000C96F401000400A20744 +:10F3C000966C000000002E4B1990010007002A0CDB +:10F3D000E4B1010000008004E6B101001800004023 +:10F3E000439901001C002DF016B0010020002DF003 +:10F3F00026B001000C002FF20CB001000000A206A4 +:10F4000014EC0000809622451F7C00000000A3063B +:10F410002AEC0000000000F894B00100000000F0A9 +:10F4200096B001000C002D4081B2010000002A4C72 +:10F43000E1C101003000001048C901000A0000408D +:10F44000F199010018000005F0C901000000004A10 +:10F45000F0B101000000004BE0B1010000000047E6 +:10F4600061B10100A00000A462DD01008A96A85CE1 +:10F470001F1000000000800548B101000400A295A3 +:10F48000036C000000002E1048B101004000000194 +:10F49000F0CD010040000003F0C901004000000071 +:10F4A000E0C9010000002E5049C101000000000623 +:10F4B000F1B1010000000003F0B101009596624235 +:10F4C000613100002000001062DD01009696A84026 +:10F4D000813200001000001062C901009896A80057 +:10F4E000E03100000000F24081B201000400A2956A +:10F4F000036C000000002E1048B101004000000124 +:10F50000F0CD010040000003F0C901004000000000 +:10F51000E0C9010000002E5049C1010000000006B2 +:10F52000F1B1010000000003F0B10100A3966242B6 +:10F53000613100002000001062DD0100A496A840A7 +:10F5400081320000A00000A462DD0100A696A800A0 +:10F55000E03100000000F24081B201003080004A3A +:10F5600044C9010000000006F1B10100C0A83D46F9 +:10F570000DE00100FF7F00A1F089010002000009F9 +:10F5800096F401000000004697E00100000060A82A +:10F5900097C00100B0966342613100003000004A1C +:10F5A00062C90100B196A840813200000000F3401A +:10F5B00081B2010000993F4297F00100B596654085 +:10F5C00081320000BD9622F3740600003F0000F374 +:10F5D0009488010000000007E785010000007555D0 +:10F5E00061B101000000004A62B101000000A840C2 +:10F5F00081B20000BA96004081B200000000F540E0 +:10F6000081B20100000000A836B00100CD96824111 +:10F6100023400000C296A2441F7C00009E9300017C +:10F620008C3001002080001042C90100C8962240A1 +:10F63000E36D00000000004361B1010040000010D4 +:10F6400062DD0100C596A840813200002383008856 +:10F650001CB000000000004123B0010000000010B9 +:10F6600032B00100CD962241197C0000E79400439E +:10F67000233001000000004123B00100CF96A31504 +:10F680000C6C0000D096000604B0000000000015CD +:10F6900004B00100D29620021A6C00000000000D98 +:10F6A00004B00100A197000548310100FD96220237 +:10F6B00014500000D696A2022A500000FD96A245E2 +:10F6C0001F7C0000D89622020C500000E196000238 +:10F6D00016C00000E096225C1F7C00003080001005 +:10F6E00042C90100E0962240E36D0000000000479F +:10F6F00061B101004000001062DD0100DC96A8400D +:10F7000081320000238300881CB000000000000547 +:10F7100048B101007996005C1F000100FD9622159A +:10F72000803200000000005033C00100FC96A202AD +:10F730001A500000ED9622461F7C000070800003E6 +:10F7400042C90100000000461F800100ED962240E2 +:10F75000E36D00000000004261B1010040000010B4 +:10F7600062DD0100E996A840813200002383008811 +:10F770001CB000000000000548B101000C8000032F +:10F7800042C90100040022F080320000100000F0A5 +:10F7900010C801002F002F5C1180010000000047FD +:10F7A000E7910100F00700401B980100BF9620156B +:10F7B0001A6C00007000000348C9010000002250CC +:10F7C000F1B1010000000003F0B10100FF070008E3 +:10F7D000E08D01000000004261B10100A00000A422 +:10F7E00062DD0100F996A8461F100000BF960005D3 +:10F7F00048B10000BF96000210C00000FF96A2446E +:10F800001F7C00009E9300018C3001000000001B53 +:10F8100010B100000080001044C901000C0000403D +:10F82000F199010010000008F0C901000000001665 +:10F83000F0B1010010000003E0C901000400A25C67 +:10F840001F7C00000000004561B101002000001095 +:10F8500062DD01000000A85C1F90000007970040D7 +:10F8600081B20000170000D0A2C901000000A24030 +:10F8700027EC00000000002000B00100C994004106 +:10F88000A34101000B97004127D00000360400403F +:10F8900089980100099900408A3001001000000792 +:10F8A00096E401000000004B809401000000005429 +:10F8B00061B101000080004062DD01000000A8404D +:10F8C00081B20000040014BB803200001497004095 +:10F8D00081B200000400A205486D00006A97004054 +:10F8E0002B300100AC002D0616C0010090002DF059 +:10F8F00016C401001E97A0F016440000000000414D +:10F9000017C001000E0000A244C9010000006CF005 +:10F9100030B00100AC002D4087B0010000006CF059 +:10F9200028B001002797224A197C000000300043CC +:10F9300086C801000030000B16C801002797A440BC +:10F94000813200000000004117C001004A972206E2 +:10F95000803200003597A206146C000032972248CE +:10F96000197C00002C97A0411740000000000041C6 +:10F9700017C001000000004131C0010090002018B4 +:10F98000E0B101008B002D48198001000400A24560 +:10F99000E77D00008B002045E7910100359700408E +:10F9A0008790000008000043869801003597A04822 +:10F9B000174000000000004117C00100B0000040E7 +:10F9C0004399010010500043FCC90100AE9700307C +:10F9D0008130010000000040E5B101004097224A5B +:10F9E000197C0000080000A244C90100CC002DAB26 +:10F9F000F9B10100000000AB17C001003F97A0F073 +:10FA0000164400000000004117C00100449764F054 +:10FA100082B00000A4000040479901004497A2F280 +:10FA20008032000000000041E5B101008C00201888 +:10FA3000E0B101009000004045990100000060061F +:10FA400030C001000000860C80B200000400A24912 +:10FA5000197C0000BC002D4619900100A000A0F206 +:10FA6000E4B10100B0000040439901001050004390 +:10FA7000FCC90100AE970030813001000000A24AAD +:10FA800019FC0000080000A244C90100CC002DAB05 +:10FA9000F9B10100000000AB17C001005397A0F0BE +:10FAA000164400000000004117C001000000E4F00F +:10FAB00082B001000080001044C901000000004134 +:10FAC000F0B1010000000003F0B1010000000000EF +:10FAD000F0B101000000001062B101000000A81B9D +:10FAE000E0B100005897004081B2000000F0000C27 +:10FAF0007E8901000000A64C956001000000804A4C +:10FB0000189401000080001044C901000400220183 +:10FB1000F031000020000040F0C901000000001694 +:10FB2000F0B101000000004361B1010020000010AD +:10FB300062DD01000000A815E0B1000063970040FD +:10FB400081B200001080000344C9010000000006DB +:10FB5000F0B1010000000001F0B101000000E85F19 +:10FB60001790010070000040439901007A012EFEB9 +:10FB700092B001008B002DF616B001007097224361 +:10FB8000E77D00000000004445C10100040000A61C +:10FB90002AB0010028006E0682C801007497224A2C +:10FBA000197C00000000004245D1010000006E4CAD +:10FBB00083C001000000004192C0010075974330EE +:10FBC0003D0700000000669E83B0010000001B415D +:10FBD0003DC301000000004192C00100060000A2E8 +:10FBE00044C901001000004998F401007E972630B6 +:10FBF000930400007E97904C92400000000000416A +:10FC000093C00100FFFF8049ECA9010000800010B3 +:10FC100044C9010004002201F03100000000000985 +:10FC2000F0B1010000000018F0B101002000001048 +:10FC300062DD01000000A815E0B1000083970040DC +:10FC400081B2000004002220816C000004002240E8 +:10FC5000816C00009597225F817C00009297A24002 +:10FC6000197C0000000000401990010000000054C1 +:10FC700061B101001000000796E401000000004F90 +:10FC8000979401000000004B62B101009297284058 +:10FC9000813200000400A254777D00008E9700405E +:10FCA00081B20000250400408998010009990040B4 +:10FCB0008A3001000000A221818400009897A25F91 +:10FCC000816C00000000A243197C01000000004389 +:10FCD000199001002504004089980100099900400D +:10FCE0008A3001000000005461B1010010000007DB +:10FCF00096E4010000000040969401000000004BD3 +:10FD000062B101000000A84081B200000400A254CA +:10FD1000777D00009D97004081B20000040022081A +:10FD2000803200000400220280320000A697A24B1D +:10FD3000FD7F0000B405000280CE01000400AA404F +:10FD4000813200000080001944C901000400220231 +:10FD5000F03100000000000BF0B1010000000013C2 +:10FD6000F0B101000000004361B101002000001962 +:10FD700062DD01000000A808E0B10000AB97004080 +:10FD800081B200000400A205486D0000B00000A18F +:10FD900080CE01000400A640813200007C002DF0DE +:10FDA00084B00100020000F098F40100B797204CE5 +:10FDB000846C00008800004043990100B79720F24E +:10FDC000846C00000000004085B0010098002D14F4 +:10FDD00082B00100000000F098B00100A3002D14D3 +:10FDE00098D00100BC97204C846C00000000004CAF +:10FDF00084B001000400A230816C0000000000F318 +:10FE000080E00100C0972340846C000000000040A7 +:10FE100084B00100D0002014E0B101009800254218 +:10FE200080B0010000006EF380F001000000A642E7 +:10FE300082C00000C697A0401640000000000041AC +:10FE400017C0010000009FF082EC00009800A04164 +:10FE5000E0B101000400A25C1F7C000037040040F8 +:10FE600089980100099900058A30010000000042CC +:10FE700061B1010000002E1048B10100A80100404E +:10FE8000F199010000000005F0B101000900000730 +:10FE900096E40100000060A797C001000000001078 +:10FEA00062B101000000A84081B20000D19700407B +:10FEB00081B20000A8002D1C8AB0010000009FF054 +:10FEC0008AD000000000A2408BEC00008A00204095 +:10FED000E7B10100B400004047990100A4002D459E +:10FEE000E0D10100DF979C17803200000400224A15 +:10FEF000197C0000BE002FAB83B001003C980014B9 +:10FF000082500100E497004081B20000E49722F2A1 +:10FF1000823000008C00004043990100E4979F1C50 +:10FF2000E06D0000BE000040479901003C98004091 +:10FF300081320100A800201CE0B101009C002D309E +:10FF400081B0010088002DF084B0010094002DF2F2 +:10FF500086B00100F89723F0846C0000EC972392A0 +:10FF6000876C0000C90400A694B00100EE97004021 +:10FF700081B20000200000A694B001006089004A10 +:10FF800094980100EE9768408132000004002240FE +:10FF9000BD7D00000000004AB0B10100BF002D424D +:10FFA000B2B1010090002DF380E00100F397D4403E +:10FFB00081320000000078DA84C00100FD97234000 +:10FFC000846C00009400209DE1B10100FD97004089 +:10FFD00084B00000BF002D4384C0010090002DF3C9 +:10FFE00080E00100FD972340846C00009400209D78 +:10FFF000E1B101000000004084B001000198A2F0CE +:020000021000EC +:10000000386C00009C002042E0B101000000005F5D +:100010001394010000008046198001009C002042DA +:10002000E0B101003700004043990100040000F3F3 +:1000300080F401000F0000F382880100079823413B +:10004000806C00000000005F139401000000890C28 +:1000500080B200000400860C80320000BC0000402A +:1000600043990100A000A0F2E4B1010000009F410B +:1000700024EC00001398A6408132000000009F424B +:1000800038EC00001398A64081320000B400004014 +:10009000439901001598A3F03A6C00000400A440B5 +:1000A000813200000000804081B20100B4000040B5 +:1000B00043990100199822F03A6C0000B400201D09 +:1000C000E0B1010080002D5F13940100199823F026 +:1000D0003A6C00008000201DE0B10100C000201239 +:1000E000E0B10100C400A01CE0B101002704004001 +:1000F00089980100099900428A3001000400A20594 +:10010000486D00000080000344C901000000004267 +:10011000E0B10100120000408798010025989F413E +:10012000246C0000000000418CB0010000000012AF +:100130008CD001002698004124B00000000000404F +:100140008DB001007F980040813201000000004521 +:1001500061B101004000001062DD01000000A84014 +:1001600081B200002898004081B20000B4940040A1 +:10017000813201000000001680B201000000A708D3 +:10018000803201003204004089980100099900087A +:100190008A3001003298A240956C0000C99400405A +:1001A00081320100008200A604B00100000000407E +:1001B0002DB00100A0982F4011B001003005004182 +:1001C00089B00000CC0000A180CE01000400A64050 +:1001D0008132000000009FF83EEC000000009F12FA +:1001E000E0ED0000C80020ABE1B10100CC00A01F91 +:1001F000E0B101000400A205486D00003F98A35F34 +:10020000E76D000000000041E7C10100A6000040CA +:1002100047990100539822F2863000000300004302 +:1002200084F401000100004180CC0100B8002D429F +:1002300080D001000000624086C0010047981F4343 +:10024000803200004898A240876C000000006241A4 +:1002500087B001004C989F408032000000000040B1 +:1002600085B001000000004084D001000000004281 +:1002700080B00100000000F288B0010002000044DC +:1002800084F40100B8002E4280D0010000006240DA +:1002900088C0010052981F44803200005698A24046 +:1002A000896C00005698624189B0000003006241E9 +:1002B00086E40100B8000040459901000100624158 +:1002C00088E40100A4002040E5B10100A200204024 +:1002D000E7B10100BC002E4387F00100000000449C +:1002E00086C001005C982043876C000000008043BA +:1002F000E5B101004001004380CE01000000A443AD +:10030000E43101004001E240879801000400A205A9 +:10031000486D00000400220A8032000088002D444D +:1003200081B0010090002DF22EB001009C002DF054 +:1003300086B0010090002DF082B00100BA002DF0CF +:1003400098B001006B98A212986C0000BC002DF2CE +:1003500098B001006B98A0F2986C000000000017A4 +:1003600082B001009C002041E0B10100B4002D12D8 +:1003700086D001006E98A341E06D00006F9800F0F8 +:1003800084B000000000004184B0010080002D43D3 +:1003900084D0010072989F4280320000000000402B +:1003A00085B001007498A342146C00007598000A8F +:1003B0000CB00000000000420CB001007798A017BC +:1003C0000C6C0000000080170CB001007C982240EB +:1003D0000D6C00000000A00A0CEC0000010000F011 +:1003E00082F401007C98A0410C6C00000000A2F097 +:1003F00080320100290000408998010009990040DD +:10040000813201000000804081B00100D1940040A1 +:1004100081320100040022038032000004800003C6 +:1004200044C9010000000046F0B101000000004096 +:10043000F1B10100000060418794010000800010CC +:1004400044C9010000000050F1B101000000004863 +:10045000F0B1010000000049F0B10100000000030C +:10046000E0B101000000004561B101002000001072 +:1004700062DD01000000A85D059000008B9800403F +:1004800081B200000400A205486D00001000000CBD +:1004900096F401000400A207966C000000002E4BA9 +:1004A0001990010005002A0CE4B10100000080044D +:1004B000E6B101003E040040899801000999000856 +:1004C0008A3001009698454861310000001000080C +:1004D00062DD01009C9828408730000097982248F0 +:1004E000777D000004002240276C00000A971D461B +:1004F00087B000009F98225F117C00000400221545 +:10050000623100009D98A8408132000000009D40AB +:1005100081B201000000004049B1010000142F4CDD +:1005200083B0010000000040F1B10100A298A24197 +:10053000835000000000804081B2010000000040B4 +:1005400049B1010030000040A199010000000040C5 +:1005500093B00100000000401FB00100F698004970 +:10056000963001000700004906E40100003900034D +:1005700006C801000000004005B00100200000D0C6 +:10058000A0C901000000004193C00100A998A05437 +:10059000936C000000002E0597B001000080004021 +:1005A0004999010000000040E1B10100000200A2F1 +:1005B00044C90100B298A2419750000000000020F9 +:1005C00049B30100FC980040493101000895004002 +:1005D0008132010000B52E0897B0010000000040F4 +:1005E000F1B10100B998A2419750000018000040F5 +:1005F0009798010000972E4081B201000000004052 +:10060000F1B10100BD98A2419750000000000040E8 +:1006100049B1010040182E0597B0010000000040CC +:10062000F1B10100C198A2419750000057952040B8 +:10063000E7B101003094004045990100640000409A +:10064000E599010056952040E7B10100B89420419A +:10065000E5B10100BA942041E5B101009894004051 +:1006600045990100020000409798010000000040F9 +:10067000F1B10100CB98A24197500000000000406A +:1006800097B00100000000406FB101000000004B76 +:1006900068B10100CF988541974000008004004078 +:1006A000813201000000004039B301000000004029 +:1006B00037B301000000004035B3010000000040E6 +:1006C00033B301000000004041B3010000000040CE +:1006D0003FB30100EE050040259B010042000040B1 +:1006E0004B9B0100000000402FB3010000000040C0 +:1006F0002DB301000000004047B30100000000409E +:1007000043B30100600000402B9B01000000005437 +:10071000EF93010000000055F1930100FFFF00A5D9 +:100720003C8B01000000002C5BB301000000002C9A +:1007300045B301000000004059B301000000004033 +:1007400057B301000000004027B301000000004043 +:1007500053B30100EB98A250FD7F0000EB98A2512B +:10076000FD7F0000EC9800401DB3000050460040A3 +:100770001D9B010000C000A688B30100FF3F00A63A +:100780003AB3010000C0009D3B9B0100B40500404E +:10079000239B0100000000404DB30100080A00A6A1 +:1007A00014B301000101008A159B01000000002024 +:1007B00087B30100008000A656B101000000805EF2 +:1007C00057B501001800004B20E401000600004B63 +:1007D00096E401000043004B96C801001800001089 +:1007E00020DC01000000004B209401000000805735 +:1007F0002190010000992E0A97B0010000000040EE +:10080000F1B10100FD98A2419750000000030040A3 +:100810009798010000A900404599010000000040A0 +:10082000F1B101000199A241975000003000004051 +:10083000979801000000005561B101000000004BD5 +:1008400062B101000599A840813200000599A241DA +:10085000975000000000804081B201001000004E5F +:1008600098E4010000000007989401000000004394 +:1008700099E0010000000080989401000000004809 +:1008800099E001000000004C889401000F996A4033 +:10089000813200001299224F777D0000F004004061 +:1008A000813201000000004F61B1010000000044EE +:1008B00062B101001399A840813200001A99224ABE +:1008C000897C00001899224F777D0000F0040040D9 +:1008D000813201000000004562B101001899A84072 +:1008E000813200000000FA4081B201000000804027 +:1008F00081B201000400A25A1F7C00001000000F0A +:1009000098F401000400A25F9904000000008040F8 +:1009100081B201000000804081B20100040000406B +:1009200081B200000400004081B2000004000040D9 +:1009300081B200000400004081B2000004000040C9 +:1009400081B200000400004081B2000004000040B9 +:1009500081B200000400004081B2000004000040A9 +:1009600081B200000400004081B200000400004099 +:1009700081B200000400004081B200000400004089 +:1009800081B200000400004081B200000400004079 +:1009900081B200000400004081B200000400004069 +:1009A00081B200000400004081B200000400004059 +:1009B00081B200000400004081B200000400004049 +:1009C00081B200000400004081B200000400004039 +:1009D00081B200000400004081B200000400004029 +:1009E00081B200000400004081B200000400004019 +:1009F00081B200000400004081B200000400004009 +:100A000081B200000400004081B2000004000040F8 +:100A100081B200000400004081B2000004000040E8 +:100A200081B200000400004081B2000004000040D8 +:100A300081B200000400004081B2000004000040C8 +:100A400081B200000400004081B2000004000040B8 +:100A500081B200000400004081B2000004000040A8 +:100A600081B200000400004081B200000400004098 +:100A700081B200000400004081B200000400004088 +:100A800081B200000400004081B200000400004078 +:100A900081B200000400004081B200000400004068 +:100AA00081B200000400004081B200000400004058 +:100AB00081B200000400004081B200000400004048 +:100AC00081B200000400004081B200000400004038 +:100AD00081B200000400004081B200000400004028 +:100AE00081B200000400004081B200000400004018 +:100AF00081B200000400004081B200000400004008 +:100B000081B200000400004081B2000004000040F7 +:100B100081B200000400004081B2000004000040E7 +:100B200081B200000400004081B2000004000040D7 +:100B300081B200000400004081B2000004000040C7 +:100B400081B200000400004081B2000004000040B7 +:100B500081B200000400004081B2000004000040A7 +:100B600081B200000400004081B200000400004097 +:100B700081B200000400004081B200000400004087 +:100B800081B200000400004081B200000400004077 +:100B900081B200000400004081B200000400004067 +:100BA00081B200000400004081B200000400004057 +:100BB00081B200000400004081B200000400004047 +:100BC00081B200000400004081B200000400004037 +:100BD00081B200000400004081B200000400004027 +:100BE00081B200000400004081B200000400004017 +:100BF00081B200000400004081B200000400004007 +:100C000081B200000400004081B2000004000040F6 +:100C100081B200000400004081B2000004000040E6 +:100C200081B200000400004081B2000004000040D6 +:100C300081B200000400004081B2000004000040C6 +:100C400081B200000400004081B2000004000040B6 +:100C500081B200000400004081B2000004000040A6 +:100C600081B200000400004081B200000400004096 +:100C700081B200000400004081B200000400004086 +:100C800081B200000400004081B200000400004076 +:100C900081B200000400004081B200000400004066 +:100CA00081B200000400004081B200000400004056 +:100CB00081B200000400004081B200000400004046 +:100CC00081B200000400004081B200000400004036 +:100CD00081B200000400004081B200000400004026 +:100CE00081B200000400004081B200000400004016 +:100CF00081B200000400004081B200000400004006 +:100D000081B200000400004081B2000004000040F5 +:100D100081B200000400004081B2000004000040E5 +:100D200081B200000400004081B2000004000040D5 +:100D300081B200000400004081B2000004000040C5 +:100D400081B200000400004081B2000004000040B5 +:100D500081B200000400004081B2000004000040A5 +:100D600081B200000400004081B200000400004095 +:100D700081B200000400004081B200000400004085 +:100D800081B200000400004081B200000400004075 +:100D900081B200000400004081B200000400004065 +:100DA00081B200000400004081B200000400004055 +:100DB00081B200000400004081B200000400004045 +:100DC00081B200000400004081B200000400004035 +:100DD00081B200000400004081B200000400004025 +:100DE00081B200000400004081B200000400004015 +:100DF00081B200000400004081B200000400004005 +:100E000081B200000400004081B2000004000040F4 +:100E100081B200000400004081B2000004000040E4 +:100E200081B200000400004081B2000004000040D4 +:100E300081B200000400004081B2000004000040C4 +:100E400081B200000400004081B2000004000040B4 +:100E500081B200000400004081B2000004000040A4 +:100E600081B200000400004081B200000400004094 +:100E700081B200000400004081B200000400004084 +:100E800081B200000400004081B200000400004074 +:100E900081B200000400004081B200000400004064 +:100EA00081B200000400004081B200000400004054 +:100EB00081B200000400004081B200000400004044 +:100EC00081B200000400004081B200000400004034 +:100ED00081B200000400004081B200000400004024 +:100EE00081B200000400004081B200000400004014 +:100EF00081B200000400004081B200000400004004 +:100F000081B200000400004081B2000004000040F3 +:100F100081B200000400004081B2000004000040E3 +:100F200081B200000400004081B2000004000040D3 +:100F300081B200000400004081B2000004000040C3 +:100F400081B200000400004081B2000004000040B3 +:100F500081B200000400004081B2000004000040A3 +:100F600081B200000400004081B200000400004093 +:100F700081B200000400004081B200000400004083 +:100F800081B200000400004081B200000400004073 +:100F900081B200000400004081B200000400004063 +:100FA00081B200000400004081B200000400004053 +:100FB00081B200000400004081B200000400004043 +:100FC00081B200000400004081B200000400004033 +:100FD00081B200000400004081B200000400004023 +:100FE00081B200000400004081B200000400004013 +:100FF00081B200000400004081B200000400004003 +:1010000081B200000400004081B2000004000040F2 +:1010100081B200000400004081B2000004000040E2 +:1010200081B200000400004081B2000004000040D2 +:1010300081B200000400004081B2000004000040C2 +:1010400081B200000400004081B2000004000040B2 +:1010500081B200000400004081B2000004000040A2 +:1010600081B200000400004081B200000400004092 +:1010700081B200000400004081B200000400004082 +:1010800081B200000400004081B200000400004072 +:1010900081B200000400004081B200000400004062 +:1010A00081B200000400004081B200000400004052 +:1010B00081B200000400004081B200000400004042 +:1010C00081B200000400004081B200000400004032 +:1010D00081B200000400004081B200000400004022 +:1010E00081B200000400004081B200000400004012 +:1010F00081B200000400004081B200000400004002 +:1011000081B200000400004081B2000004000040F1 +:1011100081B200000400004081B2000004000040E1 +:1011200081B200000400004081B2000004000040D1 +:1011300081B200000400004081B2000004000040C1 +:1011400081B200000400004081B2000004000040B1 +:1011500081B200000400004081B2000004000040A1 +:1011600081B200000400004081B200000400004091 +:1011700081B200000400004081B200000400004081 +:1011800081B200000400004081B200000400004071 +:1011900081B200000400004081B200000400004061 +:1011A00081B200000400004081B200000400004051 +:1011B00081B200000400004081B200000400004041 +:1011C00081B200000400004081B200000400004031 +:1011D00081B200000400004081B200000400004021 +:1011E00081B200000400004081B200000400004011 +:1011F00081B200000400004081B200000400004001 +:1012000081B200000400004081B2000004000040F0 +:1012100081B200000400004081B2000004000040E0 +:1012200081B200000400004081B2000004000040D0 +:1012300081B200000400004081B2000004000040C0 +:1012400081B200000400004081B2000004000040B0 +:1012500081B200000400004081B2000004000040A0 +:1012600081B200000400004081B200000400004090 +:1012700081B200000400004081B200000400004080 +:1012800081B200000400004081B200000400004070 +:1012900081B200000400004081B200000400004060 +:1012A00081B200000400004081B200000400004050 +:1012B00081B200000400004081B200000400004040 +:1012C00081B200000400004081B200000400004030 +:1012D00081B200000400004081B200000400004020 +:1012E00081B200000400004081B200000400004010 +:1012F00081B200000400004081B200000400004000 +:1013000081B200000400004081B2000004000040EF +:1013100081B200000400004081B2000004000040DF +:1013200081B200000400004081B2000004000040CF +:1013300081B200000400004081B2000004000040BF +:1013400081B200000400004081B2000004000040AF +:1013500081B200000400004081B20000040000409F +:1013600081B200000400004081B20000040000408F +:1013700081B200000400004081B20000040000407F +:1013800081B200000400004081B20000040000406F +:1013900081B200000400004081B20000040000405F +:1013A00081B200000400004081B20000040000404F +:1013B00081B200000400004081B20000040000403F +:1013C00081B200000400004081B20000040000402F +:1013D00081B200000400004081B20000040000401F +:1013E00081B200000400004081B20000040000400F +:1013F00081B200000400004081B2000004000040FF +:1014000081B200000400004081B2000004000040EE +:1014100081B200000400004081B2000004000040DE +:1014200081B200000400004081B2000004000040CE +:1014300081B200000400004081B2000004000040BE +:1014400081B200000400004081B2000004000040AE +:1014500081B200000400004081B20000040000409E +:1014600081B200000400004081B20000040000408E +:1014700081B200000400004081B20000040000407E +:1014800081B200000400004081B20000040000406E +:1014900081B200000400004081B20000040000405E +:1014A00081B200000400004081B20000040000404E +:1014B00081B200000400004081B20000040000403E +:1014C00081B200000400004081B20000040000402E +:1014D00081B200000400004081B20000040000401E +:1014E00081B200000400004081B20000040000400E +:1014F00081B200000400004081B2000004000040FE +:1015000081B200000400004081B2000004000040ED +:1015100081B200000400004081B2000004000040DD +:1015200081B200000400004081B2000004000040CD +:1015300081B200000400004081B2000004000040BD +:1015400081B200000400004081B2000004000040AD +:1015500081B200000400004081B20000040000409D +:1015600081B200000400004081B20000040000408D +:1015700081B200000400004081B20000040000407D +:1015800081B200000400004081B20000040000406D +:1015900081B200000400004081B20000040000405D +:1015A00081B200000400004081B20000040000404D +:1015B00081B200000400004081B20000040000403D +:1015C00081B200000400004081B20000040000402D +:1015D00081B200000400004081B20000040000401D +:1015E00081B200000400004081B20000040000400D +:1015F00081B200000400004081B2000004000040FD +:1016000081B200000400004081B2000004000040EC +:1016100081B200000400004081B2000004000040DC +:1016200081B200000400004081B2000004000040CC +:1016300081B200000400004081B2000004000040BC +:1016400081B200000400004081B2000004000040AC +:1016500081B200000400004081B20000040000409C +:1016600081B200000400004081B20000040000408C +:1016700081B200000400004081B20000040000407C +:1016800081B200000400004081B20000040000406C +:1016900081B200000400004081B20000040000405C +:1016A00081B200000400004081B20000040000404C +:1016B00081B200000400004081B20000040000403C +:1016C00081B200000400004081B20000040000402C +:1016D00081B200000400004081B20000040000401C +:1016E00081B200000400004081B20000040000400C +:1016F00081B200000400004081B2000004000040FC +:1017000081B200000400004081B2000004000040EB +:1017100081B200000400004081B2000004000040DB +:1017200081B200000400004081B2000004000040CB +:1017300081B200000400004081B2000004000040BB +:1017400081B200000400004081B2000004000040AB +:1017500081B200000400004081B20000040000409B +:1017600081B200000400004081B20000040000408B +:1017700081B200000400004081B20000040000407B +:1017800081B200000400004081B20000040000406B +:1017900081B200000400004081B20000040000405B +:1017A00081B200000400004081B20000040000404B +:1017B00081B200000400004081B20000040000403B +:1017C00081B200000400004081B20000040000402B +:1017D00081B200000400004081B20000040000401B +:1017E00081B200000400004081B20000040000400B +:1017F00081B200000400004081B2000004000040FB +:1018000081B200000400004081B2000004000040EA +:1018100081B200000400004081B2000004000040DA +:1018200081B200000400004081B2000004000040CA +:1018300081B200000400004081B2000004000040BA +:1018400081B200000400004081B2000004000040AA +:1018500081B200000400004081B20000040000409A +:1018600081B200000400004081B20000040000408A +:1018700081B200000400004081B20000040000407A +:1018800081B200000400004081B20000040000406A +:1018900081B200000400004081B20000040000405A +:1018A00081B200000400004081B20000040000404A +:1018B00081B200000400004081B20000040000403A +:1018C00081B200000400004081B20000040000402A +:1018D00081B200000400004081B20000040000401A +:1018E00081B200000400004081B20000040000400A +:1018F00081B200000400004081B2000004000040FA +:1019000081B200000400004081B2000004000040E9 +:1019100081B200000400004081B2000004000040D9 +:1019200081B200000400004081B2000004000040C9 +:1019300081B200000400004081B2000004000040B9 +:1019400081B200000400004081B2000004000040A9 +:1019500081B200000400004081B200000400004099 +:1019600081B200000400004081B200000400004089 +:1019700081B200000400004081B200000400004079 +:1019800081B200000400004081B200000400004069 +:1019900081B200000400004081B200000400004059 +:1019A00081B200000400004081B200000400004049 +:1019B00081B200000400004081B200000400004039 +:1019C00081B200000400004081B200000400004029 +:1019D00081B200000400004081B200000400004019 +:1019E00081B200000400004081B200000400004009 +:1019F00081B200000400004081B2000004000040F9 +:101A000081B200000400004081B2000004000040E8 +:101A100081B200000400004081B2000004000040D8 +:101A200081B200000400004081B2000004000040C8 +:101A300081B200000400004081B2000004000040B8 +:101A400081B200000400004081B2000004000040A8 +:101A500081B200000400004081B200000400004098 +:101A600081B200000400004081B200000400004088 +:101A700081B200000400004081B200000400004078 +:101A800081B200000400004081B200000400004068 +:101A900081B200000400004081B200000400004058 +:101AA00081B200000400004081B200000400004048 +:101AB00081B200000400004081B200000400004038 +:101AC00081B200000400004081B200000400004028 +:101AD00081B200000400004081B200000400004018 +:101AE00081B200000400004081B200000400004008 +:101AF00081B200000400004081B2000004000040F8 +:101B000081B200000400004081B2000004000040E7 +:101B100081B200000400004081B2000004000040D7 +:101B200081B200000400004081B2000004000040C7 +:101B300081B200000400004081B2000004000040B7 +:101B400081B200000400004081B2000004000040A7 +:101B500081B200000400004081B200000400004097 +:101B600081B200000400004081B200000400004087 +:101B700081B200000400004081B200000400004077 +:101B800081B200000400004081B200000400004067 +:101B900081B200000400004081B200000400004057 +:101BA00081B200000400004081B200000400004047 +:101BB00081B200000400004081B200000400004037 +:101BC00081B200000400004081B200000400004027 +:101BD00081B200000400004081B200000400004017 +:101BE00081B200000400004081B200000400004007 +:101BF00081B200000400004081B2000004000040F7 +:101C000081B200000400004081B2000004000040E6 +:101C100081B200000400004081B2000004000040D6 +:101C200081B200000400004081B2000004000040C6 +:101C300081B200000400004081B2000004000040B6 +:101C400081B200000400004081B2000004000040A6 +:101C500081B200000400004081B200000400004096 +:101C600081B200000400004081B200000400004086 +:101C700081B200000400004081B200000400004076 +:101C800081B200000400004081B200000400004066 +:101C900081B200000400004081B200000400004056 +:101CA00081B200000400004081B200000400004046 +:101CB00081B200000400004081B200000400004036 +:101CC00081B200000400004081B200000400004026 +:101CD00081B200000400004081B200000400004016 +:101CE00081B200000400004081B200000400004006 +:101CF00081B200000400004081B2000004000040F6 +:101D000081B200000400004081B2000004000040E5 +:101D100081B200000400004081B2000004000040D5 +:101D200081B200000400004081B2000004000040C5 +:101D300081B200000400004081B2000004000040B5 +:101D400081B200000400004081B2000004000040A5 +:101D500081B200000400004081B200000400004095 +:101D600081B200000400004081B200000400004085 +:101D700081B200000400004081B200000400004075 +:101D800081B200000400004081B200000400004065 +:101D900081B200000400004081B200000400004055 +:101DA00081B200000400004081B200000400004045 +:101DB00081B200000400004081B200000400004035 +:101DC00081B200000400004081B200000400004025 +:101DD00081B200000400004081B200000400004015 +:101DE00081B200000400004081B200000400004005 +:101DF00081B200000400004081B2000004000040F5 +:101E000081B200000400004081B2000004000040E4 +:101E100081B200000400004081B2000004000040D4 +:101E200081B200000400004081B2000004000040C4 +:101E300081B200000400004081B2000004000040B4 +:101E400081B200000400004081B2000004000040A4 +:101E500081B200000400004081B200000400004094 +:101E600081B200000400004081B200000400004084 +:101E700081B200000400004081B200000400004074 +:101E800081B200000400004081B200000400004064 +:101E900081B200000400004081B200000400004054 +:101EA00081B200000400004081B200000400004044 +:101EB00081B200000400004081B200000400004034 +:101EC00081B200000400004081B200000400004024 +:101ED00081B200000400004081B200000400004014 +:101EE00081B200000400004081B200000400004004 +:101EF00081B200000400004081B2000004000040F4 +:101F000081B200000400004081B2000004000040E3 +:101F100081B200000400004081B2000004000040D3 +:101F200081B200000400004081B2000004000040C3 +:101F300081B200000400004081B2000004000040B3 +:101F400081B200000400004081B2000004000040A3 +:101F500081B200000400004081B200000400004093 +:101F600081B200000400004081B200000400004083 +:101F700081B200000400004081B200000400004073 +:101F800081B200000400004081B200000400004063 +:101F900081B200000400004081B200000400004053 +:101FA00081B200000400004081B200000400004043 +:101FB00081B200000400004081B200000400004033 +:101FC00081B200000400004081B200000400004023 +:101FD00081B200000400004081B200000400004013 +:101FE00081B200000400004081B200000400004003 +:101FF00081B200000400004081B2000004000040F3 +:1020000081B200000400004081B2000004000040E2 +:1020100081B200000400004081B2000004000040D2 +:1020200081B200000400004081B2000004000040C2 +:1020300081B200000400004081B2000004000040B2 +:1020400081B200000400004081B2000004000040A2 +:1020500081B200000400004081B200000400004092 +:1020600081B200000400004081B200000400004082 +:1020700081B200000400004081B200000400004072 +:1020800081B200000400004081B200000400004062 +:1020900081B200000400004081B200000400004052 +:1020A00081B200000400004081B200000400004042 +:1020B00081B200000400004081B200000400004032 +:1020C00081B200000400004081B200000400004022 +:1020D00081B200000400004081B200000400004012 +:1020E00081B200000400004081B200000400004002 +:1020F00081B200000400004081B2000004000040F2 +:1021000081B200000400004081B2000004000040E1 +:1021100081B200000400004081B2000004000040D1 +:1021200081B200000400004081B2000004000040C1 +:1021300081B200000400004081B2000004000040B1 +:1021400081B200000400004081B2000004000040A1 +:1021500081B200000400004081B200000400004091 +:1021600081B200000400004081B200000400004081 +:1021700081B200000400004081B200000400004071 +:1021800081B200000400004081B200000400004061 +:1021900081B200000400004081B200000400004051 +:1021A00081B200000400004081B200000400004041 +:1021B00081B200000400004081B200000400004031 +:1021C00081B200000400004081B200000400004021 +:1021D00081B200000400004081B200000400004011 +:1021E00081B200000400004081B200000400004001 +:1021F00081B200000400004081B2000004000040F1 +:1022000081B200000400004081B2000004000040E0 +:1022100081B200000400004081B2000004000040D0 +:1022200081B200000400004081B2000004000040C0 +:1022300081B200000400004081B2000004000040B0 +:1022400081B200000400004081B2000004000040A0 +:1022500081B200000400004081B200000400004090 +:1022600081B200000400004081B200000400004080 +:1022700081B200000400004081B200000400004070 +:1022800081B200000400004081B200000400004060 +:1022900081B200000400004081B200000400004050 +:1022A00081B200000400004081B200000400004040 +:1022B00081B200000400004081B200000400004030 +:1022C00081B200000400004081B200000400004020 +:1022D00081B200000400004081B200000400004010 +:1022E00081B200000400004081B200000400004000 +:1022F00081B200000400004081B2000004000040F0 +:1023000081B200000400004081B2000004000040DF +:1023100081B200000400004081B2000004000040CF +:1023200081B200000400004081B2000004000040BF +:1023300081B200000400004081B2000004000040AF +:1023400081B200000400004081B20000040000409F +:1023500081B200000400004081B20000040000408F +:1023600081B200000400004081B20000040000407F +:1023700081B200000400004081B20000040000406F +:1023800081B200000400004081B20000040000405F +:1023900081B200000400004081B20000040000404F +:1023A00081B200000400004081B20000040000403F +:1023B00081B200000400004081B20000040000402F +:1023C00081B200000400004081B20000040000401F +:1023D00081B200000400004081B20000040000400F +:1023E00081B200000400004081B2000004000040FF +:1023F00081B200000400004081B2000004000040EF +:1024000081B200000400004081B2000004000040DE +:1024100081B200000400004081B2000004000040CE +:1024200081B200000400004081B2000004000040BE +:1024300081B200000400004081B2000004000040AE +:1024400081B200000400004081B20000040000409E +:1024500081B200000400004081B20000040000408E +:1024600081B200000400004081B20000040000407E +:1024700081B200000400004081B20000040000406E +:1024800081B200000400004081B20000040000405E +:1024900081B200000400004081B20000040000404E +:1024A00081B200000400004081B20000040000403E +:1024B00081B200000400004081B20000040000402E +:1024C00081B200000400004081B20000040000401E +:1024D00081B200000400004081B20000040000400E +:1024E00081B200000400004081B2000004000040FE +:1024F00081B200000400004081B2000004000040EE +:1025000081B200000400004081B2000004000040DD +:1025100081B200000400004081B2000004000040CD +:1025200081B200000400004081B2000004000040BD +:1025300081B200000400004081B2000004000040AD +:1025400081B200000400004081B20000040000409D +:1025500081B200000400004081B20000040000408D +:1025600081B200000400004081B20000040000407D +:1025700081B200000400004081B20000040000406D +:1025800081B200000400004081B20000040000405D +:1025900081B200000400004081B20000040000404D +:1025A00081B200000400004081B20000040000403D +:1025B00081B200000400004081B20000040000402D +:1025C00081B200000400004081B20000040000401D +:1025D00081B200000400004081B20000040000400D +:1025E00081B200000400004081B2000004000040FD +:1025F00081B200000400004081B2000004000040ED +:1026000081B200000400004081B2000004000040DC +:1026100081B200000400004081B2000004000040CC +:1026200081B200000400004081B2000004000040BC +:1026300081B200000400004081B2000004000040AC +:1026400081B200000400004081B20000040000409C +:1026500081B200000400004081B20000040000408C +:1026600081B200000400004081B20000040000407C +:1026700081B200000400004081B20000040000406C +:1026800081B200000400004081B20000040000405C +:1026900081B200000400004081B20000040000404C +:1026A00081B200000400004081B20000040000403C +:1026B00081B200000400004081B20000040000402C +:1026C00081B200000400004081B20000040000401C +:1026D00081B200000400004081B20000040000400C +:1026E00081B200000400004081B2000004000040FC +:1026F00081B200000400004081B2000004000040EC +:1027000081B200000400004081B2000004000040DB +:1027100081B200000400004081B2000004000040CB +:1027200081B200000400004081B2000004000040BB +:1027300081B200000400004081B2000004000040AB +:1027400081B200000400004081B20000040000409B +:1027500081B200000400004081B20000040000408B +:1027600081B200000400004081B20000040000407B +:1027700081B200000400004081B20000040000406B +:1027800081B200000400004081B20000040000405B +:1027900081B200000400004081B20000040000404B +:1027A00081B200000400004081B20000040000403B +:1027B00081B200000400004081B20000040000402B +:1027C00081B200000400004081B20000040000401B +:1027D00081B200000400004081B20000040000400B +:1027E00081B200000400004081B2000004000040FB +:1027F00081B200000400004081B2000004000040EB +:1028000081B200000400004081B2000004000040DA +:1028100081B200000400004081B2000004000040CA +:1028200081B200000400004081B2000004000040BA +:1028300081B200000400004081B2000004000040AA +:1028400081B200000400004081B20000040000409A +:1028500081B200000400004081B20000040000408A +:1028600081B200000400004081B20000040000407A +:1028700081B200000400004081B20000040000406A +:1028800081B200000400004081B20000040000405A +:1028900081B200000400004081B20000040000404A +:1028A00081B200000400004081B20000040000403A +:1028B00081B200000400004081B20000040000402A +:1028C00081B200000400004081B20000040000401A +:1028D00081B200000400004081B20000040000400A +:1028E00081B200000400004081B2000004000040FA +:1028F00081B200000400004081B2000004000040EA +:1029000081B200000400004081B2000004000040D9 +:1029100081B200000400004081B2000004000040C9 +:1029200081B200000400004081B2000004000040B9 +:1029300081B200000400004081B2000004000040A9 +:1029400081B200000400004081B200000400004099 +:1029500081B200000400004081B200000400004089 +:1029600081B200000400004081B200000400004079 +:1029700081B200000400004081B200000400004069 +:1029800081B200000400004081B200000400004059 +:1029900081B200000400004081B200000400004049 +:1029A00081B200000400004081B200000400004039 +:1029B00081B200000400004081B200000400004029 +:1029C00081B200000400004081B200000400004019 +:1029D00081B200000400004081B200000400004009 +:1029E00081B200000400004081B2000004000040F9 +:1029F00081B200000400004081B2000004000040E9 +:102A000081B200000400004081B2000004000040D8 +:102A100081B200000400004081B2000004000040C8 +:102A200081B200000400004081B2000004000040B8 +:102A300081B200000400004081B2000004000040A8 +:102A400081B200000400004081B200000400004098 +:102A500081B200000400004081B200000400004088 +:102A600081B200000400004081B200000400004078 +:102A700081B200000400004081B200000400004068 +:102A800081B200000400004081B200000400004058 +:102A900081B200000400004081B200000400004048 +:102AA00081B200000400004081B200000400004038 +:102AB00081B200000400004081B200000400004028 +:102AC00081B200000400004081B200000400004018 +:102AD00081B200000400004081B200000400004008 +:102AE00081B200000400004081B2000004000040F8 +:102AF00081B200000400004081B2000004000040E8 +:102B000081B200000400004081B2000004000040D7 +:102B100081B200000400004081B2000004000040C7 +:102B200081B200000400004081B2000004000040B7 +:102B300081B200000400004081B2000004000040A7 +:102B400081B200000400004081B200000400004097 +:102B500081B200000400004081B200000400004087 +:102B600081B200000400004081B200000400004077 +:102B700081B200000400004081B200000400004067 +:102B800081B200000400004081B200000400004057 +:102B900081B200000400004081B200000400004047 +:102BA00081B200000400004081B200000400004037 +:102BB00081B200000400004081B200000400004027 +:102BC00081B200000400004081B200000400004017 +:102BD00081B200000400004081B200000400004007 +:102BE00081B200000400004081B2000004000040F7 +:102BF00081B200000400004081B2000004000040E7 +:102C000081B200000400004081B2000004000040D6 +:102C100081B200000400004081B2000004000040C6 +:102C200081B200000400004081B2000004000040B6 +:102C300081B200000400004081B2000004000040A6 +:102C400081B200000400004081B200000400004096 +:102C500081B200000400004081B200000400004086 +:102C600081B200000400004081B200000400004076 +:102C700081B200000400004081B200000400004066 +:102C800081B200000400004081B200000400004056 +:102C900081B200000400004081B200000400004046 +:102CA00081B200000400004081B200000400004036 +:102CB00081B200000400004081B200000400004026 +:102CC00081B200000400004081B200000400004016 +:102CD00081B200000400004081B200000400004006 +:102CE00081B200000400004081B2000004000040F6 +:102CF00081B200000400004081B2000004000040E6 +:102D000081B200000400004081B2000004000040D5 +:102D100081B200000400004081B2000004000040C5 +:102D200081B200000400004081B2000004000040B5 +:102D300081B200000400004081B2000004000040A5 +:102D400081B200000400004081B200000400004095 +:102D500081B200000400004081B200000400004085 +:102D600081B200000400004081B200000400004075 +:102D700081B200000400004081B200000400004065 +:102D800081B200000400004081B200000400004055 +:102D900081B200000400004081B200000400004045 +:102DA00081B200000400004081B200000400004035 +:102DB00081B200000400004081B200000400004025 +:102DC00081B200000400004081B200000400004015 +:102DD00081B200000400004081B200000400004005 +:102DE00081B200000400004081B2000004000040F5 +:102DF00081B200000400004081B2000004000040E5 +:102E000081B200000400004081B2000004000040D4 +:102E100081B200000400004081B2000004000040C4 +:102E200081B200000400004081B2000004000040B4 +:102E300081B200000400004081B2000004000040A4 +:102E400081B200000400004081B200000400004094 +:102E500081B200000400004081B200000400004084 +:102E600081B200000400004081B200000400004074 +:102E700081B200000400004081B200000400004064 +:102E800081B200000400004081B200000400004054 +:102E900081B200000400004081B200000400004044 +:102EA00081B200000400004081B200000400004034 +:102EB00081B200000400004081B200000400004024 +:102EC00081B200000400004081B200000400004014 +:102ED00081B200000400004081B200000400004004 +:102EE00081B200000400004081B2000004000040F4 +:102EF00081B200000400004081B2000004000040E4 +:102F000081B200000400004081B2000004000040D3 +:102F100081B200000400004081B2000004000040C3 +:102F200081B200000400004081B2000004000040B3 +:102F300081B200000400004081B2000004000040A3 +:102F400081B200000400004081B200000400004093 +:102F500081B200000400004081B200000400004083 +:102F600081B200000400004081B200000400004073 +:102F700081B200000400004081B200000400004063 +:102F800081B200000400004081B200000400004053 +:102F900081B200000400004081B200000400004043 +:102FA00081B200000400004081B200000400004033 +:102FB00081B200000400004081B200000400004023 +:102FC00081B200000400004081B200000400004013 +:102FD00081B200000400004081B200000400004003 +:102FE00081B200000400004081B2000004000040F3 +:102FF00081B200000400004081B2000004000040E3 +:1030000081B200000400004081B2000004000040D2 +:1030100081B200000400004081B2000004000040C2 +:1030200081B200000400004081B2000004000040B2 +:1030300081B200000400004081B2000004000040A2 +:1030400081B200000400004081B200000400004092 +:1030500081B200000400004081B200000400004082 +:1030600081B200000400004081B200000400004072 +:1030700081B200000400004081B200000400004062 +:1030800081B200000400004081B200000400004052 +:1030900081B200000400004081B200000400004042 +:1030A00081B200000400004081B200000400004032 +:1030B00081B200000400004081B200000400004022 +:1030C00081B200000400004081B200000400004012 +:1030D00081B200000400004081B200000400004002 +:1030E00081B200000400004081B2000004000040F2 +:1030F00081B200000400004081B2000004000040E2 +:1031000081B200000400004081B2000004000040D1 +:1031100081B200000400004081B2000004000040C1 +:1031200081B200000400004081B2000004000040B1 +:1031300081B200000400004081B2000004000040A1 +:1031400081B200000400004081B200000400004091 +:1031500081B200000400004081B200000400004081 +:1031600081B200000400004081B200000400004071 +:1031700081B200000400004081B200000400004061 +:1031800081B200000400004081B200000400004051 +:1031900081B200000400004081B200000400004041 +:1031A00081B200000400004081B200000400004031 +:1031B00081B200000400004081B200000400004021 +:1031C00081B200000400004081B200000400004011 +:1031D00081B200000400004081B200000400004001 +:1031E00081B200000400004081B2000004000040F1 +:1031F00081B200000400004081B2000004000040E1 +:1032000081B200000400004081B2000004000040D0 +:1032100081B200000400004081B2000004000040C0 +:1032200081B200000400004081B2000004000040B0 +:1032300081B200000400004081B2000004000040A0 +:1032400081B200000400004081B200000400004090 +:1032500081B200000400004081B200000400004080 +:1032600081B200000400004081B200000400004070 +:1032700081B200000400004081B200000400004060 +:1032800081B200000400004081B200000400004050 +:1032900081B200000400004081B200000400004040 +:1032A00081B200000400004081B200000400004030 +:1032B00081B200000400004081B200000400004020 +:1032C00081B200000400004081B200000400004010 +:1032D00081B200000400004081B200000400004000 +:1032E00081B200000400004081B2000004000040F0 +:1032F00081B200000400004081B2000004000040E0 +:1033000081B200000400004081B2000004000040CF +:1033100081B200000400004081B2000004000040BF +:1033200081B200000400004081B2000004000040AF +:1033300081B200000400004081B20000040000409F +:1033400081B200000400004081B20000040000408F +:1033500081B200000400004081B20000040000407F +:1033600081B200000400004081B20000040000406F +:1033700081B200000400004081B20000040000405F +:1033800081B200000400004081B20000040000404F +:1033900081B200000400004081B20000040000403F +:1033A00081B200000400004081B20000040000402F +:1033B00081B200000400004081B20000040000401F +:1033C00081B200000400004081B20000040000400F +:1033D00081B200000400004081B2000004000040FF +:1033E00081B200000400004081B2000004000040EF +:1033F00081B200000400004081B2000004000040DF +:1034000081B200000400004081B2000004000040CE +:1034100081B200000400004081B2000004000040BE +:1034200081B200000400004081B2000004000040AE +:1034300081B200000400004081B20000040000409E +:1034400081B200000400004081B20000040000408E +:1034500081B200000400004081B20000040000407E +:1034600081B200000400004081B20000040000406E +:1034700081B200000400004081B20000040000405E +:1034800081B200000400004081B20000040000404E +:1034900081B200000400004081B20000040000403E +:1034A00081B200000400004081B20000040000402E +:1034B00081B200000400004081B20000040000401E +:1034C00081B200000400004081B20000040000400E +:1034D00081B200000400004081B2000004000040FE +:1034E00081B200000400004081B2000004000040EE +:1034F00081B200000400004081B2000004000040DE +:1035000081B200000400004081B2000004000040CD +:1035100081B200000400004081B2000004000040BD +:1035200081B200000400004081B2000004000040AD +:1035300081B200000400004081B20000040000409D +:1035400081B200000400004081B20000040000408D +:1035500081B200000400004081B20000040000407D +:1035600081B200000400004081B20000040000406D +:1035700081B200000400004081B20000040000405D +:1035800081B200000400004081B20000040000404D +:1035900081B200000400004081B20000040000403D +:1035A00081B200000400004081B20000040000402D +:1035B00081B200000400004081B20000040000401D +:1035C00081B200000400004081B20000040000400D +:1035D00081B200000400004081B2000004000040FD +:1035E00081B200000400004081B2000004000040ED +:1035F00081B200000400004081B2000004000040DD +:1036000081B200000400004081B2000004000040CC +:1036100081B200000400004081B2000004000040BC +:1036200081B200000400004081B2000004000040AC +:1036300081B200000400004081B20000040000409C +:1036400081B200000400004081B20000040000408C +:1036500081B200000400004081B20000040000407C +:1036600081B200000400004081B20000040000406C +:1036700081B200000400004081B20000040000405C +:1036800081B200000400004081B20000040000404C +:1036900081B200000400004081B20000040000403C +:1036A00081B200000400004081B20000040000402C +:1036B00081B200000400004081B20000040000401C +:1036C00081B200000400004081B20000040000400C +:1036D00081B200000400004081B2000004000040FC +:1036E00081B200000400004081B2000004000040EC +:1036F00081B200000400004081B2000004000040DC +:1037000081B200000400004081B2000004000040CB +:1037100081B200000400004081B2000004000040BB +:1037200081B200000400004081B2000004000040AB +:1037300081B200000400004081B20000040000409B +:1037400081B200000400004081B20000040000408B +:1037500081B200000400004081B20000040000407B +:1037600081B200000400004081B20000040000406B +:1037700081B200000400004081B20000040000405B +:1037800081B200000400004081B20000040000404B +:1037900081B200000400004081B20000040000403B +:1037A00081B200000400004081B20000040000402B +:1037B00081B200000400004081B20000040000401B +:1037C00081B200000400004081B20000040000400B +:1037D00081B200000400004081B2000004000040FB +:1037E00081B200000400004081B2000004000040EB +:1037F00081B200000400004081B2000004000040DB +:1038000081B200000400004081B2000004000040CA +:1038100081B200000400004081B2000004000040BA +:1038200081B200000400004081B2000004000040AA +:1038300081B200000400004081B20000040000409A +:1038400081B200000400004081B20000040000408A +:1038500081B200000400004081B20000040000407A +:1038600081B200000400004081B20000040000406A +:1038700081B200000400004081B20000040000405A +:1038800081B200000400004081B20000040000404A +:1038900081B200000400004081B20000040000403A +:1038A00081B200000400004081B20000040000402A +:1038B00081B200000400004081B20000040000401A +:1038C00081B200000400004081B20000040000400A +:1038D00081B200000400004081B2000004000040FA +:1038E00081B200000400004081B2000004000040EA +:1038F00081B200000400004081B2000004000040DA +:1039000081B200000400004081B2000004000040C9 +:1039100081B200000400004081B2000004000040B9 +:1039200081B200000400004081B2000004000040A9 +:1039300081B200000400004081B200000400004099 +:1039400081B200000400004081B200000400004089 +:1039500081B200000400004081B200000400004079 +:1039600081B200000400004081B200000400004069 +:1039700081B200000400004081B200000400004059 +:1039800081B200000400004081B200000400004049 +:1039900081B200000400004081B200000400004039 +:1039A00081B200000400004081B200000400004029 +:1039B00081B200000400004081B200000400004019 +:1039C00081B200000400004081B200000400004009 +:1039D00081B200000400004081B2000004000040F9 +:1039E00081B200000400004081B2000004000040E9 +:1039F00081B200000400004081B2000004000040D9 +:103A000081B200000400004081B2000004000040C8 +:103A100081B200000400004081B2000004000040B8 +:103A200081B200000400004081B2000004000040A8 +:103A300081B200000400004081B200000400004098 +:103A400081B200000400004081B200000400004088 +:103A500081B200000400004081B200000400004078 +:103A600081B200000400004081B200000400004068 +:103A700081B200000400004081B200000400004058 +:103A800081B200000400004081B200000400004048 +:103A900081B200000400004081B200000400004038 +:103AA00081B200000400004081B200000400004028 +:103AB00081B200000400004081B200000400004018 +:103AC00081B200000400004081B200000400004008 +:103AD00081B200000400004081B2000004000040F8 +:103AE00081B200000400004081B2000004000040E8 +:103AF00081B200000400004081B2000004000040D8 +:103B000081B200000400004081B2000004000040C7 +:103B100081B200000400004081B2000004000040B7 +:103B200081B200000400004081B2000004000040A7 +:103B300081B200000400004081B200000400004097 +:103B400081B200000400004081B200000400004087 +:103B500081B200000400004081B200000400004077 +:103B600081B200000400004081B200000400004067 +:103B700081B200000400004081B200000400004057 +:103B800081B200000400004081B200000400004047 +:103B900081B200000400004081B200000400004037 +:103BA00081B200000400004081B200000400004027 +:103BB00081B200000400004081B200000400004017 +:103BC00081B200000400004081B200000400004007 +:103BD00081B200000400004081B2000004000040F7 +:103BE00081B200000400004081B2000004000040E7 +:103BF00081B200000400004081B2000004000040D7 +:103C000081B200000400004081B2000004000040C6 +:103C100081B200000400004081B2000004000040B6 +:103C200081B200000400004081B2000004000040A6 +:103C300081B200000400004081B200000400004096 +:103C400081B200000400004081B200000400004086 +:103C500081B200000400004081B200000400004076 +:103C600081B200000400004081B200000400004066 +:103C700081B200000400004081B200000400004056 +:103C800081B200000400004081B200000400004046 +:103C900081B200000400004081B200000400004036 +:103CA00081B200000400004081B200000400004026 +:103CB00081B200000400004081B200000400004016 +:103CC00081B200000400004081B200000400004006 +:103CD00081B200000400004081B2000004000040F6 +:103CE00081B200000400004081B2000004000040E6 +:103CF00081B200000400004081B2000004000040D6 +:103D000081B200000400004081B2000004000040C5 +:103D100081B200000400004081B2000004000040B5 +:103D200081B200000400004081B2000004000040A5 +:103D300081B200000400004081B200000400004095 +:103D400081B200000400004081B200000400004085 +:103D500081B20000AE9F00889AB00000AE9F00883C +:103D60009AB00000AE9F00889AB00000AE9F008815 +:103D70009AB00000AE9F00889AB000000000008852 +:103D80009AB00100AE9F414081320000B29F2240B4 +:103D90007B6F00000000194081B20100AE9F00401F +:103DA00081B20000000019417BB30100000000A4B3 +:103DB000C4B30100000000A1C6B3010000002FA29F +:103DC000C8B301000814004049990100A89F004DA4 +:103DD0009ACC0100BB9F2640813200000000004CBD +:103DE00049C10100B99FA2419B500000BF9F808044 +:103DF0008032000000005249FD9301000000004A9B +:103E0000FD930100C29F0042CD9300000000514A83 +:103E1000FD93010000000049FD930100C29F004393 +:103E2000CB9300000000504081B20100D29F0040BF +:103E300019990100000000F09AB001000000004450 +:103E400049D10100000040F080B201000000414D66 +:103E500080B20100CA9F00401999010000004C4047 +:103E600081B201000000004449D10100000000F0CF +:103E70009AB001000000004D10B10000000000E207 +:103E800049B10100000000E343B10100000000E47B +:103E900045B10100000000407BB301000000484F25 +:103EA00040B10100D29F004081B2000004000040F8 +:103EB00081B200000400004081B200000400004014 +:103EC00081B200000400004081B200000400004004 +:103ED00081B20000040000CB81C8010022830040B1 +:103EE000F29300005582004081B20000400500407E +:103EF00081B200001806004081B200002283004019 +:103F000081B20000C682004081B2000043810040BF +:103F100081B200004181004081B20000B8800040C1 +:103F200081B20000F087004081B20000238300408E +:103F300081B200002783004081B20000BF9400409E +:103F400081B200009498004081B200007F9400404C +:103F500081B200007F98004081B200008D95004042 +:103F600081B200001695004081B20000109500401B +:103F700081B20000B182004081B20000209900406F +:103F800081B200000400004081B200000400004043 +:103F900081B200000400004081B200000400004033 +:103FA00081B200000400004081B200000400004023 +:103FB00081B200000400004081B200000400004013 +:103FC00081B200000400004081B200000400004003 +:103FD00081B200000400004081B2000004000040F3 +:103FE00081B200000400004081B2000004000040E3 +:103FF00081B200000400004081B2000004000040D3 +:1040000081B200000400004081B2000004000040C2 +:0440100081B2000079 +:00000001FF diff --git a/trunk/firmware/slicoss/oasisdownload.sys.ihex b/trunk/firmware/slicoss/oasisdownload.sys.ihex new file mode 100644 index 000000000000..82026c2cd957 --- /dev/null +++ b/trunk/firmware/slicoss/oasisdownload.sys.ihex @@ -0,0 +1,5124 @@ +:1000000002000000004000000000010000000000AD +:10001000008000001500004081B200001B0000407D +:1000200081B200002100004081B2000003000040C6 +:1000300081B20000000000A898B001000480A24036 +:10004000FD7F00000900A249DD7D00000000004C9A +:1000500080B2010007000040D1B100000000004C58 +:1000600080B201000900A240757D000060000040E0 +:10007000619901000B00A8B17E3100000900004029 +:1000800081B2000000808F981831000010000098A5 +:1000900080E40100000041988094010000000040CD +:1000A00081B201001000009880E401000E00409829 +:1000B000809400001100004081B200000000004068 +:1000C000A59901001900294081320000190014BCD3 +:1000D000803200000E0093BC8032000000005040CF +:1000E00081B201000080004081B200001000004099 +:1000F000A59901001F002940813200001F0014BC97 +:1001000080320000120093BC80320000000050409A +:1001100081B201000180004081B200002000004057 +:10012000A59901002500294081320000250014BC5A +:1001300080320000140093BC8032000000000049AF +:10014000DD810100120100408132010033010040D5 +:10015000813201002A0014BC80320000FE0013BC72 +:10016000803200005495004045990100FFFF004097 +:10017000E599010000002F4049B101000000004056 +:10018000E1B1010000000040FDB3010000000040AB +:10019000FFB30100330018EE803200000000005071 +:1001A00089B001003200A24189500000990000404E +:1001B000813201003094004043990100000000F8B2 +:1001C00020B10100000000FAE0B30100390098EE10 +:1001D00080320000000000FB80B001003B0080F393 +:1001E000DE33000000000047FD9301003E0083F372 +:1001F00080320000F00000F38088010001800040A0 +:100200002EDD0100009400404399010000000046EB +:1002100043C10100000000FA24B101007C0018EE87 +:1002200080320000450095E880320000FFFF00E8C2 +:10023000808801007C0026408132000000000040E0 +:10024000D5990100000000F2ECB30100000000F8B5 +:10025000D6B1010008000040D5990100000000F06F +:10026000D6B10100FF0000F8EE8B0100080100404C +:10027000D5990100FF0000F0808C0100000000F71C +:100280008194010000000040D6B10100FF0000F899 +:10029000808801003C000040D5990100FF0000F07B +:1002A000D68D0100FFFF00F0F0DB010000000048E8 +:1002B00081E00100000000F8819401003C01004051 +:1002C000D599010000000040D6B10100FF0000F800 +:1002D000808801000000004881E00100000000F873 +:1002E000819401003C020040D599010000000040CB +:1002F000D6B101002C000040D5990100000000F8A3 +:10030000D6B101001E0000F082F40100FF3F00F8AA +:1003100080D80100640026408132000000000041C6 +:1003200081D00100FFFF004080D8010000000041A3 +:100330008094010000000040D8B10100680022FA5A +:10034000803000000000004C81E00100010000400E +:1003500080CC010000000040DEB10100000100403F +:10036000D5990100100000FA80E40100000000F6B9 +:100370008194010000000040D6B10100000200405D +:10038000D5990100100000FA80E40100000000F699 +:100390008194010000000040D6B101000600004039 +:1003A000D5990100100000FBD6E5010007000040D0 +:1003B000D5990100180000FBD6E501004800004077 +:1003C000D5990100100000FAD6E501005000004068 +:1003D000D5990100100000FBD6E50100030000FBE9 +:1003E0007A890100000000F0DCB101007C00004CC3 +:1003F000DD9100007C0095E88430000000002FE9CA +:10040000FAB3010000000040D1B10100FF0000423A +:10041000808801003400004080CE01007C00A640AE +:1004200081320000850000408132010002802240BC +:10043000803200007C00004081B200000000004FCC +:1004400081B001008E0009F9813200008C0008F9AA +:100450008132000098001FFDF93300008B009EFDE3 +:10046000813200000000004AF39301000000804840 +:10047000F3930100000000FDF7B301000000804984 +:10048000F3930100000000FC19B1010093000AF988 +:1004900081320000000040FB81B20100000041FDFC +:1004A00081B20100000780F9F38F0100000742F9D3 +:1004B000F38F01009700A2FFF76F00000000434098 +:1004C00081B201000000A2FFFBEF0000000080FCF1 +:1004D000E1B101000000804081B0010000940040C3 +:1004E00047990100BB000040813201000000A24694 +:1004F000FD7F01000094004047990100CE000040BC +:10050000813201000000A244FD7F01000094004000 +:100510004599010000000040F1B10100FF7F00405B +:10052000F5990100FF7F0040F59901009A13004002 +:10053000F599010007000040F59901000100004015 +:10054000F599010000020040F59901000200004009 +:10055000F599010000020040F599010003010040F7 +:10056000F599010000000040F59901009A13004040 +:10057000F59901000B000040F59901008000004052 +:10058000F599010000000040F599010000000040CD +:10059000F599010007000040F599010008000040AE +:1005A000F5990100B0020040F599010000000040FB +:1005B000F599010000000040F59901000229004072 +:1005C000F599010000000040F59901000067004026 +:1005D000F599010000000040F599010080000040FD +:1005E000F599010000008040F599010000000045E8 +:1005F000FD83010000000046FD830100FF7F0040F5 +:1006000025990100C4000040813201000000A2448D +:1006100080B2000000000045FD930100E2000040B0 +:10062000833001000000A2458032010000008046B6 +:10063000FD9301000010004083980100DD000040A0 +:100640002B3101000000A24688B0000000000041EC +:1006500089B00100000000948CB00100FFFF00464B +:1006600080880100A5A5A24080CE000000000048BF +:100670008DF00100C90082418940000000008040E7 +:1006800089B0010000000044FD830100D400004057 +:10069000813201000000A24480B20000E2000008A4 +:1006A000833001000000A245803201000000804438 +:1006B000FD93010000300008839801008000004095 +:1006C0002B990100DB000040893001000000A246A8 +:1006D00080B20000FFFF009480880100A5A5A24021 +:1006E000804E01000000804389B001000384004176 +:1006F0002C990100DE00004081B200000388004117 +:100700002C990100000000208DB0010000009F9690 +:1007100080B20000DF00A2418D5000000000804048 +:1007200081B20100FF7F0040259901000000004CCC +:1007300089E00100DD000044821401000000909473 +:100740008AB0000000000045F0B101001000004533 +:1007500088F401000000004489D00100DD0000445D +:100760002B410100EC00084180320000ED000094B4 +:1007700024B100001000009424F501000000009452 +:10078000F0B10100F200A04489500000DD000044F7 +:100790002B41010000000094F0B10100EF00204463 +:1007A000895000001000004588F40100000000FAA4 +:1007B0008AB001000000A34289D00000F700A0FA2F +:1007C0008A400000000000418BC00100F500A342F8 +:1007D00089500000FFFF0045888801001000004597 +:1007E0008AF40100FC0090448A40000000000041AF +:1007F0008BC00100FFFF00458AA801000000805067 +:100800008BE00100FF7F0040259901007C00004043 +:100810002B9901000030004083980100DD000008A2 +:1008200083140100000000942AB101000080004000 +:10083000F99B0100DD0000FC19310100000040942B +:1008400080B20100DD0000442B4101000000419412 +:1008500080B2010000000041F9C301000000004423 +:100860002BC1010004019F948032000002800040EF +:1008700081B200001001005193B000001001004D42 +:1008800093B000001001004993B000000000004246 +:1008900093B001001001A24193500000000080407D +:1008A00081B201000000104081B20100000011403F +:1008B00081B201000000124081B20100000013402B +:1008C00081B201000000144081B201000000154017 +:1008D00081B201000000164081B201000000174003 +:1008E00081B201000000184081B2010000001940EF +:1008F00081B2010000001A4081B2010000001B40DB +:1009000081B2010000001C4081B2010000001D40C6 +:1009100081B2010000001E4081B2010000001F40B2 +:1009200081B201000000704081B2010000007140FE +:1009300081B201000000724081B2010000007340EA +:1009400081B201000000744081B2010000007540D6 +:1009500081B201000000764081B2010000007740C2 +:1009600081B201000000784081B2010000007940AE +:1009700081B2010000007A4081B2010000007B409A +:1009800081B2010000007C4081B2010000007D4086 +:1009900081B2010000007E4081B2010000007F4072 +:1009A00081B201000000804081B2010000040040DB +:1009B000A199010000000050A1D1010000000040F9 +:1009C0001BB001000000004019B001000000004011 +:1009D00017B001000000004015B001000000004009 +:1009E00013B001000000004011B001000000004001 +:1009F0000FB00100000000400DB0010000000040F9 +:100A00000BB001000000004009B0010000000040F0 +:100A100007B001000000004005B0010000000040E8 +:100A200003B001000000004001B001003B0120487C +:100A3000A15100000000804081B201004701224B1B +:100A4000747D00000000804081B201006000004B16 +:100A500060990100000000B17EB101004801A8408A +:100A6000813200004501004081B200000500804055 +:100A700097980100180000AA9688010000008043A2 +:100A800097F00100070000AA96880100000080404E +:100A900081B201000000005807900100D89F00407B +:100AA00081B2000000000044A5B30100D80200405C +:100AB00081320100F8020040813201000000005C38 +:100AC00007900100D89F0040BFB300005A0122CC1C +:100AD000857F00000000005107900100D89F004072 +:100AE00081B200000000004049B10100AE0300CB1C +:100AF000A3C90100D0140040A19B01000000002008 +:100B000046B1010000000048F1B10100000000D032 +:100B1000F1B10100000000CAF1B10100000000D5F0 +:100B2000E1B10100070000406199010020000020B0 +:100B300062DD01006301A84081320000000000CCAA +:100B400085930100F802004081320100D01400407A +:100B500043990100000000FABAB30100000000FA56 +:100B6000A4B30100000000F8BCB3010000142F4042 +:100B700081B00100000000E7A7B30100000000D829 +:100B8000A9B30100FF0000DD8188010002000040E0 +:100B900080F401007301004080C80100860100DD7F +:100BA000813200000000004010B1000087010040C9 +:100BB00081B200008801004081B20000890100403C +:100BC00081B200008A01004081B200008B01004028 +:100BD00081B200008D01004081B200008F01004011 +:100BE00081B200005001004081B20000B601004017 +:100BF00081B200005001004081B20000C4010040F9 +:100C000081B20000C501004081B2000082020040B4 +:100C100081B200008302004081B22800B802004087 +:100C200081B22800D49F004081B22800D59F0040A7 +:100C300081B22800D69F004081B22800D79F004093 +:100C400081B228007201004181C02800550151493C +:100C5000FD9328005501524AFD932A00550155493C +:100C6000FD832A005501564AFD832A0050019181D7 +:100C700080302A005501454081B22A0050019182FE +:100C800080302A005501464081B22A000000004011 +:100C900089B02B0000002F4081B0010000140040FB +:100CA00049990100B30122DEE16D00000000004C13 +:100CB00049C101000000004181C001009201A2442D +:100CC000816C00000000004C49D101009A012240D3 +:100CD000E16D00009601A2418150000050010041E9 +:100CE000BFB3000000000042BFB301005001A00FDD +:100CF000BD6F0000000000DEE1B101000000004413 +:100D000049C10100B50100401999010000004240AD +:100D100081B20100000043FF85B00100000000DE49 +:100D200019B10100000042FF87B00100000043FF3D +:100D3000E1B101000000004449C1010000002FFFA3 +:100D4000E1B10100081400A480CC0100AA012640F2 +:100D5000813200000000004185C00100A801A24CC2 +:100D600081500000B40122D281320000AF01224143 +:100D7000A56F00005001A2E081320000000000D207 +:100D8000C1B301000000005C8990010000004042F6 +:100D900080B201000000414380B20100000000F079 +:100DA0008894010055010044E0B10000B101004801 +:100DB00049C10000AF01005B89900000A89F00A01E +:100DC0009EB000000000004083B00100001400400D +:100DD000499901000000234081B00100BE0122DEDC +:100DE000E16D00000000004C49C10100000000411D +:100DF00081C00100B901A244816C00005001004390 +:100E0000BFB30000000000F818B10100000040F876 +:100E100080B20100000041F080B2010000000040FB +:100E2000F1B1010000000040F1B1010055010040A6 +:100E3000E1B10000C601004091B000000000004197 +:100E400091B00100D0142E4049B1010005000040CE +:100E5000A39B0100080000DD81F40100CB010040EC +:100E600080C801000000004010B10000D101004026 +:100E700081B00000530100DEA1B30000E301004097 +:100E800081B20000E501004081B00000EB010040AC +:100E900081B20000520100DFE1B10000000000D08B +:100EA000BAB30100000000DEA1B10100020000D2CF +:100EB000A5E70100000000D2C1B30100000000005E +:100EC000F0B10100DB012244C1530000DA0184418A +:100ED00081400000DE01004081320100000000D0AE +:100EE00045B10100D5010041A1C10000DA02004076 +:100EF00081320100F802004081320100550100DD1D +:100F0000A1B100000000004081B00100400000409D +:100F1000A59B0100DA02004081320100400000D3AD +:100F2000A7CB0100F80200E0A5B3000003000040D9 +:100F3000A39B0100530100DEA1B3000000000044A8 +:100F4000BFB30100000000DE819001005001A2BA91 +:100F500080040000600000DE61990100E801A8B192 +:100F60008030000052010040E0B10000000000D0DD +:100F7000BAB301006B020040819801006002004D8D +:100F80008330010000000044E1B301000000004490 +:100F9000E3B3010000000044E5B301000000004499 +:100FA000E9B3010000000044EBB30100000000447D +:100FB000F5B3010000000044F7B301000000004455 +:100FC000F9B30100F90122408F6F00007802004060 +:100FD00081980100600200C7833001008002004058 +:100FE000819801006002004283300100000000E8A7 +:100FF000F1B10100000000E9F1B10100000000EAD8 +:10100000F1B10100000000EBF1B10100000000852A +:10101000F0B10100000000ECF1B10100000000EDB2 +:10102000F1B10100000000B2F0B10100000000A920 +:10103000F0B10100000000ACF0B10100000000AB15 +:10104000F0B10100000000B8F0B10100000000B9EB +:10105000F0B10100000000BAF0B10100000000BBD7 +:10106000F0B101000C02B8408130000000000040E7 +:10107000819001000E02B940813200000000004161 +:10108000819001001002BA4081320000000000424D +:10109000819001001202BB40813200000000004339 +:1010A000819001001402BC40813200000000004425 +:1010B000819001001602BD40813200000000004511 +:1010C000819001001802BE408132000000000046FD +:1010D000819001001A02BF408132000000000047E9 +:1010E000819001001C02C8408132000000000048CD +:1010F000819001001E02C9408132000000000049B9 +:10110000819001002002CA40813200000000004AA4 +:10111000819001002202CB40813200000000004B90 +:10112000819001002402CC40813200000000004C7C +:10113000819001002602CD40813200000000004D68 +:10114000819001002802CE40813200000000004E54 +:10115000819001002A02CF40813200000000004F40 +:10116000819001002C02F04081320000000000500C +:10117000819001002E02F1408132000000000051F8 +:10118000819001003002F2408132000000000052E4 +:10119000819001003202F3408132000000000053D0 +:1011A000819001003402F4408132000000000054BC +:1011B000819001003602F5408132000000000055A8 +:1011C000819001003802F640813200000000005694 +:1011D000819001003A02F740813200000000005780 +:1011E000819001003C02F84081320000000000586C +:1011F000819001003E02F940813200000000005958 +:10120000819001004002FA40813200000000005A43 +:10121000819001004202FB40813200000000005B2F +:10122000819001004402FC40813200000000005C1B +:10123000819001004602FD40813200000000005D07 +:10124000819001004802FE40813200000000005EF3 +:10125000819001004A02FF40813200000000005FDF +:101260008190010000000040F0B10100400000400A +:10127000A59B0100D802004081320100F802004025 +:1012800081320100D0142E06A5B30100400000D326 +:10129000A7CB0100000000F0F1B10100000000F157 +:1012A000F1B10100000000F2F1B10100000000F412 +:1012B000F1B10100000000F5F1B10100000000FAF9 +:1012C000F1B10100000000FBF1B10100000000FCE1 +:1012D000F1B10100000000EBF1B10100000000EEEF +:1012E000F1B10100000000EFF1B10100000000F3D6 +:1012F000F1B10100000000F6F1B10100000000FDB5 +:10130000F1B10100DB0100C7E1B100000000804045 +:1013100081B20100660200488032000000005140A6 +:101320001AB1010000004D4081B2010000004540AB +:1013300081B201006302A241835000005F02494074 +:1013400081B20000000052401CB1010000004E407C +:1013500081B201000000464081B201006802A24152 +:10136000835000005F024A4081B20000000000A0EC +:101370009EB0010000000080D8B30100000000A171 +:10138000D0B30100000000A2D2B30100000000A40D +:10139000D4B30100000000D0D6B30100000000D19A +:1013A000DCB30100000000D2DEB3010000000088C1 +:1013B000DAB30100000000D48EB30100000000D3B6 +:1013C000E6B30100000000ACECB30100000000999E +:1013D000FAB30100000000D5E0B30100000000D521 +:1013E000E2B30100000000D5E4B30100000000D525 +:1013F000E8B30100000000D5EAB30100000000D509 +:10140000F4B30100000000D5F6B30100000000D5E0 +:10141000F8B30100000000C7A9B101000000004FAF +:1014200040B101008402004091B000000000004182 +:1014300091B0010007000040A39B0100080000DDFF +:1014400081F401008802004080C8010000000040D3 +:1014500010B100008D02004081B2000098020040EF +:1014600081B2000098020046A3B300009B02004036 +:1014700081B20000A102004081B200008F0223501F +:10148000A56F000000000050A5B30100E802004273 +:10149000A5630100F802004081320100D0142D4004 +:1014A00049B10100000000D0BAB30100000000DE25 +:1014B000A1B10100000000F800B001009702224431 +:1014C000A553000094020041A1C10000550100DDB8 +:1014D000A1B10000E80200DEA1330100F8020040E3 +:1014E000813201005501004081B20000000000453A +:1014F000BFB301005001A2D2777D0000000000D2EE +:1015000061B10100000000DE63B101009E02A8404D +:10151000813200005501004081B20000E802005411 +:10152000A5330100F802004081320100D0142D40A3 +:1015300049B10100000000F8D0B30100000000F83C +:10154000D2B30100000000F8D4B30100000000F89D +:10155000D6B30100000000F808B10100AC02004061 +:10156000819801006002004683300100550100406F +:1015700081B20000000000A09EB00100000000E861 +:1015800043B10100000000E945B10100000000EA9C +:1015900049B10100000000EBA1B101000000004FC3 +:1015A00040B101000400004081B20000040000408E +:1015B00081B200000400004081B20000040000403D +:1015C00081B200000400004081B20000040000402D +:1015D00081B20000D0142E4049B101000500004046 +:1015E000A39B010000000040C1B30100080000DD22 +:1015F00081F40100BD02004010C90000C3020005D3 +:1016000081B000005001004081B20000CB02000513 +:1016100081B000005001004081B20000D0020044BF +:10162000A5B30000D2020044A5B3000002000040B0 +:10163000A4E70100000000E081B10100FFFF00C14C +:10164000F0890100C802224181500000C40200411B +:10165000C1C30000DA02004081320100F8020040FC +:10166000813201005501004081B2000002000040BB +:10167000A4E70100000000E091B10100FFFF00C9F4 +:10168000F0890100C802224181500000CC020041D3 +:10169000C1C30000FFFF00DE85890100C80200C24F +:1016A000E0B10000FFFF00DE95890100C80200CA1A +:1016B000E0B100000400004081B2000004000040DE +:1016C00081B200000400004081B20000040000402C +:1016D00081B20000000000E7A7B30100000000D8BD +:1016E000A9B301000000004049B10100AE0300CBE6 +:1016F000A3C901000000002046B10100000000D293 +:10170000F1B10100000000D3F1B10100000000D4EC +:10171000F1B10100000000D0E1B10100000000D1F2 +:1017200061B101002000002062DD0100E202A8405A +:1017300081320000000080CC85930100040000404D +:1017400081B200000400004081B2000004000040AB +:1017500081B20000000000E7A7B30100000000D83C +:10176000A9B301000000004049B10100AE0300CB65 +:10177000A3C901000000002046B10100000000D212 +:10178000F1B10100000000D0F1B10100000000D370 +:10179000F1B10100E10200D4E1B100000400004019 +:1017A00081B200000400004081B20000040000404B +:1017B00081B200000400004081B20000040000403B +:1017C00081B200000400004081B20000040000402B +:1017D00081B200000000A2CC85FF00000000005094 +:1017E00081B00100FA02A24181500000F902A2F288 +:1017F00080300000000080CC8583010004000040A0 +:1018000081B200000400004081B2000004000040EA +:1018100081B20000B5030040A199010000002F41F2 +:1018200099B301000A032244816C0000120322488C +:10183000816C00000C03224C816C000016032250C6 +:10184000816C000017032254816C00001903225898 +:10185000816C00001E03225C816C0000500100407E +:1018600081B20000000000BC09B00100DD9F00CA89 +:1018700001B000000000004003B001000000004182 +:10188000F38301001003A242056C00000000004138 +:1018900005B00100DD9F22CA07140000DD9F00454E +:1018A000F3930000DD9F2043956F0000DD9F80CA09 +:1018B00005300000DD9F220180300000DD9F00CB5D +:1018C000DB910000570100BCABB30000000000BC7E +:1018D000B1B30100DD9F00CACFB30000FF0000CA12 +:1018E00081880100DD9FA240747D000060002040DF +:1018F000609901001B03A8B1823000001A03004068 +:1019000081B20000DD9F00CA79B3000004000040EE +:1019100081B200000000004E81B0010000000043D1 +:10192000CB8301000000454081B201002203A241A7 +:10193000815000000000454081B201000000454098 +:1019400081B201002D039182823000000000008AE4 +:1019500080B00100AE9F004080CE01002B03A64066 +:10196000813200002D03564081B20000B5030040D3 +:10197000A19901000000005307900100B503004049 +:10198000A19901000000005207900100D89F00417A +:101990008BB300000000004E81B001000000004247 +:1019A000CD8301000000464081B201003203A24114 +:1019B000815000000000464081B201000000464016 +:1019C00081B201003D039181823000000000008956 +:1019D00080B00100AE9F004080CE01003B03A640D6 +:1019E000813200003D03554081B20000B503004044 +:1019F000A19901000000005207900100B5030040CA +:101A0000A19901000000005307900100D89F0041F8 +:101A10008BB30000B0030040A1990100C4142F4013 +:101A200099B301005701004049B100000400004093 +:101A300081B200000400004081B2000004000040B8 +:101A400081B200000400004081B2000004000040A8 +:101A500081B200003094004043990100009000F8EA +:101A600080980100100000F288E40100200000408E +:101A7000209901000000005F239101004D031F9198 +:101A80008032000030000040209901000000005F1B +:101A90002391010050031F9180320000400000405C +:101AA000209901000000005F2391010053031F9162 +:101AB000803200000000005F2391010055031F9158 +:101AC000803200000008804020990100040000409E +:101AD00081B200000000004784B001000000A2486D +:101AE000848400000000005F61B101000000005C20 +:101AF0008F9001000000004762B101005A03A84026 +:101B000081320000000800478EC801005803005CC5 +:101B10008F800000E00000406199010058152D40C1 +:101B20008DB00100D0142DF088B00100000000FA43 +:101B30008AB001000000004581B0010007000045A7 +:101B400082880100000000438BF001000000004883 +:101B500083E0010000000046829401002000004163 +:101B600060990100000000418DC001007403225FF4 +:101B70008D6C00006503A2418150000063030040AA +:101B800081B2000008000040859801000000004478 +:101B900082B001000000004186B00100001C00433B +:101BA00086D801000000A641855001007003004165 +:101BB00083E000006E030040813201000000004815 +:101BC00085E00100D0142F468494010020000042DB +:101BD00060990100C0000040619901000000804050 +:101BE00081B201000400004081B200000400004006 +:101BF00081B200000400004081B2000004000040F7 +:101C000081B200000400004081B2000004000040E6 +:101C100081B20000070000458088010000000043F9 +:101C20008BF0010000040040839801008503A0416F +:101C3000815000008303004182E8000000008041E1 +:101C40008EC001000400004081B20000040000408A +:101C500081B200000000004049B1010000020040D4 +:101C600083980100003900404599010000000040C0 +:101C7000F1B101008B03A24183500000000000403D +:101C800085B001000B00004482F401001A1500A683 +:101C900086B0010070150040459901000008004021 +:101CA000F199010000000042F0B10100003900404C +:101CB000E1990100040000406199010070150043A2 +:101CC000629901009503A840813200009703225ACF +:101CD000737D00007A000040619901009803A8B16B +:101CE0007E3100000008004284C801009003A24138 +:101CF000835000000000804081B2010004000040D9 +:101D000081B200000400004081B2000004000040E5 +:101D100081B2000058152D408DB00100D0142DF077 +:101D200088B00100000000408FB00100010000A653 +:101D300090B0010000F800489098010000000045B4 +:101D400093B00100000000FA8AB001008003004057 +:101D500081320100020000A680B00100AC032240E5 +:101D6000826C0000B0030040813201005803004043 +:101D700081320100000000418DC00100B503225FE7 +:101D80008D6C0000A703A24193500000A503004002 +:101D900081B20000FF070047848801000000A640D0 +:101DA00081B20000ED9F0047803001000002004733 +:101DB0008EC80100B003004081B200000000004462 +:101DC00050B30100BB032018896C0000040000A67A +:101DD00084B00100200000A686B001000010004081 +:101DE000559B0100BE03004081B20000040000A624 +:101DF00084B00100200000A686B001000010004061 +:101E0000559B01000000004250D30100000000A8D3 +:101E10004FB30100000000434ED301006E030040A9 +:101E2000813201008203004280300100B003004093 +:101E300081320100C70322A78F6C00005A030040C3 +:101E400081320100C403004081B2000000008040E4 +:101E500081B20100C8142EBB85B00100000000EE65 +:101E600082B0010000000041E0B10100000000A2CA +:101E7000A0B3010000000044A5B30100E19F00CA27 +:101E8000A7330100E09F004081B200000400004041 +:101E900081B20000D6032242756F0000D8032241B0 +:101EA000756F0000DA031ECA81320000DC031FCA0E +:101EB00081320000000000CAC9B10100DD9F00426C +:101EC00075B30000000000CACDB10100DD9F0041E4 +:101ED00075B30000000000CACFB10100DD9F0040D3 +:101EE00075B30000008100A6C6B10100DD9F00406F +:101EF00081B20000008000A6C6B10100DD9F004055 +:101F000075B300000400004081B2000004000040EE +:101F100081B200004501004D933001004501004EA3 +:101F2000933001004501004C93300100EC9F0040CC +:101F300081320100DD9F004081B2000004000040BA +:101F400081B200000400004081B2000004000040A3 +:101F500081B200005495004045990100DD9F00CA00 +:101F6000E5B100000400004081B200000400004020 +:101F700081B200000400004081B200000400004073 +:101F800081B200000400004081B200000400004063 +:101F900081B20000CC142E4087B00100000000A2E6 +:101FA000A0B3010015040043B2330100000068DA59 +:101FB00089B001007C0000408B98010000000050B7 +:101FC00089F001000000004189D0010003000044B5 +:101FD000888C01000000004487C00100000000411F +:101FE000A5B3010015040043B2330100000000DA7C +:101FF000F1B101000000004487C001000000004171 +:10200000A5C301000B042244895000000B042244A4 +:102010008B500000FA03A250A56F000000000042A0 +:10202000A5E30100000000CAA7B30100E19F00BBC7 +:1020300085300100CC142ED295C30100AE0300CB35 +:10204000A3C901000000002042B1010000000050BF +:1020500081B001000804A241815000000704A2F2EF +:1020600080300000FA030040A5B3000000000042E9 +:10207000A5E30100000000CAA7B30100E19F00BB77 +:1020800085300100E09F004081B200000400004064 +:1020900081B20000000000D92BB101000010004007 +:1020A00083980100DB00004081320100FFFF0094B3 +:1020B000B48B01000000804081B20100000000D913 +:1020C0002BB101000010004083980100DD000040AA +:1020D0008132010000008094B4B30100040000408C +:1020E00081B200000400004081B200000400004002 +:1020F00081B200000400004081B2000004000040F2 +:1021000081B200000400004081B2000004000040E1 +:1021100081B20000000000D92BB10100000000DAFC +:1021200027B1010006C000402D990100DE000040EB +:1021300081320100001000408398010002C4004178 +:102140002C990100DE000040813201000040004077 +:1021500083980100058200412C990100DE000040B7 +:10216000813201002D048094803200000C01004077 +:10217000813201002804004081B200000480004048 +:102180002D990100DE0000408132010000008040F6 +:1021900081B201003104001210C9000000488040E3 +:1021A0000B980100C04980400B980100804B804093 +:1021B0000B980100404D80400B980100004F80407B +:1021C0000B980100C05080400B9801008052804065 +:1021D0000B980100405480400B980100005680404D +:1021E0000B980100C05780400B9801008059804037 +:1021F0000B980100405B80400B980100005D80401F +:102200000B980100C05E80400B9801008060804008 +:102210000B980100406280400B98010000648040F0 +:102220000B980100C06580400B98010080678040DA +:102230000B980100406980400B980100006B8040C2 +:102240000B980100C06C80400B980100806E8040AC +:102250000B980100407080400B9801000072804094 +:102260000B980100C07380400B980100807580407E +:102270000B980100407780400B9801000079804066 +:102280000B980100C07A80400B980100807C804050 +:102290000B980100407E80400B9801000400004034 +:1022A00081B200000400004081B200000400004040 +:1022B00081B200000400004081B200000400004030 +:1022C00081B200000400004081B200000400004020 +:1022D00081B200005904001210C900000080804043 +:1022E0000B980100008280400B9801000084804020 +:1022F0000B980100008680400B9801000088804008 +:102300000B980100008A80400B980100008C8040EF +:102310000B980100008E80400B98010000908040D7 +:102320000B980100009280400B98010000948040BF +:102330000B980100009680400B98010000988040A7 +:102340000B980100009A80400B980100009C80408F +:102350000B980100009E80400B98010000A0804077 +:102360000B98010000A280400B98010000A480405F +:102370000B98010000A680400B98010000A8804047 +:102380000B98010000AA80400B98010000AC80402F +:102390000B98010000AE80400B98010000B0804017 +:1023A0000B98010000B280400B98010000B48040FF +:1023B0000B98010000B680400B98010000B88040E7 +:1023C0000B98010000BA80400B98010000BC8040CF +:1023D0000B98010000BE80400B98010004000040F3 +:1023E00081B200000400004081B2000004000040FF +:1023F00081B200000400004081B2000004000040EF +:1024000081B200000400004081B2000004000040DE +:1024100081B200000000004087B1010000000040D0 +:1024200097B001000000004B80B10100010000A640 +:1024300082B1010082048541974000000000004005 +:1024400097B101000000004097B001000000004B70 +:1024500090B10100010000A692B1010087048541FE +:10246000974000000000804081B20100040000405D +:1024700081B200000400004081B20000040000406E +:1024800081B200000400004081B20000040000405E +:1024900081B2000090046040813200000000001210 +:1024A00080B10100FFFFF04B82890100930460407E +:1024B000813200000000004A80B101000100F0A656 +:1024C00082B101009604604081320000FFFF004BA2 +:1024D000848901000000F0C224B001000000004A1D +:1024E00090B10100FFFF804B928901000000004A7B +:1024F00090B10100010080A692B10100FFFF004BE6 +:1025000094890100000080CA94B0010004000040DA +:1025100081B200001000004E98E4010000000007A6 +:10252000989401000000004399E001000000008041 +:10253000989401000000004999E001000000004C5F +:1025400088940100A604474081320000AD04222097 +:10255000876F000000001F4081B2010000000040B2 +:1025600081B201000000004081B201000000004083 +:1025700081B20100A604004081B2000000001F806B +:1025800086B30100B004224F777D0000C0040040F4 +:10259000813201000000004F61B1010000000044E1 +:1025A00062B10100B104A84081320000B804224B9E +:1025B000897C0000B604224F777D0000C0040040F3 +:1025C000813201000000004562B10100B604A8405C +:1025D000813200000000802087B301000400004029 +:1025E00081B200000400004081B2000004000040FD +:1025F00081B200000400004081B2000004000040ED +:1026000081B200000400004081B2000004000040DC +:1026100081B200000000005099B001006F0000403E +:1026200061990100C104A8B152330000C604224BD5 +:10263000537F00006F00004061990100C404A8B1FD +:102640007E310000C104A241995000000000A24F59 +:1026500077FD00000400004081B20000040000404B +:1026600081B200000400004081B20000040000407C +:1026700081B200000400004081B20000040000406C +:1026800081B200000400004081B20000040000405C +:1026900081B200001000004E98E401000000000725 +:1026A000989401000000004399E0010000000080C0 +:1026B000989401000000004899E00100D604004C05 +:1026C00088940000D604474081320000DD042220B7 +:1026D000876F000000001F4081B201000000004031 +:1026E00081B201000000004081B201000000004002 +:1026F00081B20100D604004081B2000000001F80BA +:1027000086B30100E004224F777D0000F004004012 +:10271000813201000000004F61B10100000000445F +:1027200062B10100E104A84081320000E804224ABD +:10273000897C0000E604224F777D0000F004004011 +:10274000813201000000004562B10100E604A840AA +:10275000813200000000802087B3010004000040A7 +:1027600081B200000400004081B20000040000407B +:1027700081B200000400004081B20000040000406B +:1027800081B200000400004081B20000040000405B +:1027900081B200000000005099B001006F000040BD +:1027A00061990100F104A8B152330000F604224AF5 +:1027B000537F00006F00004061990100F404A8B14C +:1027C0007E310000F104A241995000000000A24FA8 +:1027D00077FD00000400004081B2000004000040CA +:1027E00081B200000400004081B2000004000040FB +:1027F00081B200000400004081B2000004000040EB +:1028000081B200000400004081B2000004000040DA +:1028100081B200007B000040619901000005A8B171 +:102820008030000012051D4080320000401800403A +:1028300049990100040000A686B001001005A240DD +:1028400086040000DE9F9C4080320000FFFF0040B5 +:1028500088880100300500504731010036000044EF +:1028600088CC01000C055240813200003005004048 +:10287000473101000000004189B0010030050048E7 +:10288000473101003005000547310100DE9F00405F +:1028900081B200002800004047991B00DE9F0041E4 +:1028A000E1C11A007818004049991B00190522540B +:1028B000817C1A001405424081321A00008200B364 +:1028C00067DF1B0000001A4493931B0028000040A0 +:1028D00047991B00300500418930010027050F4052 +:1028E00080320000FF7F00408888010030050050E2 +:1028F000473101003600004488CC01001F05994093 +:10290000803200000000004889D0010021059B4072 +:10291000803200000000004C89D0010023051F44D4 +:1029200080320000300500404731010000000041C6 +:1029300089B00100300500484731010030050058DA +:1029400047310100DE9F004081B2000010000040CE +:1029500086F401006F00004386880100DE9F260593 +:10296000473100003005004189300100DE9F004002 +:1029700081B200000400004081B200000400004069 +:1029800081B200000400004081B200000400004059 +:1029900081B200000000A044F041010000000040AE +:1029A00081B2010000008041E1C10100040000404B +:1029B00081B200000400004081B200000400004029 +:1029C00081B200000400004081B200000400004019 +:1029D00081B200004C010007913001000000A240CC +:1029E00097EC00000000800591C001000400004049 +:1029F00081B200000400004081B2000004000040E9 +:102A000081B200000400004081B2000004000040D8 +:102A100081B200004C010040813201004405A24017 +:102A2000976C00003A000040B39B01004505004050 +:102A300081B2000040000040B39B01001004004040 +:102A400081320100000000DAF5B1010010040042FB +:102A5000B3430100000000DAF5B1010010040042A8 +:102A6000B3430100000000DAF5B101004E00004060 +:102A7000B39B01001004004081320100080000DA1D +:102A8000F7F5010050000040919801000000004758 +:102A90008FB0010010040048B2330100000000DADA +:102AA000F7B10100080000DAF7F50100000000426C +:102AB00091C001005005A2418F500000000000416C +:102AC00045D1010008000040B39B01001004004004 +:102AD00081320100000000DAFDB101000A0000406F +:102AE000B39B01001004004081320100000000DAB5 +:102AF000FDB101001A000040B39B0100100400402A +:102B000081320100000000DAFDB101001800004030 +:102B1000B39B01001004004081320100000000DA84 +:102B2000FDB1010038050040813201001E0000485F +:102B3000B2CB01001004004081320100000000DA35 +:102B400091C0010000000048B2CB01001004004019 +:102B50008132010000006EDA8FB0010002000048EF +:102B6000B2CB01001004004081320100000000DA05 +:102B7000FDB1010004000048B2CB01001004004088 +:102B800081320100000080DAFDB101000400004044 +:102B900081B200007A052245FD7F0000401600400A +:102BA00045990100DB9F00404931010008000048C1 +:102BB000B2CB010015040040813201007805A2402B +:102BC0008F6C00007D052220B56F00007A05004063 +:102BD00081B20000DA9F004081321F007D05224053 +:102BE000976C1E007A05424081321E000000004FA3 +:102BF00067931F00DF9F005867931E005416004024 +:102C000047991F00000000FEF4B11F0000000040C3 +:102C100081B21F00000000FEF4B10100000000407E +:102C200081B20100000000FEF4B10100000000408C +:102C300081B20100000000FEF4B10100000000407C +:102C400081B20100000000FEF4B10100000000406C +:102C500081B20100000000FEF4B10100000000405C +:102C600081B20100000000FEF4B101004600004006 +:102C7000B39B01001004004081320100080000DA1B +:102C8000F7F501004800004095980100000000445D +:102C900097B001001004004AB2330100000000DACE +:102CA000F7B10100080000DAF7F50100000000426A +:102CB00095C001009005A241975000002A000040F5 +:102CC000A59B010040160040A19B0100000000CA26 +:102CD000A7B30100E19F00BB85300100E09F0040E9 +:102CE00081B200000400004081B2000004000040F6 +:102CF00081B200000400004081B2000004000040E6 +:102D000081B200000400004081B2000004000040D5 +:102D100081B20000B8052245FD7F0000E0150040AB +:102D2000479901001A0000A280DC01000000005059 +:102D3000F1B10100F0150040F1990100000000CA56 +:102D4000F1B101000700004061990100200000403E +:102D500062DD0100A705A8BBE131000000000050C2 +:102D600083B00100AA05A24183500000A905A2F288 +:102D7000823000004C01004081320100B005A240C9 +:102D8000976C00003A000040B39B0100B105004081 +:102D900081B2000040000040B39B0100F0150040EC +:102DA000439901001004004081320100B805A2FAE5 +:102DB000B46F000010040042B3430100B805A2FA4A +:102DC000B46F000010040042B3430100BB0522FAB7 +:102DD000B46F0000B8054240813220000000004E70 +:102DE00067932100DF9F0058679320004016004042 +:102DF00045992100DB9F004049312100F615004034 +:102E0000439921005C1600404599210000006EFAAC +:102E10008EB021000000004081B20100000000FEE1 +:102E2000F4B101000000004081B20100000000FE8A +:102E3000F4B101000000004081B20100000000F088 +:102E4000B4B30100C905A2408F6C0000FC1520201E +:102E5000E1B10100CE05004081B22400DA9F0040BC +:102E600081322500CE052240976C2400CB054240DC +:102E7000813224000000004F67932500DF9F005837 +:102E80006793240038050040813225001E00004869 +:102E9000B2CB25001004004081320100D30522503E +:102EA000B56F00000000005091C001000000004814 +:102EB000B2CB0100F615004043990100200400F256 +:102EC000B433010002000048B2CB0100F815004005 +:102ED00043990100200400F2B433010004000048CB +:102EE000B2CB0100FA15004043990100200400F222 +:102EF000B433010008000048B2CB0100FC150040CB +:102F000043990100000000F094B00100FFFF004A67 +:102F1000B48B010020040040813201000A00004807 +:102F2000B2CB01001000004AB4F7010020040040B9 +:102F30008132010038050040813201001E00004846 +:102F4000B2CB01001004004081320100E90522509B +:102F5000B56F0000EA050050B5B300000000004066 +:102F6000B5B301002004004081320100E09F004021 +:102F700081B200000400004081B200000400004063 +:102F800081B200000400004081B200000400004053 +:102F900081B2000000160040479901003031004026 +:102FA000F599010032330040F599010034350040B5 +:102FB000F599010036370040F59901003839004095 +:102FC000F599010041420040F59901004344004059 +:102FD000F599010045460040F59901004748004039 +:102FE000F5990100494A0040F59901002C00004084 +:102FF0008398010000000040F7B10100FC05A241E8 +:103000008350000080162E0683B00100360000FBBE +:10301000F6A90100FF05A2418350000022000040F4 +:1030200083980100000000FBF6B101000206A241F6 +:10303000835000006200004095980100DC9F004032 +:103040008132010000162D0683B001008016004079 +:10305000459901005C0000FBF6A901000806A241A9 +:103060008350000000000070F9B101000000007101 +:10307000F9B1010000000072F9B101000000007315 +:10308000F9B1010000000074F9B1010054000040E2 +:1030900095980100DC9F0040813201000000007023 +:1030A00095B0010014062270B56F00000000804149 +:1030B00097B001000000804097B00100040000407C +:1030C00081B200000400004081B200000400004012 +:1030D00081B20000456700A6E0B201000123007044 +:1030E000E19A0100CDEF00A6E2B2010089AB0071C8 +:1030F000E39A0100BA9800A6E4B20100FEDC007277 +:10310000E59A0100321000A6E6B201007654007381 +:10311000E79A0100D2C300A6E8B20100F0E1007412 +:10312000E99A01008016004A44C901000000000726 +:1031300081B001000000004A80D001000000004082 +:10314000F7B101002506A241815000008016004A17 +:1031500044C90100FC162A47E7B501000300004AF4 +:10316000E8E50100000000408DB001005003004080 +:10317000A399010080163D468DE00100000000503B +:1031800089B00100000000FC40B0010000000041D7 +:10319000A3C101002E06A24189500000000000706A +:1031A000EBB2010000000071EDB2010000000072FE +:1031B000EFB2010000000073F1B2010000000074E2 +:1031C000F3B201000000004083B001000F00004195 +:1031D0008088010050030040A2C901004B06A050A6 +:1031E000836C00000D00004098C801000000004FF3 +:1031F000998401005003004CA2C901000000002086 +:1032000086B001000800004098C801000000004F8F +:10321000998401005003004CA2C901000000002065 +:1032200086A401000200004098C801000000004F81 +:10323000998401005003004CA2C901000000002045 +:1032400086A4010050030040A2C901000000004311 +:1032500040A401000100002088E401000000005F9C +:1032600041F0010000000044409401000500007599 +:1032700089E401001B00007585F401000000004492 +:10328000849401005506A353836C0000000000766F +:1032900089B00100000000778984010000000076F9 +:1032A0008BB00100000000208BA40100000000781A +:1032B0008B840100640600458894000027000041CB +:1032C00080CE01005A06AA4081320000000000763C +:1032D00089B001000000007789A40100640600782D +:1032E00089A400003B00004180CE01005706AA409F +:1032F000813200000000007689B0010000000077F4 +:1033000089840100000000768BB001000000007885 +:103310008B840100000000458894010000000077C4 +:103320008BB00100000000788B840100640600452A +:10333000889400000000004484C00100000000796F +:1033400085C001000000002084C001006B06A3536B +:10335000836C0000825A00A684C001009979004263 +:1033600084C801007806004081B2000027000041B7 +:1033700080CE01007006AA4081320000D96E00A6FE +:1033800084C00100A1EB004284C80100780600401F +:1033900081B200003B00004180CE01007506AA40CA +:1033A000813200001B8F00A684C00100DCBC0042FB +:1033B00084C801007806004081B2000062CA00A6FD +:1033C00084C00100D6C1004284C8010078060040D4 +:1033D00081B2000000000078F3B201000000007725 +:1033E000F1B201001E00007689E4010002000076BF +:1033F000EFF6010000000044EE96010000000075A9 +:10340000EDB2010000000042EAB2010000000041FC +:1034100083C001004F00004180CE010037062A40E2 +:103420008132000000000075E1C20100000000765A +:10343000E3C2010000000077E5C20100000000784F +:10344000E7C2010000000079E9C201002B068141BA +:103450008D4000000000804081B201000400004067 +:1034600081B200000400004081B20000040000406E +:1034700081B200000400004081B20000040000405E +:1034800081B200000400004081B20000040000404E +:1034900081B2000000000050FD9301004016004082 +:1034A00045990100DB9F00404931010008000048B8 +:1034B000B2CB01001504004081320100B906224060 +:1034C0008F6C0000DA9F004081320100B906A240F3 +:1034D000976C00005E160040439901007C1620F6B0 +:1034E000E0B101000000004031B301009D06224F11 +:1034F0008F7C000000000051FD9301009F062240D8 +:103500008F7C0000A3060054FD930000A106224218 +:103510008F7C000000000052FD930100A3062241B1 +:103520008F7C000000000053FD930100B70622517C +:10353000FD7F000038050040813201000C0000488A +:10354000B2CB01001004004081320100B206A2405B +:10355000B56F00001E000048B2CB01001004004807 +:1035600096300100000000DA97C001000400004B13 +:10357000B2CB010010040040813201000E0000486F +:10358000B2CB010020040040813201000C00004851 +:10359000B2CB010000000030B5B3010020040040B0 +:1035A000813201000E000048B2CB0100100400403F +:1035B00081320100B6062240B56F0000BA06005401 +:1035C000FD93000000000051FD8301001C0000FE7F +:1035D0007FD90100BA06A6408132000000000055E4 +:1035E000FD9301000000804081B201000400004012 +:1035F00081B200000400004081B2000004000040DD +:1036000081B200000400004081B2000004000040CC +:1036100081B20000E79F004081320100C406225CB5 +:103620001F7C0000E39F00881CB00000E99F005C45 +:103630001F00010000002E0548B1010000000040FD +:10364000E1B1010004002D0348B10100000000F0C9 +:103650003CB001002800001402C801000000000175 +:1036600034B0010000002D0532B001002200000539 +:103670000AC801001000000348C90100000000F85A +:1036800018B00100000000F804B00100000000F8CC +:103690000EB001000C0000A40CC80100EA9F00401D +:1036A000813201000000004023B001000A0722011E +:1036B0008032000000003C4423E0010000002EA402 +:1036C00080B001000000001048C10100D906A30726 +:1036D000026C0000DA0668011AB0000000006807FA +:1036E0001AB001000000000D02D00100000000052A +:1036F000F0B101000000000CF0B101000000000278 +:10370000E0B101000000000D0AC00100EC062240FB +:10371000036C0000E6062242236C0000000000411A +:1037200023C001000000004761B10100200000A497 +:1037300062DD01002307284081320000E3060040DB +:1037400081B200000000001080C0010000000047AE +:1037500061B101000000004062B10100E806A8402C +:1037600023300000E39F00881CB0000023070040C6 +:1037700081B200000000001080C00100000000477E +:1037800061B101000000004062B10100EE06A840F6 +:1037900023300000E39F00881CB0000022000019C5 +:1037A00048C9010000002D1448C101000F0000F2BB +:1037B0003A880100000000423BE001000E000014C6 +:1037C00002C801000000001D02C00100FA06231A11 +:1037D000025000000000004603C001002307000162 +:1037E00034C000000C002D1D48C10100F00000F2A3 +:1037F000308801000000004231F001000000001498 +:1038000002B001000000001D02C00100000000180D +:1038100002C001000207221A025000002307000123 +:1038200034C000002200001948C9010002002D1414 +:1038300048C10100000000F614B001000000001DA6 +:1038400014D001000000001814D001000000001E78 +:1038500024B001001200001710C801002307001A4D +:1038600010C0000000003C4423E00100000000A460 +:1038700086B0010000002E1048C101000F07A312FE +:103880000E6C0000100760071AB000000000601204 +:103890001AB001000000680D16940100FFFF000B34 +:1038A00016D8010000000008F0B101000000000C73 +:1038B000F0B1010000000002E0B1010000000010C2 +:1038C00086C001000000004661B1010020000043F5 +:1038D00062DD01001707A85C1F1000004007220DE1 +:1038E000145000004007220D245000000000000D7D +:1038F00010C001001E072242236C00002307004174 +:1039000023C000000000004661B10100400000102B +:1039100062DD01001F07A85C1F000000E39F008814 +:103920001CB000000000004023B001003F07A20DC2 +:103930000E5000002E0722461F7C000000000046AB +:103940001F8001003080001042C901002C0722F2C4 +:10395000640600000000004761B101004000001053 +:1039600062DD01002907A84081320000E39F008842 +:103970001CB0000020800003469901000000005F99 +:10398000E191010000002D0648B10100000000F89F +:1039900018B00100000000F804B0010033071FF068 +:1039A0000E300000D306004C0DC0000000002E5F5A +:1039B0000F800100D3062307146C000030000010B4 +:1039C00048C9010024000040F199010000000003F3 +:1039D000F0B1010000000000F0B10100000000168D +:1039E000F0B101002400000000C801000000004701 +:1039F00061B10100200000A462DD01003C07A8467F +:103A00001F100000D30600030CB00000D306000D09 +:103A100018C000005F07A2441F7C000000000019CE +:103A20000AB001002200000548C901000A002D1457 +:103A300048C1010002002040E5B10100040020401F +:103A4000E5B101000D002D1D48C10100090000F382 +:103A5000388801000D002050E7B1010004002D401E +:103A60003FB00100000000F432B00100040020402B +:103A7000E1B101002200000548C9010000002D1439 +:103A800048C101000200001D94F401000000004044 +:103A900091B001005207A0FC9040000000000041DE +:103AA00091C001005007A24195500000000000A401 +:103AB00096B0010004002E0548B101000000004846 +:103AC000F0B101000000004B48B1010000000018F7 +:103AD00048C101000200001894F4010000002D18F4 +:103AE00090B001005C07A0FC904000000000004185 +:103AF00091C001005A07A241955000000000004803 +:103B0000E0B1010010002040E5B1010004002D05E6 +:103B100048B10100000000F880B02D00000000F066 +:103B200016B02D002200000548C92D000000001429 +:103B300048C12D00640743303D072C000000009E63 +:103B400085B02D0000001B413DC32D000400204224 +:103B5000ECB12D000000001E82B0010002002E1DFD +:103B600082C001000000661882C00100000000420F +:103B700080C001006E07A0418044000000000041A9 +:103B800081C001001000004092F401000A002E30B4 +:103B900081840100720790409240000000000041C3 +:103BA00093C001000000662093A401000000001DE6 +:103BB00048C1010004002019E8B101000000001E06 +:103BC00016C001007807A01916440000000000414B +:103BD00017C001000D002F1E32C001007D07A2405A +:103BE000156C00007C07A01C16400000000000417E +:103BF00017C00100000063F33894010010000005B5 +:103C000048C9010004002E1E98B001000000601A8F +:103C100098C001000C002040E1B101008B07224652 +:103C20001F7C0000000000461F8001003080001053 +:103C300042C90100890722F2640600000000004723 +:103C400061B101004000001062DD01008607A8405C +:103C500081320000E39F00881CB000002080000338 +:103C6000469901000000005FE191010030800010E2 +:103C700044C901001200001AF0C901000000001739 +:103C8000F0B1010010000005E0C901003000001093 +:103C900080C801000000004461B101002000004024 +:103CA00062DD01009107A840813200009B07225C81 +:103CB0001F7C000000003C4423E0010000002D10A8 +:103CC00048C101009B0722F2640600000000004684 +:103CD00061B101004000001062DD01009807A840BA +:103CE00081320000E39F00881CB00000EB9F005C65 +:103CF0001F00010020002F0548B101000000000B4B +:103D0000E4B101000000005017F00100A10790F29B +:103D1000164000000000004117C0010000006620AE +:103D200017A40100100000142AC801000000001DA3 +:103D30002AC00100000000502BE00100000000F24A +:103D40002A9401003080001042C90100AC0722F221 +:103D5000640600000000004461B101004000001052 +:103D600062DD0100A907A84081320000E39F0088BE +:103D70001CB000000080001710DC0100C9072240C1 +:103D8000156C0000B407A2441F7C00000000004432 +:103D90001F900100B307229F136C000002000088EF +:103DA0001CCC0100E49F004081B2000000000041F3 +:103DB0003FC30100E69F004081320100B707A241E6 +:103DC000877C00000000001E3EC00100C9072240A1 +:103DD000156C0000BA07201E146C00000000000AD9 +:103DE0003CB00100E59F001E24300100BF072208FF +:103DF0002E3000000000005211C001000000001A27 +:103E000010C001002307004017B00000E49F0088A5 +:103E10001CB00000E59F004081320100BC07A208F1 +:103E20002E300000808000A604B001000600004093 +:103E300087980100008000034499010004002204D7 +:103E4000E0310000E89F001F8C30010000000040BE +:103E50000FB00100E29F005C1F9000000080000393 +:103E60004499010004002204E0310000E69F004074 +:103E700081320100CE07A241877C0000CF07001EDF +:103E80003EC000000000001F8CB001000000004098 +:103E900005B00100E89F00400F300100E29F005C88 +:103EA0001F9000000400004081B2000004000040A8 +:103EB00081B200000400004081B200000400004014 +:103EC00081B200000400004081B200000400004004 +:103ED00081B200000400004081B2000004000040F4 +:103EE00081B200000400004081B2000004000040E4 +:103EF00081B200000400004081B2000004000040D4 +:103F000081B200000400004081B2000004000040C3 +:103F100081B200000400004081B2000004000040B3 +:103F200081B200000400004081B2000004000040A3 +:103F300081B200000400004081B200000400004093 +:103F400081B200000400004081B200000400004083 +:103F500081B200000400004081B200000400004073 +:103F600081B200000400004081B200000400004063 +:103F700081B200000400004081B200000400004053 +:103F800081B200000400004081B200000400004043 +:103F900081B200000400004081B200000400004033 +:103FA00081B200000400004081B200000400004023 +:103FB00081B200000400004081B200000400004013 +:103FC00081B200000400004081B20000F70700BC8D +:103FD00080B200000380004081B2000003800040F6 +:103FE00081B200000380004081B2000003800040E5 +:103FF00081B200000380004081B2000003800040D5 +:1040000081B200000380004081B2000003800040C4 +:1040100081B200003180004081B200003480004055 +:1040200081B200003580004081B2000004000040F1 +:1040300081B200001B808180803200001487A24082 +:10404000916F00000000004C90B301005C952EA21F +:1040500080B00100FF000080F489010090952AC81B +:10406000E5B10100000000A1F0B101000000004036 +:10407000F0B10100000000A4F0B10100000000D088 +:10408000F0B10100000000D1F0B10100000000D249 +:10409000F0B101000000004CF0B10100000000D4BC +:1040A000F0B10100000000D3F0B10100000000EE0B +:1040B000F0B101000000004EF0B10100000000402E +:1040C00044B1010018801181983000000000514077 +:1040D00081B201001A801182983000000000524025 +:1040E00081B2010014870048FD930000B603004030 +:1040F000A19901002380A242FD7F00002080008062 +:1041000080320000228011818230000022805140E4 +:1041100081B2000022801182823000002280524051 +:1041200081B200002C800048FD93000027800080B1 +:10413000803200002680A253077C0000000051530B +:10414000079001002A800052079000002980A252A7 +:10415000077C00000000525207900100000000534D +:104160000790010000000048FD9301000000004698 +:10417000F39301005C952EA252B30100FF00008072 +:10418000F48901000000004CE4B10100000000A926 +:1041900045B101003080004C80B200000000454075 +:1041A00081B201000000554081B20100AF8205409C +:1041B00049B10000AF82054049B100000000054050 +:1041C00049B101004C010040813201000000004B68 +:1041D000DEB2010000000040FD9301000000004835 +:1041E000FD830100020000409B9B0100000000A530 +:1041F0009CB30100480300408132010058952044DF +:10420000E0B101000494004043990100000000F275 +:1042100024B10100000C00EE968801000000004A65 +:1042200097F001004480A243976C00000000004218 +:10423000FD93010000C000A636B10100D01400407B +:104240004799010005000040F59901000038004041 +:10425000F599010000060040F599010000000040BA +:10426000F599010005100040F59901000209004090 +:10427000F599010004000040F59901006003004039 +:10428000813201008803004081320100A003004018 +:1042900081320100A2820040813201009A820040F6 +:1042A0008132010060952040E1B10100709520400D +:1042B000E1B1010000000049DD9101000000004073 +:1042C00091B30100F99500408132010000000040E7 +:1042D00085B301005C952040E1B1010027820040D8 +:1042E0008132010090060040813201000000005F31 +:1042F0002F8101008D81004081320100FE95004038 +:10430000813201000000454081B2010000005540AB +:1043100081B20100DD82004081B200000400004053 +:1043200081B200000400004081B20000040000409F +:1043300081B200000400004081B20000040000408F +:1043400081B200000400004081B20000040000407F +:1043500081B200002800004047990100AF8200416F +:10436000E1C1000078180040499901001905225464 +:10437000817C00006C80424081320000008200B4E9 +:1043800069DF010000001A449393010028000040F7 +:10439000479901001805004081B200000400004068 +:1043A00081B200000400004081B20000040000401F +:1043B00081B200000400004081B20000040000400F +:1043C00081B200000400004081B2000004000040FF +:1043D00081B2000040820040813201007D80224095 +:1043E000976C00007A804240813200000000004F4C +:1043F0006993010038810058699300005416004009 +:1044000047990100000000FEF4B101008005004062 +:1044100081B2000080804240813200000000004EE6 +:1044200069930100388100586993000040160040EC +:10443000459901004005004049310100F615004052 +:10444000439901005C1600404599010000006EFA96 +:104450008EB00100C105004081B2000004000040A0 +:1044600081B200000400004081B20000040000405E +:1044700081B200000400004081B20000040000404E +:1044800081B200000400004081B20000040000403E +:1044900081B200009680004081B20000408200405E +:1044A0008132010096802240976C00009380424048 +:1044B000813200000000004F6993010038810058EC +:1044C0006993000038050040813201001E00004859 +:1044D000B2CB0100D005004081B2000004000040D2 +:1044E00081B200000400004081B2000004000040DE +:1044F00081B200000400004081B2000004000040CE +:1045000081B200000400004081B2000004000040BD +:1045100081B200008302004081B20000B802004076 +:1045200081B20000D49F004081B20000D59F0040BE +:1045300081B20000D69F004081B20000D79F0040AA +:1045400081B200007201004181C000005501514854 +:10455000FD93000055015248FD9300005501554957 +:10456000FD8300005501564AFD83000050019181F2 +:10457000803000005501454081B200005001918219 +:10458000803000005501464081B20000000000402C +:1045900089B00100000000F880B00100000000F0C8 +:1045A00016B001002200000548C9010000000014F7 +:1045B00048C10100B48043303D0700000000009E68 +:1045C00085B0010000001B413DC3010004002042F2 +:1045D000ECB101000000004049B10100AE0300CB86 +:1045E000A3C901000000002046B10100000000D274 +:1045F000F1B10100000000D3F1B101000000004260 +:10460000F0B101000000004561B101002000002070 +:1046100062DD01000000A8D0E1B10000BF800040D1 +:1046200081B20000000000A898B0010004800040A2 +:104630008BB30000B1030040A1990100C780A242E2 +:10464000976F000000000045A1C1010000000000BC +:1046500080B001000000A2048094000080153F4259 +:1046600097E301000000004049B101000000600331 +:10467000029401000000004007B00100040000CBDC +:1046800099CB0100000000CCF3830100D180A2424D +:10469000976F0000000000CBF3930100AE0300CB46 +:1046A000A3C901000000002044B101000000004443 +:1046B000F1B1010000000000F0B1010000000004B1 +:1046C000F0B10100000000A1E0B1010005000040D0 +:1046D000619901002000002062DD0100D880A8401F +:1046E00081320000F9020020423101000000A241A5 +:1046F000056C0100000080CBDB9101000000194136 +:104700008BB301006000004061990100DE80A8B118 +:104710008C3300006000004061990100E080A8B186 +:1047200094330000E68014C681320000180000C6F1 +:1047300083F40100F482224F83040000C280004011 +:1047400081B20000FF0100C681880100000000C6A0 +:1047500097A30100C2801F5C9753000058821EC6B9 +:104760008132000000002F4381F00100EC80004006 +:1047700010C900003981004081B200006A81004008 +:1047800081B20000248200CA63B30000618100404E +:1047900081B200004881004D83B000005281004E7C +:1047A00061B100004181004085B000004881004CAB +:1047B00083B000002481004085B00000E381004008 +:1047C00049B1000071810040C1B10000DF810040AB +:1047D00081B200004181004085B00000F00300403C +:1047E00049B10000F48200CA9BB300007B81004005 +:1047F000C1B100007F810040C1B10000868100404E +:10480000C1B1000087810040C1B100008881004033 +:10481000C1B1000089810040C1B100008A8100401F +:1048200081B000008A81004181B000001882004000 +:1048300081B20000978200BBABB30000258200CAA2 +:10484000CFB30000C803004049B10000E8030040B6 +:1048500081B200002682004081B20000F482004054 +:1048600081B20000E003004081B20000F48200CA7F +:1048700077B300004981004D83B000005081004EA5 +:1048800061B10000418100BB85B000004981004C4E +:1048900083B00000418100BB85B00000248100BBD3 +:1048A00085B000001681004081B20000F48200CA89 +:1048B0004DB300007005004049B10000A005004064 +:1048C00049B100001C8122428F6F00001E812241ED +:1048D0008F6F000020811ECA8132000022811FCA12 +:1048E00081320000000000CAC9B10100F482004218 +:1048F0008FB30000000000CACDB10100F482004176 +:104900008FB30000000000CACFB10100F482004064 +:104910008FB30000008100A6C6B10100F482004000 +:1049200081B20000008000A6C6B10100F482004000 +:104930008FB30000781800404999010010002F9CA7 +:1049400089B001003B8100403933010018002F9BE2 +:1049500089B001003B8100403733010000002F9AED +:1049600089B001003B8100403533010008002F99D8 +:1049700089B001003B81004033330100008000AE6C +:1049800047C9010080000040F1990100000000CA01 +:10499000F1B1010000000042F0B1010040180040F8 +:1049A000E19901000000004561B10100200000AE66 +:1049B00063DD0100368128408132000033810040F0 +:1049C00081B2000036814240813200000000005C6C +:1049D00069930100F4821A449393000039814240A4 +:1049E00081320000388100586993000000000044C3 +:1049F000F0D101000000A44081B200004081A2403B +:104A0000E16D00000000004445D10100000080403D +:104A1000E1B1010000008041E1D101004181375C3A +:104A2000613100000000004262B101004581284070 +:104A3000813200004281004081B20000000000CAC3 +:104A400063B101004581A84081320000F482174023 +:104A500081B200004A81004081B000004A8100BB61 +:104A600081B000000000004160B101000000004082 +:104A700062B101004B81A84081320000000000CAF1 +:104A800063B10100F4822840813200004D81004072 +:104A900081B200005095004047990100538100BB4E +:104AA00087B0000050952F4087B00100558122400B +:104AB000957F0000F48260409583000002002DF095 +:104AC00084B001005681364081320000000000426F +:104AD00062B101005781A84081320000000000430C +:104AE00062B101005981A84081320000000000CA73 +:104AF00063B101005B81A8408132000000001640D4 +:104B000081B20100F482224143510000000800CA32 +:104B100095CB01005681004185C000006381A2420F +:104B2000676F00000000004167B3010063814240ED +:104B3000813200000000004065B301000000004029 +:104B40009383010000001ACA69970100F48226408D +:104B5000813200006881424081320000F4821A44B0 +:104B600093930000F4822043956F0000F48280CA82 +:104B700067330000F4822240656F0000F482006F0A +:104B8000DB91000085000040813201003580224029 +:104B900080320000F482004081B200000000005822 +:104BA000959301000000005F959301007781A24476 +:104BB000216F00000000005F958301000000005E8F +:104BC000959301000000005795930100000000CA72 +:104BD000C3B101007A81225B957F00000000004B89 +:104BE000FD930100F482004081B200001BFD00CA69 +:104BF000959B01000D0100CAC53101000000005F56 +:104C000095830100F48200CAC5B10000DF6F00CABD +:104C1000959B01000000005595930100000000CA1B +:104C2000C7B10100F482225F957F00000D010040B2 +:104C3000813201000000005F95830100F48200CA08 +:104C4000C7B10000F48200CAC9B10000F48200CAF2 +:104C5000CBB10000F48200CACDB10000F48200CADA +:104C6000CFB1000000002E4281E001009814004006 +:104C700048C90100F48200CAE1B100000000004010 +:104C800009B10100200000A682B001008F81A25E60 +:104C90000B7D000000800041089901009181A25E17 +:104CA0000B7D0000208000A608B1010093819F8544 +:104CB000823000000000003083840100C88122306F +:104CC000836C00009281A24F0B7D00000000004128 +:104CD00021B30100028000A682B0010013820040CF +:104CE000813201001000004184E40100038000A62D +:104CF00082B001001382004081320100F0FF0041C8 +:104D00008688010000000043849401000F0000A683 +:104D100086B0010010C4004386980100A881A24318 +:104D2000846C00000000004321B30100200000A6B5 +:104D300082B001001C00004182DC0100A581A25E5E +:104D40000B7D00000400004108990100BA81004079 +:104D500081B20000410100A686B00100500C004362 +:104D600086980100AD81A243846C000000000041E0 +:104D700021B30100BA81004081B20000410100A6C8 +:104D800086B00100600C004386980100BA81A243FE +:104D9000846C00000000004221B30100188000A6CE +:104DA00082B001001382004081320100FFFF004108 +:104DB0008288010000770041828C010001020041DD +:104DC000829801002000004182DC010018000041AF +:104DD00082DC0100B881A25E0B7D00000000004172 +:104DE00008B10100200000A682B00100BB81A25ED4 +:104DF0000B7D00004013004108990100C38122434C +:104E0000216F0000200000A682B0010012000041C6 +:104E100082DC0100C081A25E0B7D00000004004125 +:104E200008990100DE81004081B20000200000A648 +:104E300082B001001900004182DC0100C581A25E40 +:104E40000B7D000000A0004108990100DE810040B8 +:104E500081B200000000004421B3010000000040C6 +:104E600083B001000000005F839001000000005E3D +:104E70008390010000000057839001000000004172 +:104E8000C2B101000C010040813201000000005F4E +:104E90008380010000000041C2B101000C0100400C +:104EA00081320100200000A682B001000400004110 +:104EB00082DC01002000004108990100200000A6CA +:104EC00082B001001100004182DC0100D781A25EA6 +:104ED0000B7D00000100004108990100200000A6A0 +:104EE00082B00100DA81A25E0B7D00004013004118 +:104EF00008990100010000A682B0010040000041B5 +:104F00002E9901000000804081B20100200000A61F +:104F100080B00100000000CA81940100E181A25E1E +:104F20000B7D0000F482004008B10000C8142EBBC5 +:104F300085B00100E481A25E0B7D0000000000400E +:104F400087B00100F3812243216F000002822244D6 +:104F5000216F0000118000A682B001001382004082 +:104F6000813201000A82224A837C00000000004056 +:104F700087900100EE81224D837C000000000041FB +:104F800087900100F081224F837C000000000043E5 +:104F900087900100F281224E837C000000000042D5 +:104FA000879001000A82004081B20000018000A6C3 +:104FB00082B001001382004081320100018000A60E +:104FC00082B0010013820040813201000A82224235 +:104FD000837C000000000040879001001C8000A638 +:104FE00082B001001382004081320100FD81224520 +:104FF000837C00000000004187900100FF81224473 +:10500000837C00000000004387900100018222435E +:10501000837C000000000042879001000A8200406B +:1050200081B20000018000A682B00100138200401E +:1050300081320100018000A682B00100138200408D +:10504000813201000A822242837C0000000000407D +:10505000879001000000004387900100000000419C +:1050600087900100008000A682B0010013820040FA +:10507000813201000E82224B837C00000000004040 +:105080008780010000000043E0B10100FF7F00A223 +:10509000A08B010000000044A5B30100B88000CA45 +:1050A000A73301003681004081B20000200000419A +:1050B00082DC01001482A25E0B7D00000000004132 +:1050C00008B1010016829F858230000000008040F8 +:1050D00081B201001B8214F7813000001B82A249BB +:1050E000FD7F000000000048FD9301001E8215F8BE +:1050F000811400001E82A24AFD7F000000000048CB +:10510000FD9301002082A2C88132000040000040CF +:1051100080DC01000010004080DC01000000004045 +:10512000EFB3010022824240F13300003881004099 +:1051300068970000F48200BB6BB30000F48200BBF0 +:10514000B1B30000F482004081B2000000030040CF +:10515000819801000000004018B10100800000406B +:105160008398010000190040459901000000424069 +:1051700081B20100000043FFF1B10100000000FF17 +:10518000F1B101000000004181C0010000000040B9 +:1051900018B101002B82A24183500000001600408C +:1051A00045990100001900404399010000000047A3 +:1051B00043C101000000004083B00100000000F383 +:1051C00080B001000000005B81D0010000000041C0 +:1051D00080D0010000000040F6B101000000005B3B +:1051E00043C101000000004183C001003582A25488 +:1051F000836C000000000040F7B101000000004196 +:1052000083C001003C82A206836C00000000804045 +:1052100081B20100001600404399010080162E065D +:1052200083B00100360000FBF6A901004282A241D2 +:10523000835000002200004083980100000000FB22 +:10524000F6B101004582A241835000006200004097 +:1052500095980100DC9F00408132010000162D0668 +:1052600083B0010080160040459901005C0000FBFE +:10527000F6A901004B82A24183500000000000709B +:10528000F9B1010000000071F9B1010000000072E5 +:10529000F9B1010000000073F9B1010000000074D1 +:1052A000F9B101005400004095980100DC9F0040D6 +:1052B000813201000000007095B001005782227019 +:1052C000B56F00000000804197B0010000008040F1 +:1052D00097B00100B6030040A199010000002F42E1 +:1052E00099B3010062822244816C00006A822248E4 +:1052F000816C00006482224C816C00006E8222501E +:10530000816C00006F822254816C000071822258EF +:10531000816C00007682225C816C000050010040AC +:1053200081B20000000000BC09B00100F48200CA94 +:1053300001B000000000004003B001000000004187 +:10534000F38301006882A242056C00000000004166 +:1053500005B00100F48222CA07140000F48200465E +:10536000F3930000F4822043956F0000F48280CA1A +:1053700005300000F482220180300000F48200CB6E +:10538000DB910000570100BCABB30000000000BC83 +:10539000B1B30100F48200CACFB30000FF0000CA1D +:1053A00081880100F482A240747D000060002040EA +:1053B000609901007382A8B18230000072820040BF +:1053C00081B20000F48200CA79B300000000004EF0 +:1053D00081B0010000000043CB8301000000454084 +:1053E00081B201007982A241815000000000454055 +:1053F00081B201000000454081B2010084829182A7 +:10540000823000000000008A80B00100AE9F0040A2 +:1054100080CE01008282A640813200008482564004 +:1054200081B20000B6030040A199010000000053C2 +:1054300007900100B6030040A1990100000000524E +:1054400007900100D89F00418BB300000000004E80 +:1054500081B0010000000042CD8301000000464001 +:1054600081B201008982A2418150000000004640C3 +:1054700081B201000000464081B201009482918116 +:10548000823000000000008980B00100AE9F004023 +:1054900080CE01009282A640813200009482554065 +:1054A00081B20000B6030040A19901000000005243 +:1054B00007900100B6030040A199010000000053CD +:1054C00007900100D89F00418BB30000B10300405A +:1054D000A1990100C4142F4099B301005701004065 +:1054E00049B10000A0942E4397B001000000004095 +:1054F000F1B101009B82A2419750000050952040DD +:10550000E1B10100AC942E4397B0010000000040CF +:10551000F1B101009F82A24197500000000080403D +:1055200081B20100AE030040A399010000000040D9 +:1055300081B001006015004085980100080000401E +:1055400040E40100000000594194010000000050B7 +:1055500041E00100000000424094010000000057BB +:10556000419001000000004181C001000000A34201 +:10557000816C010000000041A3C10100A582A0428E +:10558000816C0000A582005085C00000DD82A24130 +:10559000017D0000B5822258737D00007800004034 +:1055A00061990100B082A8B19C30000030003845FC +:1055B0009DE001000100000E10C90000B58233C457 +:1055C00081300000B882A1AD9D200000AF82134061 +:1055D00081B200000000134E5A83010030003845AC +:1055E0009DE00100C08222AB80040000BE82A24088 +:1055F000017D0000C082225F577D00003C87004093 +:1056000081B20000C082225E577D00009F8700406B +:1056100081B20000C5822254737D000074000040F6 +:1056200061990100C082A8B1003000009084A25F9F +:10563000017C0000D086004081B20000C782A25FDA +:1056400059270000C982A25C737D0000D082A25E4F +:10565000737D0000DA82225C737D0000DB823740BC +:10566000813200007C00004061990100CA82A8B12B +:10567000363000007C00004061990100CC82A8B166 +:10568000003000001F00000002880100BF841740A6 +:1056900081B20000DB823440813200007E00004095 +:1056A00061990100D182A8B112300000D882522144 +:1056B00013040000000014412FC30100FF3F000944 +:1056C000008C01000000004301F001001183003450 +:1056D00013840000FF3F1409008C01007183004314 +:1056E00001F000000000004081B20100DB82334085 +:1056F00081320000AF82134E5A9300001487A248F3 +:10570000FD7F00000400A2AC80320000E382225A38 +:10571000737D00007A00004061990100E082A8B129 +:105720007E310000010000CF11C90000E982A240D3 +:10573000937F0000E9822244937F0000E58242A526 +:1057400080300000E882A240937F0000FB821A4074 +:105750009393000000001A4081B20100DD80A24056 +:10576000737D00000F872244216F000006872240CE +:10577000657D00000005A25B737D00000400A24966 +:10578000337D0000F3822248337D0000FF01009941 +:1057900080D801000000005081E00100A8982F404F +:1057A00033B1010000000040E0C10100DD82004093 +:1057B00081B20000AF8200408BB3000000000058AF +:1057C00061B101000000004E62B10100AF822840CB +:1057D00081320000F682004081B20000F98233403D +:1057E0001F300000AF82134E5A930000FD82A0CEFE +:1057F000815000000F83A0CD816C0000000000A547 +:105800009CB30100000000B181B001000F8322B5FC +:105810008114000080152F4049B1010001834240EE +:1058200081320000000060B465970100D0152E4061 +:1058300069B3010000001A44938301001A0000A21A +:1058400080DC010000000044F1B10100000000B163 +:10585000F1B10100000000B5F1B101000500004008 +:10586000619901008000004062DD01000A83A8A167 +:10587000E0310000E98200889EB30000E982A24185 +:10588000676F0000E982006FDB9100000F834240E8 +:1058900081320000E9821A409383000000990009D8 +:1058A00046C901003F0000F30C8801001A83A6429C +:1058B00013600000299400950330010015836140B6 +:1058C0008132000075000040619901001683A8B183 +:1058D0000C30000036947110943001001B83005886 +:1058E0001F9000001C94009503300100AF820088D7 +:1058F0001CB0000000002D0348B1010004002DF091 +:105900002EB00100EE070040979801002283234B40 +:10591000E46D00002283224BFD7F00000000004068 +:105920001F90010022002F4081B2010025838317C0 +:105930008032000026000040479901002783851728 +:10594000803200000000004847C101002D8322552D +:105950002F7C00000000004243D101000F0000FA3C +:10596000968801000000004297E00100000000421C +:1059700097D001002E83004B44C10000120000A20A +:1059800044C90100280000F602CC01000A0000A171 +:1059900042C90100000000F816B00100000028F024 +:1059A00010B00100000000F01AB00100000000A2D9 +:1059B0002AB00100C0283C460DE0010000002D4443 +:1059C00095B001003A83A2F80E3000004A832241CC +:1059D0009550000000002D5049C101003683004061 +:1059E00081B200003783A2F8166C00003783A2F85A +:1059F000106C00003783A2F01A6C00004883225814 +:105A00001F7C000000993F4213F001003F83654076 +:105A1000813200004383A2F37406000000000006F8 +:105A2000E69501004883754081B200000000000641 +:105A300096B001003F0075F30C880100000000558E +:105A400061B101000000004B62B101004683A84033 +:105A500081320000488367408132000050837741E3 +:105A60002DC300004E8322581F7C0000000000550B +:105A700061B101000000000662B101004C83A84042 +:105A8000813200004E836740813200007E8377417F +:105A90002DC30000030000071AF40100EF92000775 +:105AA000163001005F832241816C00005683224240 +:105AB000816C0000AF8200881CB000005E83225F12 +:105AC0000F7C0000E393005F011001005C83224023 +:105AD000956C00000480000342C90100000000F240 +:105AE00002B0010058930052953001005F93004BC3 +:105AF00002B0000041940009963001001A8700406E +:105B00000FB000006783A25A1F7C0000699200401A +:105B10008132010067832220856C000064839C0F22 +:105B200080320000AF8200881CB000004A93005C05 +:105B30001F0001003C95004261310100AF820088E6 +:105B40001CB00000900400079630010000002D05F5 +:105B500048B101006A8382F0183000008188004556 +:105B60008FB00000282000A696B001006E83221797 +:105B700096040000E094004B953001008188004BB2 +:105B80008FB00000EF93000348310100CA9100403C +:105B9000813001008188004081B2000000002E1099 +:105BA00048B101000000685003B00100000000038C +:105BB000F0B1010040000000E0C9010000002E50DB +:105BC00049C1010000000050F1B1010000000003D4 +:105BD000F0B101000000004261B10100200000109E +:105BE00062DD01007983A8408132000010000010BE +:105BF00062C901007B83A800E0310000AF82008809 +:105C00001CB0000000002D0348B10100000000405E +:105C10000FB00100000000F82EB00100000000F2FB +:105C200002B001000000004017B00100004100A6D2 +:105C300096B00100EE072E4797900100918322173E +:105C4000960400008F83224BFD7F00008F8323A2E8 +:105C5000026C00005893005295300100040022416C +:105C6000975000000C002D0012B00100000000F061 +:105C700000B001000000005C018001005F93004B58 +:105C800002B000000000000900B001000000005058 +:105C900003B00100AE83005C17900000A383224391 +:105CA0002F7C0000000000451F9001009C83225FB4 +:105CB0002F7C000000002E1048B1010000000058A9 +:105CC000F1B1010010000003F0C901001000000054 +:105CD000E0C90100988362426131000000000010B9 +:105CE00062B101009983A84081320000AF827288BE +:105CF0001CB0000020002D0348B10100FF0F00F68A +:105D000080880100A083A2A6816C0000A38300F21A +:105D10003AB000008D84A24BFD7F0000B09200409D +:105D2000813201003087004081B20000AE83224AF8 +:105D30002F7C0000AE8322482F7C00000A002D0338 +:105D400048B101003F0000F2868801001F000043B7 +:105D5000848801000500004380F4010098943D42CE +:105D600081E00100AE83A242E07D00008D84A24B61 +:105D7000FD7F0000B092004081320100308700407A +:105D800081B20000AE83694081320000000000A3B0 +:105D900009B001000000794147C30100B48322A18A +:105DA000096C0000F58200881CB00000B18300037C +:105DB00048B10000EE83A392036C0000949500406C +:105DC000953001000000004143C3010000000016AF +:105DD00080B201003087270880320000BB83225C3C +:105DE000177C0000BC8300002AB0000012000000F5 +:105DF0002AC801000200000880C80100C083A24335 +:105E00002F7C0000E394004081320100DC83005EBF +:105E100017900000040000018CCC0100E394004CBA +:105E20000330010000002E4602B0010010000010F7 +:105E300048C901000C000001F0CD01002C00004019 +:105E4000F0C9010000000016F0B1010010000015BB +:105E5000E0C901000000004361B10100A00000A4FE +:105E600062DD0100C983A85417100000DC83005EC6 +:105E700017900000120000002AC80100DB832243B3 +:105E80002F7C0000040000018CCC01000000004CBD +:105E900003B00100049500436131010000002E466B +:105EA00002B001001000001048C901000C00000100 +:105EB000F0CD01000C000009F0C90100000000183D +:105EC000F0B1010010000015E0C90100000000431E +:105ED00061B10100A00000A462DD0100DC83285450 +:105EE00017100000D883004081B2000004950043E1 +:105EF00061310100DE8322502F7C0000000000563B +:105F0000179001000700001798880100E183A24163 +:105F1000996C00000000005517900100000000433C +:105F200061B101004000001062DD0100E283A84081 +:105F300081320000AF8200881CB00000EB9400406A +:105F400081320100E98322432F7C00001680000388 +:105F500044C901000000001DE4B101008C94005E02 +:105F600005100100EC83A25F2F7C0000A6910001C8 +:105F700038430100B0920040813201003087004078 +:105F800081B20000F083A24BFD7F00008A840041B3 +:105F900043C300000000004027B0010000000040A3 +:105FA0002DB001000000004011B00100F383350165 +:105FB000863000006D00004061990100FB8328B12C +:105FC00030300000F483224D757D00000000001683 +:105FD00080B201007A84A740116C000000000041EB +:105FE00043C301008984004081B200006D0000407D +:105FF00061990100FB83A8B1123000000000001677 +:1060000080B201000584A740116C0000000000412F +:1060100043C301000000000910B001000000001897 +:106020002CB00100DE07004380CE0100F483AA40BB +:10603000813200000A84004081B2000040003E43EB +:1060400027E0010000000009F0B101000000001885 +:10605000E0B101000000004127C00100F483A30B60 +:1060600087500000000015401BB0010000000040F8 +:1060700023B00100120000002AC8010040002D409A +:1060800039B001001284A240276C000022000008F1 +:1060900012C80100DE070040259801001584004069 +:1060A00081B20000000000F812B00100000000F012 +:1060B00030B001000000000B25B00100000000100E +:1060C00032B0010014002001E0B10100EE070040F1 +:1060D000379801001A842301366C0000000000018B +:1060E00036B001002584824123400000208000104A +:1060F00042C9010021842240E36D000000000043FA +:1061000061B101004000001062DD01001E84A84062 +:1061100081320000AF8200881CB00000CF920043A3 +:10612000233001000000001032B0010000000041E7 +:1061300023B001000000000348B1010000800019F5 +:1061400044C90100348422451F7C00000000004C3B +:10615000F1B1010000000009F0B1010000000018D9 +:10616000F0B101000000004361B1010020000019FE +:1061700062DD01002B84A815E03100000000005012 +:1061800003D001000000005033C001000000004CAB +:1061900025D001000C002D4C13C001000000005060 +:1061A00037D00100000000502BC001001A840045C8 +:1061B0001F8000003684A312366C00003784681BF1 +:1061C00028B000000000681228B00100000000099B +:1061D000F0B1010000000018F0B101000000004320 +:1061E00061B101002000001962DD01003A84A815A8 +:1061F000E0310000608422140250000000000050D2 +:1062000033C001000000001424D001000C002D1444 +:1062100012C001005984A214365000004A84225C46 +:106220001F7C00003080001042C9010048842240D9 +:10623000E36D00000000004261B101004000001069 +:1062400062DD01004584A84081320000AF820088F1 +:106250001CB000000000000348B101000C002D5CE0 +:106260001F800100100000F02AC801000000005C3F +:106270002B800100F0070040379801004F84230174 +:10628000366C00000000000136B001005A84221B69 +:10629000026C00003000001048C9010000002E5CB4 +:1062A0001F90010000000050F1B101000000000348 +:1062B000F0B10100FF070015E08D01000000004271 +:1062C00061B10100A00000A462DD01005684A84075 +:1062D000813200005A84000348B10000000000141D +:1062E0002AC001001A84A240256C00000000004171 +:1062F00039C0010040003D4339E001000000000BBF +:1063000025B00100000000F812B001001A8400F06E +:1063100030B000000080001942C9010066842240AC +:10632000E36D00000000004361B10100400000196E +:1063300062DD01006384A84081320000AF820088E2 +:106340001CB00000CF9200402B30010018002E033B +:1063500048B101006A8422502F7C000000000056E2 +:106360001790010007000017988801006D84A24172 +:10637000996C0000000000551790010070842243C2 +:106380002F7C000000000054179001001600201D13 +:10639000E4B101007284A340276C00007484605F44 +:1063A000179000000084000B16DC01000000601351 +:1063B000169401008C94005E051001003087A25FE6 +:1063C0002F7C00001480000342C90100000000F28D +:1063D00002B00100A691000138430100308700405F +:1063E00081B200000000004083B001000000004DB9 +:1063F00061B101000000001662B101007C84A84078 +:10640000813200000000000862B101007E84A840D3 +:106410008132000089842213826C000040003D43D9 +:1064200083E00100000000F810B00100000000F05F +:106430002CB001000000001662B101008484A84065 +:10644000813200000000000862B101008684A8408B +:10645000813200008084004183C0000000001540AC +:1064600081B20100008200A604B00100A0980040A3 +:1064700047990100300500418930010058930052CE +:10648000953001005F93004B02B000003087004060 +:106490000FB000000000005F01800100100000004C +:1064A0000EF401003F000000008801000300000717 +:1064B0001AF40100EF920007163001009B8422417C +:1064C000816C000099842242816C0000AF820088B8 +:1064D0001CB000009A84225F0F7C00001A870040E5 +:1064E0000FB00000A384A25A1F7C000069920040F4 +:1064F00081320100A3842220856C0000A0849C0FBF +:1065000080320000AF8200881CB000004A93005C1B +:106510001F0001003C95004261310100AF820088FC +:106520001CB00000900400079630010000002D050B +:1065300048B10100000000F018B00100A984223A1F +:10654000016C0000000000008EB001008188004056 +:1065500001B000000000004081B201002E002D05B6 +:1065600048B10100AD84A240E76D00000A00004080 +:106570008F9801008188004001B0000034920040F3 +:10658000813201001C94009503300100AF82008825 +:106590001CB0000000002D0348B1010022002DF0C6 +:1065A0002EB00100282000A696B00100B684221764 +:1065B00096040000E094004B953001008188004C67 +:1065C0008FB00000B88483178032000000000044C0 +:1065D00043C10100BA8485178032000000000048E2 +:1065E00043C10100280000F602CC0100120000A106 +:1065F0002AC80100EF93004081320100CA91004196 +:10660000813001008188004081B20000000000015B +:1066100000D0010000002E1048B101002800004009 +:10662000F199010000000003F0B10100000000003A +:10663000F0B10100C4846447613100000000001023 +:1066400062B10100C584A81BE0310000AF827488EC +:106650001CB000000000004503E0010008002D030D +:1066600048B10100EA8401FB083000003D8587FB4A +:1066700022300000000000FA0EB00100000000F817 +:1066800014B00100030000071AF40100EF920007A4 +:1066900016300100E0842241816C0000D484224243 +:1066A000816C0000AF8200881CB00000DF84225F94 +:1066B0000F7C0000380000047E890100D884A65FAA +:1066C0000F0000004292004005300100DD840040D0 +:1066D00081B20000130000408798010000002D03E4 +:1066E00048B101000C002DF082B00100000000F064 +:1066F00084B00100CE930040053001000000005C32 +:106700001F9001001A8700400FB00000E884A25AD1 +:106710001F7C00006992004081320100E884222041 +:10672000856C0000E5849C0F80320000AF820088F9 +:106730001CB000004A93005C1F0001003C95004221 +:1067400061310100AF8200881CB000009004000796 +:106750009630010000002D0548B10100000000F056 +:1067600018B00100EC84210480200000ED8400407A +:1067700010C90000C387004B81B000000C850043A6 +:1067800081B00000108500FB22B00000C3870041EB +:1067900081B000008188004E8FB000000885005A4B +:1067A0008FB00000F58400478FB00000C38700530E +:1067B00081B00000C387005681B0000032002D0573 +:1067C00048B101008188A00AE46D0000FB84A24169 +:1067D000197C0000FA84220A80320000818800536C +:1067E0008FB00000818800548FB000000485220A19 +:1067F00080320000FE84A20AE46D00008188005D02 +:106800008FB00000000000F280B001000000000A1C +:1068100080D001000285A091816C00008188005E1B +:106820008FB00000250000408F9801008188004053 +:1068300081B2000006852091E56D0000818800543A +:106840008FB00000210000408F9801008188004037 +:1068500081B2000032002D0548B101008188A00AF4 +:10686000E46D0000240000408F9801008188004002 +:1068700081B2000037002D0548B10100040000F38B +:1068800082F40100C387A042836C0000C3870054D8 +:1068900081B00000000000F20EB00100030000070C +:1068A0001AF4010000B5000D42C9010007000007FD +:1068B000168801001985220BE67D00000A000040C1 +:1068C00087980100DF950040813201000000004000 +:1068D0000FB001001A87005C1F9000002B8522502A +:1068E000FD7F00002685A254FD7F00001E852255F5 +:1068F000FD7F00008200004087980100168500405F +:1069000081B2000016852253FD7F00001480000331 +:1069100042C90100000000F096B001001000004BD9 +:1069200080F401000CBC00408798010026852243BA +:10693000806C0000FFFF004B808801001685A24399 +:10694000806C00007C9600404799010027854640F6 +:10695000813200002A85A0F0306F00001C851E40A7 +:1069600081B2000000001E4131C30100739200405B +:10697000253001002F859C0F80320000AF820088F7 +:106980001CB000004A93005C1F000100148000034B +:1069900042C90100000000F096B0010000002F0580 +:1069A00048B101001000000718E401000008000CC5 +:1069B000E0990100900400079630010000B5000D39 +:1069C00046C9010036853040813200000000000BCE +:1069D000E6910100000200A146C901000000000B81 +:1069E000E691010004002E0548B1010000001040AE +:1069F000E1B10100C387004081B00000000000FB4E +:106A000028B00100000000FB86B00100000000F883 +:106A100014B0010047852246237C000043852240B4 +:106A2000877C0000000000481F900100458522413E +:106A3000877C0000000000471F900100478522422C +:106A4000877C0000000000451F9001004785661B01 +:106A50002C300000000000A013B0010000007641BF +:106A600041C3010076852392156C00007685A2450E +:106A70001F7C00007A85224BFD7F0000170000D0AC +:106A8000A2C901000000004027B001000200000A76 +:106A900024C80100AB9200400F3001007485220829 +:106AA0004030000000000041A3C10100F0070012C7 +:106AB00024CC01005085AA412740000001000013AA +:106AC00080CC01007085264023300000000000408B +:106AD00083B001006000000384C8010010000010B2 +:106AE00048CD0100170000D0A2C901005D85A24079 +:106AF000836C00006985004183B000000080004283 +:106B000044990100000068213896010000002E50D1 +:106B100049C101006285A244236C000030000003DB +:106B200048C9010000000044F1B101000C00002040 +:106B3000F0C901000000004461B10100A00000A400 +:106B400062DD01006585A842E031000000000044DC +:106B500085C001000000004123C001000000004189 +:106B6000A3C101005B85A2418150000070852240D5 +:106B7000236C00000000004461B1010040000010DF +:106B800062DD01006D85A84081320000AF8200887F +:106B90001CB000000000000348B10100EE070040F7 +:106BA00025980100170000D02AC80100838500172E +:106BB00010B0000095940040813201007A850040B9 +:106BC00081B20000AB92009225300100000000402D +:106BD00031B001007A8522082E3000008385004103 +:106BE00027B00000808000A604B00100060000402D +:106BF00087980100DF95000A8C30010000000040FA +:106C00000FB001000000005C1F9001008285229FF0 +:106C1000136C0000020000881CCC0100F5820040CB +:106C200081B200001A8700413FC30000000000400D +:106C30000FB001002800000180CE010097852A4096 +:106C4000813000000080001044C901004000004075 +:106C5000819801008C85A2481F7C00008C85A2478A +:106C60001F7C00008C85A307036C0000800000409F +:106C7000819801008F85A340026C0000280000016C +:106C8000F0CD0100918500400FB0000028000040C9 +:106C9000F0CD0100040000400ECC010028000003EC +:106CA000F0C9010028000000F0C901000000001632 +:106CB000E0B101000000004761B1010020000010B8 +:106CC00062DD01009585A85C1F10000000000040F7 +:106CD00043990100000000F008B00100A0012D4020 +:106CE00000C001006186220F42050000A8859C0FAC +:106CF000803200000000005C1F8001000080001056 +:106D000042C90100A3852240E36D00000000004756 +:106D100061B101004000001062DD0100A085A840C3 +:106D200081320000AF8200881CB00000A8852207D5 +:106D3000803200000000000342B1010000000007A3 +:106D400042C10100008000A1469901000000005FDF +:106D5000E1910100C006A2451F7C00001000000365 +:106D600048C9010000002D5429C00100000000F8AE +:106D700018B00100000000F804B00100000000F8A5 +:106D80000EB00100420000030AC801000C0000A47C +:106D90000CC80100ED920040813201000000001497 +:106DA00002B001000000001424D001000000001413 +:106DB00010C001001200000810C8010000000040CF +:106DC00023B00100FE7F000544C901000000000A55 +:106DD000E4B10100D18522018032000000003C4472 +:106DE00023E0010000002EA480B00100000000108C +:106DF00048C10100BE85A307026C0000BF85680181 +:106E00001AB00000000068071AB001000000000D71 +:106E100002D0010000000005F0B101000000000CEC +:106E2000F0B1010000000002E0B101000000000D1F +:106E30000AC00100CB852240036C0000CB852242B2 +:106E4000236C00000000004123C001000000004747 +:106E500061B10100A00000A462DD0100EF852840BF +:106E600081320000C885004081B20000000000109F +:106E700080C001000000004761B101000000004037 +:106E800062B10100CD85A84023300000AF820088A8 +:106E90001CB00000EF85004081B2000000003C44BF +:106EA00023E00100000000A486B0010000002E10C5 +:106EB00048C10100D685A3120E6C0000D78560077B +:106EC0001AB00000000060121AB001000000680D46 +:106ED00016940100FFFF000B16D80100000068089F +:106EE0003E9601000000000CF0B10100000000021D +:106EF000E0B101000000001086C001000000004663 +:106F000061B101002000004362DD0100DE85A85C64 +:106F10001F1000000D86220D146C0000E485220D68 +:106F2000246C00000000000D10C00100E885000D79 +:106F300024D00000000000412BC00100000000151B +:106F4000A2B101001000002010C80100F0070040AD +:106F500025980100EA852242236C0000EF8500415C +:106F600023C000000000004661B101004000001095 +:106F700062DD0100EB85A85C1F000000AF82008885 +:106F80001CB000000000004023B001000D86220D5F +:106F9000145000000C86A20D0E500000FB85224606 +:106FA0001F7C0000000000461F80010030800010A0 +:106FB00042C90100F9852240E36D0000000000474E +:106FC00061B101004000001062DD0100F685A840BB +:106FD00081320000AF8200881CB0000020800003D6 +:106FE000469901000000005FE191010000002D06BC +:106FF00048B10100000000F818B00100000000F8DE +:1070000004B0010000861FF00E300000B885004C6F +:107010000DC0000000002E5F0F800100B88523071F +:10702000146C00003000001048C90100240000402A +:10703000F199010000000003F0B101000000000020 +:10704000F0B1010000000016F0B1010024000000C2 +:1070500000C801000000004761B10100A00000A4C9 +:1070600062DD01000986A8461F100000B8850003F4 +:107070000CB00000B885000D18C0000004002E14EC +:107080000AD001001200000548CD0100FE7F000576 +:1070900042C901000C002AF2E0B10100138622402F +:1070A000316C000000006018389601001E0000409E +:1070B00043990100008100F680CE01001786A640AA +:1070C000813200000000004443C101001986220BF8 +:1070D000ED6D0000080000A142C90100020000A1FE +:1070E00046C901000F0000FA948801000200004A1E +:1070F00086E40100000000F60EB001002186224760 +:107100001F7C000004001F430E5000002186A04693 +:107110000F400000000000410FC0010025862248FA +:107120001F7C00000000004091B0010004000FA28D +:10713000423100002886004089B000000C0000A207 +:1071400042C901000000004389B001000000004373 +:1071500095D00100000000FC82B001002B86A04108 +:10716000904000000000004191C00100308622479D +:107170001F7C00003086A043896C000030862045CB +:10718000896C00003086A0410E40000000000041E4 +:107190000FC001000000004189C001002886A24103 +:1071A00095500000398622481F7C000010000048DE +:1071B00092F40100FFFF0048908801003786904854 +:1071C000924000000000004193C001000A0000A2AC +:1071D00044C901000000662093A401003080001023 +:1071E00044C9010012000014F0C90100000000179A +:1071F000F0B1010012000005E0CD010030000010E8 +:1072000080C801000000004461B10100200000407E +:1072100062DD01003F86A840813200004A86225C80 +:107220001F7C000000003C4423E0010000002D1002 +:1072300048C1010049862240E36D0000000000467D +:1072400061B101004000001062DD01004686A840E7 +:1072500081320000AF8200881CB000000000005C9A +:107260001F8001004D86A2471F7C0000E392004072 +:1072700081320100C686001710B00000EA9200407B +:107280008132010000002F0348B101005186A007A0 +:10729000164000000000004117C001000000000B74 +:1072A000E4B101000000005017F00100558690F293 +:1072B000164000000000004117C0010000006620D9 +:1072C00017A40100100000142AC80100000000509B +:1072D0002BE00100000000F22A9401003080001031 +:1072E00042C901005F862240E36D000000000044B7 +:1072F00061B101004000001062DD01005C86A84021 +:1073000081320000AF8200881CB0000000800017AE +:1073100010DC0100C686004081B2000069869C0F27 +:10732000803200000000005C1F800100008000101F +:1073300042C9010069862240E36D00000000004759 +:1073400061B101004000001062DD01006686A840C6 +:1073500081320000AF8200881CB000006E862207D8 +:10736000803200000000000342B10100000000076D +:1073700042C10100008000A1469901000000005FA9 +:10738000E191010004002E0348B101000000000A51 +:10739000E0B1010073862240316C00000C00004017 +:1073A00045990100000060183896010000002E1079 +:1073B00048B1010000000050F1B1010000000008D8 +:1073C000F0B1010000000003E0B101000000004442 +:1073D00061B101000000001062B101007886A84090 +:1073E00023300000AF8200881CB0000000002D5246 +:1073F00011C001001000000348C90100000000F89E +:1074000018B00100000000F804B00100000000F80E +:107410000EB001000C0000A40CC8010000003C44A8 +:1074200023E00100000000A486B0010000002E103F +:1074300048C101008686A3120E6C0000878668078B +:107440001AB00000000068121AB00100000000101D +:1074500086C00100000068083E9601000000000C94 +:10746000F0B1010000000002E0B1010000000046A0 +:1074700061B101002000004362DD01008C86A85C40 +:107480001F100000BB86220D146C00009286220D96 +:10749000246C00000000000D10C001009686000D55 +:1074A00024D00000000000412BC0010000000015A6 +:1074B000A2B101001000002010C80100F007004038 +:1074C0002598010098862242236C00009D86004189 +:1074D00023C000000000004661B101004000001020 +:1074E00062DD01009986A85C1F000000AF82008861 +:1074F0001CB000000000004023B001000400220D79 +:1075000014500000BA86A20D0E500000A986224633 +:107510001F7C0000000000461F800100308000102A +:1075200042C90100A7862240E36D00000000004729 +:1075300061B101004000001062DD0100A486A84096 +:1075400081320000AF8200881CB000002080000360 +:10755000469901000000005FE191010000002D0646 +:1075600048B10100000000F818B00100000000F868 +:1075700004B00100AE861FF00E3000008186004C82 +:107580000DC0000000002E5F0F80010081862307E0 +:10759000146C00003000001048C9010024000040B5 +:1075A000F199010000000003F0B1010000000000AB +:1075B000F0B1010000000016F0B10100240000004D +:1075C00000C801000000004761B10100A00000A454 +:1075D00062DD0100B786A8461F1000008186000307 +:1075E0000CB000008186000D18C00000C486225C2B +:1075F0001F7C00000000005C1F80010000003C4474 +:1076000023E0010000002D1048C10100C486224083 +:10761000E36D00000000004661B101004000001071 +:1076200062DD0100C186A84081320000AF8200887F +:107630001CB000000000001710B00100C68600401A +:107640002BB00000008000034499010000000004FA +:10765000E0B10100CB86229F136C0000020000887D +:107660001CCC0100F582004081B20000F095004181 +:107670003F430100000000408DB0010000000040C9 +:1076800005B00100DF9500400F3001003087005C3D +:107690001F900000100000000EF401000000003AEE +:1076A00001840100030000071AF40100EF920007B3 +:1076B00016300100DA862241816C0000D886224211 +:1076C000816C0000AF8200881CB00000D986225F68 +:1076D0000F7C00001A8700400FB00000E286A25A1B +:1076E0001F7C00006992004081320100E286222066 +:1076F000856C0000DF869C0F80320000AF8200881E +:107700001CB000004A93005C1F0001003C95004241 +:1077100061310100AF8200881CB0000090040007B6 +:107720009630010000002D0548B10100000000F076 +:1077300018B001000000000080B00100C387A25F04 +:10774000816C0000A8002D431980010037002DF046 +:1077500024B00100040000F38EF401000F0000F3D8 +:1077600090880100F18622488E6C000036000040AF +:107770004399010058003D43E7E10100F1861FF005 +:10778000246C0000F08623418F6C0000C387004703 +:1077900081B00000C387004881B000004000004075 +:1077A00043990100B0002DF014B00100F686220AC2 +:1077B00090400000C395004091300100C387A24073 +:1077C00080320000B0002D4581B00100028722F018 +:1077D0002C300000A3002D3083B00100AC002DF34D +:1077E00082E00100FC86A3412C6C00000000001622 +:1077F00082B0010098002DF082C0010088002DF0B9 +:1078000082D00100000000F298E80100C387204CFC +:10781000826C00007C002D4198E80100C38720F0B5 +:10782000986C00001A87220A803200004002000C87 +:107830007E8901001A87A64081320000C387004973 +:1078400081B00000200000A680B001000A8722431A +:10785000216F00001380004080DC01000B87004096 +:1078600081B200001A80004080DC01000B87A25E1C +:107870000B7D00000000004008B101000D879F85CE +:10788000803200001187004081B20000EC8222406B +:10789000577D0000010000405799010011874240C8 +:1078A000813200000000004493930100DD821A5BE6 +:1078B00069930000040000CB81C8010017872240B3 +:1078C000F27F0000C480006F9733010019872240C7 +:1078D000737D0000DE8000418BB300001487004000 +:1078E00081B2000021879C0F8032000000800010D0 +:1078F00042C9010021872240E36D000000000045DD +:1079000061B101004000001062DD01001E87A84047 +:1079100081320000AF8200881CB000004592220234 +:107920008032000022874240813200000000004483 +:107930009393010045921A02689700002C879C0FD0 +:10794000803200000080001042C901002C872240D4 +:10795000E36D00000000004561B10100400000102F +:1079600062DD01002987A84081320000AF820088D3 +:107970001CB000004F922202803200002D8742404E +:107980008132000000000044939301004F921A02DC +:107990006897000037879C0F80320000008000103D +:1079A00042C9010037872240E36D00000000004516 +:1079B00061B101004000001062DD01003487A84081 +:1079C00081320000AF8200881CB00000F9822202E0 +:1079D00080320000388742408132000000000044BD +:1079E0009393010000001A0268970100F982004099 +:1079F00005B00000008000A656B1010056952F404A +:107A000005B001008887A240E76D0000B8942941C5 +:107A1000E7B1010000000054EF930100000000F204 +:107A20000EB00100290000400D9801000900000778 +:107A300012E40100000000A713C0010003000007CA +:107A40001AF401000700000716880100FFFF00106C +:107A500034D801000000000334940100000000400D +:107A600023B00100201800401198010000B5000D5E +:107A700042C901006C87220BE67D00004D87604003 +:107A800081320000FFFF000784890100548705C28E +:107A900024300000580400408132010000002D0510 +:107AA00048B10100898770F0183001006C870040F0 +:107AB00081B200000000704081B201006387A048DD +:107AC000236C00000000005035D001000080001A37 +:107AD00042C901005D872240E36D000000000042C2 +:107AE00061B101004000001A62DD01005A87A84020 +:107AF00081320000AF8200881CB000002098004056 +:107B000043990100898700F8183001005E87A2417F +:107B100023500000FFFF001034D8010000000003D4 +:107B200034940100201800401198010000002E1A22 +:107B300048B1010000000044F1B10100000000085C +:107B4000F0B101000000004261B101002000001A04 +:107B500062DD01006787A809E031000000000041F4 +:107B600023C001000000005035C0010000000044A7 +:107B700011C00100788722410D5000000000004133 +:107B80000FC001007487A0AA0F6C00000000004124 +:107B90000FB001000900000712E40100000000A777 +:107BA00013C00100000000401BB001004B870041E2 +:107BB00017B000000002000912C801004B87834182 +:107BC000174000000000004017B001004B87004143 +:107BD0001BC0000083872340236C0000000000507E +:107BE00035D001000080001A42C901008087224080 +:107BF000E36D00000000004261B101004000001A86 +:107C000062DD01007D87A84081320000AF820088DC +:107C10001CB000002098004043990100898700F8BB +:107C2000183001008187A24123500000000000416C +:107C30000FC001008687A0AA0F6C00000000004161 +:107C40000FB00100B8942007E4B101005695204020 +:107C5000E7B101001A8700400FB00000FFFF000CE1 +:107C600080D80100C002000C7E8901009B87265449 +:107C7000613100009187870C803200000F000040C6 +:107C80006299010091872840813200009187A254B7 +:107C9000777D00008D87004081B2000096872246E4 +:107CA000197C00000D000040629901000000A8400E +:107CB00081B200000000A254777D0100928700404D +:107CC00081B200009B872249197C00000E00004011 +:107CD000629901000000A84081B200000000A25497 +:107CE000777D01009687004081B2000010000040BF +:107CF000629901000000A84081B200000000A25477 +:107D0000777D01009B87004081B2000030942F55A1 +:107D1000F1930100004000A656B10100F982A24192 +:107D2000E551000064000040E5990100A38744404C +:107D300081320000A687A293576F00000000004127 +:107D400057C3010000001CAB27B30100F982225089 +:107D5000FD7F0000F9822251FD7F0000F982A241DF +:107D60001D530000504600401D9B01003805004097 +:107D7000813201000E000048B2CB01001004004027 +:107D800049310100B2872240B56F00000E00004863 +:107D9000B2CB010020040041B5530100F98200403C +:107DA00081B2000000000051FD8301004016004038 +:107DB0004599010040050040493101001E0000487E +:107DC000B2CB01001004004081320100000000DA53 +:107DD00091C0010004000048B2CB01002004004023 +:107DE000B533010060162040E5B10100408200403B +:107DF000B533010008000048B2CB0100FFFF004A84 +:107E0000B48B010020040040813201000A000048C8 +:107E1000B2CB01001000004AB4F70100200400407A +:107E200081320100F982004081B20000050000406B +:107E300043990100000000F308B001000400204055 +:107E4000E6B101000300004096E4010000000004D8 +:107E500096C00100C987004B10C90000EC8A0041A0 +:107E600009B00000040000208FB0000004000020D2 +:107E70008FB00000040000208FB00000040000203C +:107E80008FB00000040000208FB00000040000202C +:107E90008FB00000040000208FB00000040000201C +:107EA0008FB00000208B004109B0000004000020CA +:107EB0008FB00000040000208FB0000004000020FC +:107EC0008FB00000040000208FB0000004000020EC +:107ED0008FB00000040000208FB0000004000020DC +:107EE0008FB00000040000208FB00000528B0045CE +:107EF00009B00000528B004509B00000528B0045CC +:107F000009B00000528B004509B0000004000020B9 +:107F10008FB00000040000208FB00000040000209B +:107F20008FB00000040000208FB00000918B004350 +:107F300009B00000BA8B004309B00000BE8B0044BA +:107F400009B00000098D004509B0000004000020C0 +:107F50008FB00000040000208FB00000040000205B +:107F60008FB00000040000208FB00000040000204B +:107F70008FB00000CA8B004309B00000C98B0043DA +:107F800009B00000EA8A004509B0000004000020A2 +:107F90008FB00000040000208FB00000040000201B +:107FA0008FB00000040000208FB00000798C0042E8 +:107FB00009B00000798C004309B00000798C0044BE +:107FC00009B00000EA8A004509B000000400002062 +:107FD0008FB00000040000208FB0000004000020DB +:107FE0008FB00000040000208FB0000004000020CB +:107FF0008FB00000998C004309B0000004000020FD +:108000008FB00000EA8A004509B00000040000209B +:108010008FB00000040000208FB00000040000209A +:108020008FB00000040000208FB00000040000208A +:108030008FB00000B78C004309B00000B78C00443B +:1080400009B00000EA8A004509B0000004000020E1 +:108050008FB00000040000208FB00000040000205A +:108060008FB00000040000208FB00000040000204A +:108070008FB00000B78C004209B00000040000205F +:108080008FB00000EA8A004509B00000040000201B +:108090008FB00000040000208FB00000040000201A +:1080A0008FB00000040000208FB00000040000200A +:1080B0008FB00000DF8C004409B0000004000020F5 +:1080C0008FB00000EA8A004509B0000004000020DB +:1080D0008FB00000040000208FB0000004000020DA +:1080E0008FB00000040000208FB00000EA8A004238 +:1080F00009B00000F08C004509B00000F08C00458C +:1081000009B00000EA8A004509B000000400002020 +:108110008FB00000040000208FB000000400002099 +:108120008FB00000040000208FB00000F28C0042ED +:1081300009B00000F28C004309B00000F28C00444A +:1081400009B00000F28C004509B0000004000020D6 +:108150008FB00000040000208FB000000400002059 +:108160008FB00000040000208FB000000400002049 +:108170008FB00000040000208FB00000FA8C004493 +:1081800009B00000EA8A004509B0000004000020A0 +:108190008FB00000040000208FB000000400002019 +:1081A0008FB00000040000208FB000000B8D004253 +:1081B00009B00000FB8C004309B000000B8D0044A7 +:1081C00009B00000EA8A004509B000000400002060 +:1081D0008FB00000040000208FB0000004000020D9 +:1081E0008FB00000040000208FB0000004000020C9 +:1081F0008FB000000C8D004309B00000028D0044D8 +:1082000009B00000EA8A004509B00000040000201F +:108210008FB00000040000208FB000000400002098 +:108220008FB00000EA8A004109B00000778C00425C +:1082300009B00000778C004309B00000778C00443F +:1082400009B00000EA8A004509B0000004000020DF +:108250008FB00000040000208FB000000400002058 +:108260008FB00000EA8A004109B000000D8D004285 +:1082700009B000000D8D004309B000000D8D0044D1 +:1082800009B00000EA8A004509B00000040000209F +:108290008FB00000040000208FB000000400002018 +:1082A0008FB00000040000208FB000000400002008 +:1082B0008FB00000040000208FB0000004000020F8 +:1082C0008FB00000148D004509B0000004000020AC +:1082D0008FB00000040000208FB0000004000020D8 +:1082E0008FB00000168D004209B00000040000208D +:1082F0008FB00000040000208FB0000004000020B8 +:108300008FB00000040000208FB0000004000020A7 +:108310008FB00000040000208FB000000400002097 +:108320008FB00000040000208FB00000228D0043B9 +:1083300009B00000818D004309B00000BE8B0044ED +:1083400009B00000098D004509B0000004000020BC +:108350008FB00000040000208FB000000400002057 +:108360008FB00000040000208FB000000400002047 +:108370008FB00000898D004309B00000BE8B00441F +:1083800009B00000098D004509B00000040000207C +:108390008FB00000040000208FB000000400002017 +:1083A0008FB00000040000208FB000000400002007 +:1083B0008FB000009A8D004309B000000400002037 +:1083C0008FB00000EA8A004509B0000004000020D8 +:1083D0008FB00000040000208FB0000004000020D7 +:1083E0008FB00000040000208FB000008E8B00438F +:1083F00009B00000858D004309B00000BE8B004429 +:1084000009B00000098D004509B0000004000020FB +:108410008FB00000040000208FB0000007002D0581 +:1084200048B10100000000F308B001000600204739 +:10843000E6B101000400004796E401000000004797 +:1084400096D001000000004796D001000000000413 +:1084500096C001008988004B10C90000B28D004908 +:1084600009B000000400002085B0000004000020D6 +:1084700085B000000400002085B00000040000204A +:1084800085B000000400002085B00000040000203A +:1084900085B000000400002085B00000040000202A +:1084A00085B000000400002085B00000040000201A +:1084B00085B000000400002085B00000040000200A +:1084C00085B000000400002085B0000004000020FA +:1084D00085B00000EB8D004209B0000004000020D0 +:1084E00085B000000400002085B0000004000020DA +:1084F00085B000000400002085B0000004000020CA +:1085000085B000000400002085B0000004000020B9 +:1085100085B000000400002085B0000004000020A9 +:1085200085B000000400002085B000000400002099 +:1085300085B000000400002085B000000400002089 +:1085400085B00000F18D004609B000000400002055 +:1085500085B000000400002085B000000400002069 +:1085600085B000000400002085B000000400002059 +:1085700085B000000400002085B000000400002049 +:1085800085B000000400002085B000000400002039 +:1085900085B000000400002085B000000400002029 +:1085A00085B000000400002085B000000400002019 +:1085B00085B000000400002085B00000FF8D00425F +:1085C00009B000000400002085B00000218E0042A8 +:1085D00009B000000400002085B000000400002065 +:1085E00085B000000400002085B0000004000020D9 +:1085F00085B000000400002085B0000004000020C9 +:1086000085B000001C8E004A09B000000400002064 +:1086100085B000000400002085B0000004000020A8 +:1086200085B000000400002085B00000248E0043C7 +:1086300009B000000400002085B000007D8E0044D9 +:1086400009B000000400002085B0000004000020F4 +:1086500085B000000400002085B000000400002068 +:1086600085B000000400002085B000000400002058 +:1086700085B000007C8E004B09B000000400002093 +:1086800085B000000400002085B000000400002038 +:1086900085B00000F48D004109B000000400002006 +:1086A00085B00000F48D004309B00000F48D004453 +:1086B00009B00000F48D004509B00000F48D0046BB +:1086C00009B00000F48D004709B00000F48D0048A7 +:1086D00009B00000F48D004909B00000F48D004A93 +:1086E00009B00000F48D004B09B00000F48D004C7F +:1086F00009B00000F48D004D09B000000400002016 +:1087000085B000000400002085B00000DC8E00422F +:1087100009B000000400002085B00000DC8E004499 +:1087200009B000000400002085B000000400002013 +:1087300085B000000400002085B000000400002087 +:1087400085B000000400002085B000000400002077 +:1087500085B00000DC8E004B09B000000400002052 +:1087600085B000000400002085B000000400002057 +:1087700085B000000400002085B000000400002047 +:1087800085B00000F48E004509B000000400002010 +:1087900085B000000400002085B000000400002027 +:1087A00085B000000400002085B000000B8F00475A +:1087B00009B000000400002085B00000E88E0045EC +:1087C00009B000000400002085B000000400002073 +:1087D00085B000005491004609B00000040000205C +:1087E00085B000000400002085B0000004000020D7 +:1087F00085B000000400002085B0000004000020C7 +:1088000085B00000218E004609B00000FF8D0046B3 +:1088100009B000001A8E004709B000001A8E004807 +:1088200009B000000400002085B000000400002012 +:1088300085B000000400002085B000001C8E004AB6 +:1088400009B000000400002085B0000004000020F2 +:1088500085B000000400002085B000000400002066 +:1088600085B000000400002085B000000400002056 +:1088700085B000007D8E004509B00000248E0043C5 +:1088800009B000001A8E004709B000001A8E004897 +:1088900009B000000400002085B0000004000020A2 +:1088A00085B000000400002085B000007C8E004CE4 +:1088B00009B000000400002085B000000400002082 +:1088C00085B000000400002085B0000004000020F6 +:1088D00085B000000400002085B0000004000020E6 +:1088E00085B00000118F004409B00000118F0042D4 +:1088F00009B00000D58A004709B00000D58A0048B9 +:1089000009B000000400002085B000000400002031 +:1089100085B000000400002085B00000118F004BDE +:1089200009B000000400002085B000000400002011 +:1089300085B00000F48D004109B00000348F00477D +:1089400009B000000400002085B000001C8F004723 +:1089500009B000000400002085B0000004000020E1 +:1089600085B000000400002085B000000400002055 +:1089700085B000000400002085B000000400002045 +:1089800085B000001C8F004709B0000004000020E3 +:1089900085B000000400002085B000000400002025 +:1089A00085B000000400002085B000000400002015 +:1089B00085B000000400002085B000000400002005 +:1089C00085B000001C8F004709B00000348F0047BD +:1089D00009B000001A8E004709B000001A8E004846 +:1089E00009B000000400002085B000000400002051 +:1089F00085B000000400002085B000001C8F0047F7 +:108A000009B000000400002085B000000400002030 +:108A100085B000000400002085B0000004000020A4 +:108A200085B000000400002085B000000400002094 +:108A300085B000000400002085B000000400002084 +:108A400085B00000438F004709B00000438F004805 +:108A500009B000000400002085B0000004000020E0 +:108A600085B000000400002085B000000400002054 +:108A700085B000000400002085B000000400002044 +:108A800085B00000A68F004009B00000C48F0047E9 +:108A900009B00000B88F004809B00000148F0047EB +:108AA00009B00000148F004709B00000C48F0047D0 +:108AB00009B00000CB8F004709B00000CB8F004801 +:108AC00009B000000400002085B00000B88F004805 +:108AD00009B00000148F004709B00000148F004750 +:108AE00009B00000B88F004809B000000400002061 +:108AF00085B000000400002085B0000004000020C4 +:108B000085B00000DC8E004309B0000004000020A6 +:108B100085B00000DC8E004509B00000DC8E004608 +:108B200009B000001A8E004709B000001A8E0048F4 +:108B300009B000000400002085B00000DC8E004A6F +:108B400009B000000400002085B00000DC8E004C5D +:108B500009B000000400002085B0000004000020DF +:108B600085B000000400002085B00000338F00476E +:108B700009B00000278F004809B000001B8F004794 +:108B800009B000001B8F004709B00000338F004779 +:108B900009B00000D58A004709B00000D58A004816 +:108BA00009B000000400002085B00000278F0048B5 +:108BB00009B000001B8F004709B000001B8F004761 +:108BC00009B00000278F004809B000000400002011 +:108BD00085B000000400002085B00000CD8F004269 +:108BE00009B000000400002085B00000CD8F0044D3 +:108BF00009B000000400002085B00000040000203F +:108C000085B000000400002085B0000004000020B2 +:108C100085B000000400002085B0000004000020A2 +:108C200085B00000CD8F004B09B00000040000208B +:108C300085B000000400002085B000000400002082 +:108C400085B000000400002085B000000400002072 +:108C500085B00000CD8F004309B000000400002063 +:108C600085B00000CD8F004509B00000CD8F0046D3 +:108C700009B00000CD8F004709B00000CD8F00483B +:108C800009B000000400002085B00000CD8F004A2C +:108C900009B000000400002085B00000CD8F004C1A +:108CA00009B00000CD8F004C09B000000400002086 +:108CB00085B000000400002085B000000400002002 +:108CC00085B00000E88F004609B0000004000020D5 +:108CD00085B000000400002085B0000004000020E2 +:108CE00085B000000400002085B000000B8F004715 +:108CF00009B000000400002085B00000E88F0046A5 +:108D000009B000000400002085B00000040000202D +:108D100085B000000400002085B0000004000020A1 +:108D200085B000000400002085B000000400002091 +:108D300085B00000E990004609B000000400002062 +:108D400085B000000400002085B000000400002071 +:108D500085B000000400002085B000000B8F0047A4 +:108D600009B000000400002085B00000E990004632 +:108D700009B000000400002085B0000004000020BD +:108D800085B00000E990004609B000000400002012 +:108D900085B000000400002085B000000400002021 +:108DA00085B000000400002085B000000E91004254 +:108DB00009B000000400002085B00000040000207D +:108DC00085B000000400002085B0000004000020F1 +:108DD00085B000000400002085B0000004000020E1 +:108DE00085B000000D91004A09B000000400002089 +:108DF00085B000000400002085B0000004000020C1 +:108E000085B000000400002085B0000004000020B0 +:108E100085B000000400002085B0000004000020A0 +:108E200085B000000E91004609B00000040000204B +:108E300085B000001A8E004709B000001A8E004865 +:108E400009B000000400002085B0000004000020EC +:108E500085B000000400002085B000000D91004A9C +:108E600009B000000400002085B0000004000020CC +:108E700085B000000400002085B000000400002040 +:108E800085B000000400002085B000000400002030 +:108E900085B000000400002085B000000400002020 +:108EA00085B000000400002085B000000400002010 +:108EB00085B00000D88F004109B0000004000020F8 +:108EC00085B000000400002085B0000004000020F0 +:108ED00085B000000400002085B0000004000020E0 +:108EE00085B000000400002085B00000E58F00423E +:108EF00009B000000400002085B00000E58F0044A8 +:108F000009B000000400002085B00000040000202B +:108F100085B000000400002085B00000040000209F +:108F200085B000000400002085B00000040000208F +:108F300085B00000E58F004B09B000000400002060 +:108F400085B000000400002085B00000040000206F +:108F500085B000000400002085B00000040000205F +:108F600085B00000E58F004309B000000400002038 +:108F700085B00000E58F004509B00000E58F004690 +:108F800009B00000E58F004709B00000E58F0048F8 +:108F900009B000000400002085B00000040000209B +:108FA00085B000000400002085B00000E58F004C73 +:108FB00009B000000400002085B00000040000207B +:108FC00085B000000400002085B0000004000020EF +:108FD00085B00000F48E004C09B0000004000020B1 +:108FE00085B000000400002085B0000004000020CF +:108FF00085B000000400002085B000000B8F004702 +:1090000009B000000400002085B00000E88E004C8C +:1090100009B000000400002085B00000040000201A +:1090200085B00000A591004609B0000004000020B2 +:1090300085B000000400002085B000004991004286 +:1090400009B000000400002085B0000049910044F0 +:1090500009B000000400002085B0000004000020DA +:1090600085B000000400002085B00000040000204E +:1090700085B000000400002085B00000040000203E +:1090800085B000004991004B09B0000004000020A9 +:1090900085B000000400002085B00000040000201E +:1090A00085B000000400002085B00000040000200E +:1090B00085B000000400002085B0000004000020FE +:1090C00085B000004991004509B000004991004673 +:1090D00009B000001A8E004709B000001A8E00483F +:1090E00009B000000400002085B00000040000204A +:1090F00085B000000400002085B000004991004CBC +:1091000009B000000400002085B000000400002029 +:1091100085B000000400002085B00000E88E004209 +:1091200009B000005491004609B00000040000207E +:1091300085B000000400002085B00000E88E0046E5 +:1091400009B000000400002085B000000B8F00472C +:1091500009B000000400002085B0000054910046D2 +:1091600009B000000400002085B0000004000020C9 +:1091700085B000005491004609B0000004000020B2 +:1091800085B000000400002085B00000040000202D +:1091900085B000005891004309B000000400002091 +:1091A00085B000000400002085B00000040000200D +:1091B00085B000000400002085B000000B8F004740 +:1091C00009B000000400002085B000005891004361 +:1091D00009B000000400002085B000000400002059 +:1091E00085B000005891004D09B000000400002037 +:1091F00085B000000400002085B0000004000020BD +:1092000085B000000400002085B000006A91004392 +:1092100009B000000400002085B000000400002018 +:1092200085B000000400002085B00000040000208C +:1092300085B000000400002085B00000040000207C +:1092400085B000004791004A09B0000004000020EA +:1092500085B000000400002085B00000040000205C +:1092600085B000000400002085B00000040000204C +:1092700085B000000400002085B00000040000203C +:1092800085B000006A91004309B00000040000208E +:1092900085B000001A8E004709B000001A8E004801 +:1092A00009B000000400002085B000000400002088 +:1092B00085B000000400002085B000004791004AFE +:1092C00009B000000400002085B000000400002068 +:1092D00085B000000400002085B0000004000020DC +:1092E00085B000007C91004309B00000040000201C +:1092F00085B000000400002085B0000004000020BC +:1093000085B000000400002085B000000B8F0047EE +:1093100009B000000400002085B000007C910043EB +:1093200009B000000400002085B000000400002007 +:1093300085B000007C91004D09B0000004000020C1 +:1093400085B000000400002085B00000FF8D0042C1 +:1093500009B000000400002085B00000218E00420A +:1093600009B000000400002085B0000004000020C7 +:1093700085B000000400002085B00000040000203B +:1093800085B000000400002085B00000040000202B +:1093900085B000009B91004209B00000040000204D +:1093A00085B000000400002085B00000040000200B +:1093B00085B000000400002085B0000004000020FB +:1093C00085B000000400002085B0000004000020EB +:1093D00085B00000218E004609B00000FF8D0046D8 +:1093E00009B000001A8E004709B000001A8E00482C +:1093F00009B000000400002085B000000400002037 +:1094000085B000000400002085B000009B9100465C +:1094100009B000000400002085B000000400002016 +:1094200085B000000400002085B00000040000208A +:1094300085B000009D91004A09B0000004000020A2 +:1094400085B000000400002085B00000040000206A +:1094500085B000000400002085B000000B8F00479D +:1094600009B000000400002085B000009D91004A72 +:1094700009B000000400002085B0000004000020B6 +:1094800085B000005591004609B00000040000209E +:1094900085B000000400002085B00000040000201A +:1094A00085B000005591004609B00000040000207E +:1094B00085B000000400002085B0000004000020FA +:1094C00085B000000400002085B000000B8F00472D +:1094D00009B000000400002085B00000559100464E +:1094E00009B000000400002085B000000400002046 +:1094F00085B000005591004609B00000040000202E +:1095000085B000000400002085B0000004000020A9 +:1095100085B000000400002085B00000A391004247 +:1095200009B000000400002085B000000400002005 +:1095300085B000000400002085B000000400002079 +:1095400085B000000400002085B000000400002069 +:1095500085B000004791004A09B0000004000020D7 +:1095600085B000000400002085B000000400002049 +:1095700085B000000400002085B000000400002039 +:1095800085B000000400002085B000000400002029 +:1095900085B00000A391004609B00000040000203F +:1095A00085B000001A8E004709B000001A8E0048EE +:1095B00009B000000400002085B000000400002075 +:1095C00085B000000400002085B000004791004AEB +:1095D00009B000000400002085B000000400002055 +:1095E00085B000000400002085B00000248E004DEE +:1095F00009B000000400002085B000000400002035 +:1096000085B000000400002085B0000004000020A8 +:1096100085B000000400002085B000000400002098 +:1096200085B000000400002085B000000400002088 +:1096300085B000000400002085B000000400002078 +:1096400085B000000400002085B000000400002068 +:1096500085B000000400002085B000000400002058 +:1096600085B000000400002085B000000400002048 +:1096700085B000000400002085B00000248E004D5D +:1096800009B000001A8E004709B000001A8E004889 +:1096900009B000000400002085B000000400002094 +:1096A00085B000000400002085B000000400002008 +:1096B00085B000000400002085B0000007002E4B9C +:1096C0001990010025870004E6B10000D58A2242E6 +:1096D000197C00009A94003A81300100D58A00403C +:1096E00081B20000D58A2242197C0000FF1F000FC2 +:1096F0001E8C01000594004081320100E58A9C0F18 +:10970000803200000000005C1F800100008000101B +:1097100042C90100E58A2240E36D000000000045D7 +:1097200061B101004000001062DD0100E28AA84042 +:1097300081320000AF8200881CB00000A9842202A0 +:1097400080320000E68A424081320000000000447E +:109750009393010000001A0268970100A984004059 +:1097600005B0000005002E4B19900100258700046C +:10977000E6B100000000004087B00100000000409A +:109780008DB001000080000342C90100400000A12B +:1097900044C90100000000F0E0B10100DF950006BF +:1097A000074001000000000607D00100D4002E5C35 +:1097B0001F90010000000007F0B101000C800003C1 +:1097C00042C90100000000F0F0B1010000000040BB +:1097D00081B20100000000FE96B00100000000FE12 +:1097E00096C00100000000F0F0B101000000004050 +:1097F00081B20100000000FE96C00100000000FEE2 +:1098000096C00100000000F0F0B10100000000402F +:1098100081B20100000000FA96C00100000000FEC5 +:1098200096C001000030004B948801000000004603 +:1098300095F001000000004A96C001005E012E3440 +:10984000978401000200004BE4E501006401204020 +:10985000E1B101000900000786E4010000002EA725 +:1098600087C001001000001048C90100100000402E +:10987000F199010058010043F0C9010058010005A9 +:10988000E0C901000000004461B10100A00000A493 +:1098900062DD01000F8BA84081320000000000054E +:1098A00048B101001A0000409798010008002E40BE +:1098B00095B00100178B204B946C00000000004015 +:1098C000F1B10100148B004195C000001080001020 +:1098D00042C901001E8B2240E36D000000000044DD +:1098E00061B101004000001062DD01001A8BA84048 +:1098F00081320000AF8200881CB00000000000052B +:1099000048B101009A94004081300100EA8A004089 +:1099100081B200000C80000342C90100000000F881 +:1099200086B00100000000F888B00100238B44409D +:1099300081320000268BA24CFD7F0000278B004C5B +:10994000FD930000288B20F0566F0000000000F00F +:1099500056B3010000001C4081B2010000800010DD +:1099600044C9010064000040F19901007000000545 +:10997000F0C9010000000043F0B101000000004701 +:1099800061B101002000001062DD01002E8BA844AF +:10999000E0310000100000108CC80100008000467B +:1099A00044C9010040000040F19901006801000530 +:1099B000F0C9010064000043F0C901000000004745 +:1099C00061B101000000004662B10100368BA8447D +:1099D000E0310000AF8200881CB0000009000007E1 +:1099E00086E4010038002EA787C001008B002D05FA +:1099F00048B101003E8B2243E77D00000000004497 +:109A000045C10100418B2244E77D00000000004C6D +:109A100045C101000000004A19900100680120A220 +:109A2000E4B101008800004043990100458B230BFD +:109A3000E56D000000000041199001000080001059 +:109A400044C9010050000040F19901005801004351 +:109A5000F0C9010058010005E0C901000000004400 +:109A600061B101000000001062B101004A8BA84002 +:109A700081320000AF8200881CB000005C002E051F +:109A800048B101000080000342C90100000060F0FD +:109A900096B001009A94004181300100EA8A0040AA +:109AA00081B20000558BA249197C0000860000405D +:109AB00047990100598B0040E5B1000086002F490D +:109AC00019800100598BA2F2803200008B00004007 +:109AD0004799010000000042E79101005C8BA2461B +:109AE000197C0000A000004047990100608B0040F5 +:109AF000E5B10000A0002F4619800100608BA2F2A2 +:109B0000803200008B0000404799010000000041B6 +:109B1000E7910100A80000404399010034002DF0B6 +:109B200024B00100000000FB0CB00100000000FBAD +:109B300010B00100000000FB12B001000F0000F3A4 +:109B400016880100040000F314F401008B8B2640FA +:109B500081320000738B220A166C000058003D43CE +:109B600013E00100000000F882B00100040022F0C0 +:109B7000843000008795004081320100AF82008868 +:109B80001CB000000000000548B1010000000041C9 +:109B900013C00100728BA043136C00000000004052 +:109BA00013B00100688B004115D000008B8B220A96 +:109BB0008032000058003D4313E00100000000F82F +:109BC00082B00100040022F084300000879500403C +:109BD0008132010040002040E1B10100AF820088E5 +:109BE0001CB000000000000548B101008B8B224131 +:109BF000155000000000004111C001007F8BA04300 +:109C0000116C00000000004011B0010058003D43FD +:109C100011E00100000000F836B00100040022F05D +:109C2000003000000000005083B00100D9940047CC +:109C300061310100AF8200881CB000004292000533 +:109C4000483101000000004561B1010040000010F2 +:109C500062DD0100878BA84081320000AF8200885E +:109C60001CB000007B8B000548B10000370020408D +:109C7000E7B101000B95005181300100EA8A0040F4 +:109C800081B2000034002E41F5B101000011004006 +:109C9000E5990100938B00481990000034002E4193 +:109CA000F5B1010000110040E599010000800003BA +:109CB00042C90100000000F894B00100988B2245D1 +:109CC000237C0000B0002FF08CB00100000060F099 +:109CD0008CC00100900000404399010035002DF038 +:109CE0008CB0010058003E43E7E101009D8B224803 +:109CF000197C0000000000418DC001000000680ACE +:109D00008CC0010038002A4AE0B1010028000000A0 +:109D1000E0C901003C00201BE0B1010010800003FD +:109D200042C90100000000F838B00100000000F84E +:109D300026B00100040022F802300000AB8B2301A2 +:109D4000146C0000000000F880B00100000000F872 +:109D500082B001004C0020F0E4B10100440020403A +:109D6000E0B1010048002041E0B10100A8002D1041 +:109D700032B00100C39500F024300100B48BA2443E +:109D8000816C0000B28B2241197C00006E93004070 +:109D90003B300100D88BA2083C300000B48B00405F +:109DA00081B20000AB92004081320100D88BA20842 +:109DB0003C3000005000201CE0B101005400201392 +:109DC000E0B101004E002001E4B101004000200A92 +:109DD000E0B101000B95005F81300100EA8A00408C +:109DE00081B2000037000040479901004D9300F315 +:109DF00094300100938B224A80320000C08B0040D7 +:109E000081B2000037000040479901004D9300F3F4 +:109E10009430010058003E4397E001000000001B11 +:109E2000F0B101001F006000008C0100EA8A85117A +:109E3000803200000480000342C90100B0002FF00E +:109E40008CB00100000060F08CC001000B95005F39 +:109E500081300100EA8A004081B20000CA8B0049CB +:109E600019800000CF8B2241197C00006E930040C6 +:109E70003B300100D38BA2083C3000000B95005F03 +:109E800081300100EA8A004081B20000AB920040BC +:109E900081320100D38BA2083C3000000B95005F9B +:109EA00081300100EA8A004081B2000050002D108C +:109EB00032B0010054002DF038B001004E002DF0FA +:109EC00026B0010040002DF202B00100000000F0B9 +:109ED00014B00100300000108CC801000080004662 +:109EE00044C9010068012D4461B10100100068F20D +:109EF00080C8010000000008F0B101005801000511 +:109F0000E0C901000000000B37B001000000004074 +:109F100036D001005C012E4010C001000000000698 +:109F200080C001000000005281D00100A0940040D8 +:109F3000E43101002000004662DD0100E48BA8400E +:109F400023300000E592004081320100ED92004094 +:109F500081320100F28B82412340000020800010FA +:109F600042C90100EF8B2240E36D00000000004673 +:109F700061B101004000001062DD0100EC8BA840DF +:109F800081320000AF8200881CB000000000000594 +:109F900048B101000000001032B001000000004193 +:109FA00023B001000080001944C90100FA8B22414E +:109FB000197C0000F68BA3010C6C0000F78B0006E7 +:109FC00004B000000000000104B00100F98B200281 +:109FD000366C00000000001B04B00100FD8B000285 +:109FE000E0B10000FC8BA3010C6C0000FD8B0006AF +:109FF00004B000000000000104B00100000068028D +:10A0000016940100FFFF000B16D80100000068083D +:10A010003E9601000000001CF0B101000000004667 +:10A0200061B101002000001962DD0100028CA8135B +:10A03000E0310000398C22021450000044002D024F +:10A040000CD00100298CA20202500000108C225C6E +:10A050001F7C00002080000342C901000F8C2240B9 +:10A06000E36D00000000004761B1010040000010F6 +:10A0700062DD01000B8CA84081320000AF820088B5 +:10A080001CB000000000000548B1010044002D5C38 +:10A090001F80010048002DF038B001004C002DF069 +:10A0A00026B0010038002FF202B001002A8C2201F4 +:10A0B000146C00001D8C22461F7C0000000000462E +:10A0C0001F80010020002D0348B101001C8C22409C +:10A0D000E36D00000000004461B101004000001089 +:10A0E00062DD0100198CA84081320000AF82008837 +:10A0F0001CB0000038002F0548B10100000000F836 +:10A1000094B0010038002DF096B001000000004C22 +:10A11000E1C101002000000348C901000000224AFB +:10A12000F1B1010044000005F0C901000000004A3F +:10A13000F0B101000000004BE0B101000000004759 +:10A1400061B10100A00000A462DD0100268CA85CC2 +:10A150001F1000002A8C000548B10000000000021A +:10A1600038C00100348C220680320000000000500C +:10A1700033C00100328CA202366C000004008F0D47 +:10A1800042310000100000F810C801000000005C1F +:10A1900011800100F007004037980100E88B00A112 +:10A1A0001AB000000000000210C00100E88B00029D +:10A1B00036D000005000201CE0B1010054002013F4 +:10A1C000E0B101004E002001E4B101004000200A8E +:10A1D000E0B101003E8C005F01B0000037002D4669 +:10A1E00001B00100040000F380F401003D8CA043A5 +:10A1F000816C00000000005501B0010040002040CB +:10A20000E1B101000080001942C90100448C2240E4 +:10A21000E36D00000000004661B10100400000193C +:10A2200062DD0100418CA84081320000AF820088CD +:10A230001CB00000EA920040813201003080001022 +:10A2400042C901004B8C2240E36D00000000004435 +:10A2500061B101004000001062DD0100488CA8409F +:10A2600081320000AF8200881CB0000060012F0521 +:10A2700048B101000000000BE4B1010000000050F3 +:10A2800017F00100508C90F21640000000000041D1 +:10A2900017C001000000662017A40100320000A6CC +:10A2A0002AC00100000000F22A940100538C4548A6 +:10A2B0006131000000D0001E62DD0100588C284092 +:10A2C00005300000548C2248777D00005B8C0040F4 +:10A2D00081B200000000001562B10100648C2840CA +:10A2E00081320000588C004081B2000000001D0047 +:10A2F00092B00100618C2241197C000000800003B3 +:10A3000042C90100B09200F8003001005E8CA24109 +:10A310003B500000658C004900B00000FF07001EA4 +:10A32000008C0100B092004081320100658C004930 +:10A3300000B0000000001D4719800100688C225FFA +:10A34000016C0000ED95004081320100C5870000DE +:10A3500080B000006F8C225C1F7C00002080000316 +:10A3600042C901006F8C2240E36D000000000047ED +:10A3700061B101004000001062DD01006C8CA8405A +:10A3800081320000AF8200881CB000006F8C400555 +:10A3900048310000FFFF000794890100758C85CAD1 +:10A3A00094300000ED95185C1F0001000E00000FB6 +:10A3B0001E8C0100E686004081B200000B9518005B +:10A3C00080300100EA8A0047198000000000004048 +:10A3D00019800100EA8A2247197C0000AB920040F4 +:10A3E000813201007C8CA20880320000EA8A0040A1 +:10A3F00081B20000A09400400D3001009C0100409B +:10A4000045990100FFFF000B988801008B002D503B +:10A4100017F00100828C904C1640000000000041B3 +:10A4200017C00100848C2243E77D00000000004437 +:10A4300045C101000000662017A40100680100402A +:10A44000439901005C012EF280B0010002006240DD +:10A450007ECD01000000005781C0010000002E10D9 +:10A4600048B1010003000040F08D01000000000829 +:10A47000F0B1010058010005E0C9010000000044EE +:10A4800061B101000000001062B101008E8CA84093 +:10A4900081320000AF8200881CB00000000000057F +:10A4A00048B10100928C454861310000005000081D +:10A4B00062DD0100988C284005300000938C224812 +:10A4C000777D0000B0921D0800300100EA8A00404C +:10A4D00081B20000EA8A1D47198000003500004063 +:10A4E00047990100010063F384C801009D8CA043DB +:10A4F000856C00000000634085B00100A8000040AA +:10A500004399010037002FF024B00100010063F3EC +:10A5100082CC0100A88CA2419E060000EA8A224457 +:10A5200083700000360000404399010058003D430D +:10A53000E7E10100EA8A1FF0246C0000ED95004875 +:10A5400081300100C5872341836C0000C587004727 +:10A5500081B0000058003D4385E00100000000F894 +:10A5600036B00100000000F000B0010028000040FB +:10A5700083980100D994004761310100AF820088BF +:10A580001CB0000000002D0348B1010008002DF0B0 +:10A5900094B00100000000F88EB0010090002DF092 +:10A5A00014B001000000000548B10100998BA240E1 +:10A5B0008F7C0000B68C22478F7C0000998B00486E +:10A5C00019900000258D004081B2000036002D5DFD +:10A5D00005B4010037002DF380B00100000000F346 +:10A5E0008EB001005C003D4381E00100A8002DF029 +:10A5F00094B00100000000F024B001002000001021 +:10A6000086DC01004080000344C90100B191004A8A +:10A61000F031010036002F5C1F900100C48CA25065 +:10A620008F50000034002040E1B10100EA8A004070 +:10A6300081B200000000634181C00100C78CA043CB +:10A64000816C00000000634081B0010037002047AA +:10A65000E6B10100EA8A2247803200000400004788 +:10A660000CF401000000004F8F840100DC8C2247B5 +:10A670000C6C000058003D4381E00100DC8C1FF0B1 +:10A68000246C00000000005C1F80010000800010AE +:10A6900042C90100D58C2240E36D00000000004556 +:10A6A00061B101004000001062DD0100D28CA840C1 +:10A6B00081320000AF8200881CB00000D58C42407F +:10A6C00005300000000000449393010000001A5D73 +:10A6D00069930100DA8C23410D6C0000B78C0005F2 +:10A6E00048B10000ED95000548310100C5870048DC +:10A6F00081B00000EA8A22408F6C00000B95005F59 +:10A7000081300100EA8A004081B20000A2000040CE +:10A7100043990100000000F384B00100A6002D4918 +:10A7200019900100020000F280F40100B8002D40F1 +:10A7300081B20100000000F280C001000000004072 +:10A7400082F801001900004081980100EB8CA040C4 +:10A75000826C00002C01004081980100EB8CA3402A +:10A76000826C00000000004180B00100ED8C204CA4 +:10A77000856C00000000004185C00100860020407B +:10A78000E4B10100A2002042E6B10100EA8A0040E3 +:10A7900081B200009A94005081300100EA8A0040A2 +:10A7A00081B200000480000342C90100040022F0CD +:10A7B00080300000000000408DB00100DF950040B7 +:10A7C00087300100B0002F5C1F900100000060F096 +:10A7D00080C001000B95005F81300100EA8A0040D3 +:10A7E00081B200000400004081B20000EA8A2246E3 +:10A7F000197C0000A000004047990100010062F2AE +:10A8000096CC0100EA8AA640813200000B95004AEE +:10A8100081300100E094004695300100EA8A004052 +:10A8200081B20000EA8A2249197C000086000040BB +:10A8300047990100010062F280CC0100EA8AA6403B +:10A84000813200000B95004A81300100E0940047FE +:10A8500095300100EA8A004081B200004292004037 +:10A8600081320100EA8A005C1F900000EA8A004001 +:10A8700081B20000EA8A004081B20000BA000040C4 +:10A8800047990100010062F280C80100118D9040DB +:10A8900080320000FFFF624081980100A400004068 +:10A8A00047990100EA8A2240E56D0000EA8A0041EA +:10A8B000E5C100009A94004D81300100EA8A004011 +:10A8C00081B200005C00004047990100040022F0C2 +:10A8D0009630000000000040E1B10100008000035C +:10A8E00044C901000000004BE0B10100000000403D +:10A8F0008DB00100DF950040873001008B000040E3 +:10A9000047990100218D80F396300000000000403F +:10A91000E78101000000004719900100EA8A005C0D +:10A920001F900000340000404599010001000040E4 +:10A93000F599010000110040E5990100AB9200403B +:10A9400081320100368DA2088032000037000040BD +:10A9500047990100000000F382B00100000063513C +:10A9600083D001003400004047990100010063F3E7 +:10A9700084CC01002E8D9F42803200000000634293 +:10A9800085B001000000004503F001000000000157 +:10A9900000C00100308D375C613100000000001BF9 +:10A9A00062B10100318DA84B1910000000000000B9 +:10A9B00062B10100338DA840813200001A87174030 +:10A9C00081B200000080000342C9010090002DF018 +:10A9D00094B00100AC002DF030B0010035002DF036 +:10A9E00028B0010058003E43E7E1010001000018D3 +:10A9F000F0C901000000004AE0B101003800200069 +:10AA0000E0B101003C00201BE0B10100400020400B +:10AA1000E1B10100000000402BB00100EF940040C4 +:10AA20000D3001000000001816C00100458DA01473 +:10AA3000164400000000004117C001000E0000A2F3 +:10AA400044C9010000000018F8B10100B0002D1445 +:10AA5000F8B1010010500040879801004E8D224A45 +:10AA6000197C00000030004386C801000030000B54 +:10AA700016C801004E8DA440813200000000004144 +:10AA800017C0010001006E43869801002695003032 +:10AA900081300100528DA0411740000000000041AC +:10AAA00017C00100598D224A197C0000080000A23D +:10AAB00044C90100CC002DABF9B10100000000AB8E +:10AAC00017C00100588DA0F016440000000000419E +:10AAD00017C00100000064F082B001009000004047 +:10AAE000459901000000604131C00100BC000040F8 +:10AAF000439901005F8D060C80320000A00020F217 +:10AB0000E4B1010004000946191000009C01004056 +:10AB100045990100FFFF000B988801008B002D5024 +:10AB200017F00100648D904C1640000000000041B9 +:10AB300017C00100668D2243E77D0000000000443D +:10AB400045C101000000662017A401006801004013 +:10AB5000439901005C012EF280B0010002006240C6 +:10AB60007ECD01000000005781C0010000002E10C2 +:10AB700048B1010003000040F08D01000000000812 +:10AB8000F0B1010058010005E0C9010000000044D7 +:10AB900061B101000000001062B10100708DA84099 +:10ABA00081320000AF8200881CB000000000000568 +:10ABB00048B10100748D4548613100000050000823 +:10ABC00062DD0100758DA8400530000035001D4094 +:10ABD00047990100010063F384C801007B8DA04305 +:10ABE000856C00000000634085B001003700004024 +:10ABF00047990100010063F382CC01008B00004003 +:10AC00004799010000000045E79101000B95005FA6 +:10AC100081300100EA8A004081B200003700004024 +:10AC2000479901004D9300F394300100258D224A8D +:10AC300080320000C08B004081B20000370000402D +:10AC4000479901004D9300F394300100908B224A04 +:10AC500080320000C08B004081B20000360000400E +:10AC600043990100000000FB12B001000F0000F347 +:10AC700090880100040000F30CF40100BA8B220656 +:10AC8000906C00005C003D4313E00100A8002DF033 +:10AC900094B0010037002FF024B0010036002A5094 +:10ACA000E7D101000000634113C00100958DA0436E +:10ACB000136C000000000040E7B10100AF910010EC +:10ACC00086300100AF8200881CB00000978D4205DD +:10ACD000483100000000004493930100BA8B1A5DD4 +:10ACE0006993000036002D1086B001005C003D43E2 +:10ACF000E7E10100A8002DF094B0010035002FF02D +:10AD000024B0010001006BFB84C80100A28DA043A8 +:10AD1000856C000035002040E7B1010000000040D4 +:10AD200081B20100010063F312C80100A58DA043A8 +:10AD3000136C000000000040E7B1010040800003F8 +:10AD400044C90100B191004AF0310100AF8200888E +:10AD50001CB00000A88D42054831000000000044EE +:10AD60009393010000001A5D6993010037000040D1 +:10AD700047990100110063F382CC0100A18C2241AC +:10AD80009E060000350000404399010058003D43F5 +:10AD9000E7E10100000000F836B00100AB8C00F0E4 +:10ADA00000B000005E012D0548B10100B38D65F2D1 +:10ADB0001230000000993F4213F00100B88D224785 +:10ADC000E77D0000F58275881CB00000B28D004060 +:10ADD00081B2000000000047E791010000007542C9 +:10ADE000199001007500004061990100BA8DA8B169 +:10ADF0000C3000003694001094300100AF820088BF +:10AE00001CB000005E012E0548B10100C0A83D46FF +:10AE10000DE001000000004097B00100C48D224009 +:10AE2000E16D00000400024197400000C18D005018 +:10AE300043C10000D08D224B803200000000624BE5 +:10AE4000129401000900000796E40100000000A729 +:10AE500097C001003000001094C801000080004A33 +:10AE60004499010000000042F1B101005E01004B75 +:10AE7000F0C901005E010005E0C9010000000044C6 +:10AE800061B101002000004A62DD0100CE8DA840C2 +:10AE9000813200000080001044C901000000005011 +:10AEA000F1B101000400000996E40100000068A867 +:10AEB00097C00100D4000005E0C901000000004473 +:10AEC00061B101000000001062B10100D68DA84000 +:10AED00081320000AF8200881CB0000000993F4220 +:10AEE00013F00100DA8D6540813200003F0000F36D +:10AEF0009688010000000040E7B101000000755590 +:10AF000061B101000000000662B10100DE8DA840C1 +:10AF100081320000E38D224B803200000000004BA4 +:10AF200062B10100E18DA84081320000000000976D +:10AF300013B001000000009697B00100E98D2009D0 +:10AF4000966C0000E98D1F0996240000F5820088A8 +:10AF50001CB00000E48D004081B200009A940057BC +:10AF600081300100D58A000548B100002E00004064 +:10AF700043990100EF8D22F3803200009A94004241 +:10AF8000813001001A87004081B200000B95005209 +:10AF900081300100D58A0042198000009A94003A5D +:10AFA000813001000B95005281300100D58A0040AC +:10AFB00081B200000000004005B00100AD930040E8 +:10AFC00095300100D58A2240956C0000FA8DA24090 +:10AFD0001F7C0000B0920040813201001A870040BF +:10AFE00081B200000480000342C90100000000F2A9 +:10AFF00002B0010058930052953001005F93004B5E +:10B0000002B000001A87004081B200009495004011 +:10B0100095300100068EA20880320000068EA2162E +:10B02000803200001A872242197C00000000004B89 +:10B03000199001009A94003A813001001A8700406B +:10B0400081B20000002300A616B00100098E831E05 +:10B05000803200000008000B16DC01000000000038 +:10B060002AC00100E3940008803001000D8E005ECC +:10B07000179000000495004361310100BD9100402C +:10B080008D300100EB9400071614010000800010C1 +:10B0900042C90100158E2240E36D0000000000430C +:10B0A00061B101004000001062DD0100128EA84075 +:10B0B00081320000AF8200881CB000008C94005EDA +:10B0C00005100100B092004081320100198E220962 +:10B0D000803000000B95004013300100DA8A000533 +:10B0E00048B10000DD93004081320100D58A004064 +:10B0F00081B200000000004A1F900100208E224310 +:10B100003D7C000000000044199001000000004355 +:10B110003D800100218E00421990000014002D4551 +:10B120001F9001007D8E831E803200007D8E0044C2 +:10B1300019900000A292004081320100358EA208D1 +:10B1400080320000358EA21680320000318EA2427D +:10B15000197C00000082000204DC0100A09800407D +:10B160004799010030050041893001002E8EA2412F +:10B17000197C0000B0920040813201001A87004023 +:10B1800081B2000058930015943001005F93004B8A +:10B1900002B000001A87004081B20000DD93004039 +:10B1A000813201000000004B199001009A94003A8E +:10B1B000813001001A87004081B20000388E22429F +:10B1C000197C0000DD93004081320100398E00407F +:10B1D00081B20000AD93004081320100658E2241B2 +:10B1E000197C0000C000001598C80100658EA00BF6 +:10B1F000996C00003000001080C801000080004001 +:10B200004499010000000050F1B10100000000036A +:10B21000F0B101000000004261B1010000000040F7 +:10B2200062B10100418EA800E0310000AF820088C9 +:10B230001CB000000000000548B10100C00000156E +:10B2400098C8010030002E0B99D0010000006A5010 +:10B2500099C00100C000620180CC01000C80000395 +:10B2600042C901002D002DF022B001000000004C69 +:10B2700080C001000000005C23800100D4003F4139 +:10B28000E7E101000B000011E4F501002F00204769 +:10B29000E7B50100528E230B816C00000000004FC7 +:10B2A000E59101000000000880B001000000000BE3 +:10B2B00003B001000000001502D00100E39400007B +:10B2C0002A4001000000004361B10100400000106D +:10B2D00062DD0100578EA84081320000AF820088F5 +:10B2E0001CB00000B092000548310100C000000110 +:10B2F00080CE0100638E2611003000001000000097 +:10B300002AC801000000000880B001000000000110 +:10B3100080C00100C00000409998010000000001B9 +:10B3200098D00100E394004C02300100C0000040BE +:10B33000039801006A8E004081B2000030002F089F +:10B3400080B00100C0000015F4C90100C000000178 +:10B35000E4CD0100C000004003980100E394000028 +:10B360002A4001006F8E22441F7C0000AC002F4059 +:10B3700013B0010000000001E0C10100B000004076 +:10B3800047990100708E0001E0D10000BD9100409E +:10B390008D300100806300A616B00100EB94000719 +:10B3A000161401000080001042C90100788E22406E +:10B3B000E36D00000000004361B101004000001097 +:10B3C00062DD0100758EA84081320000AF820088E6 +:10B3D0001CB000008C94005E051001007B8E2209D9 +:10B3E000803000000B95004081320100D58A0005B5 +:10B3F00048B100007D8E004A1F9000000000000050 +:10B4000010B0010024002D1510C0010028002DF0FF +:10B4100016B0010022002DF026B0010014002FF21A +:10B420000CB0010000000001E0D10100000000109C +:10B4300032B001000000000B1BB0010004001F151A +:10B440001A5000000000004023B00100000000017D +:10B450002AB001004B94004035B000002F0020407E +:10B46000E7B10100C18EA2451F7C00002400200B23 +:10B47000E0B1010028002013E0B101002200200605 +:10B48000E4B10100978E225C1F7C00000000005C8C +:10B490001F8001003080001042C90100978E2240B9 +:10B4A000E36D00000000004761B1010040000010A2 +:10B4B00062DD0100938EA84081320000AF820088D7 +:10B4C0001CB000000000000548B101000080001918 +:10B4D00042C90100BA8E2240E36D0000A88E2242CC +:10B4E000197C000005940040813201005792004011 +:10B4F00081320100B58E224B8032000000000043F3 +:10B5000061B101004000001062DD01009E8EA84084 +:10B5100081320000AF8200881CB00000A48E22415E +:10B52000197C0000C692004011300100A58E000574 +:10B5300048B10000B092004081320100A78E22097C +:10B54000803000000B95004081320100F9820040FC +:10B5500005B0000005940040813201005392004084 +:10B56000813201000000004361B101004000001081 +:10B5700062DD0100AB8EA84081320000AF820088FE +:10B580001CB00000B18E2241197C0000C692004020 +:10B5900011300100B28E000548B10000B0920040A9 +:10B5A00081320100B48E2209803000000B950040EA +:10B5B00081320100F982004005B000000000004324 +:10B5C00061B101004000001062DD0100B68EA840AC +:10B5D00081320000AF8200881CB00000000000052E +:10B5E00048B10100BD8E2241197C0000C692004086 +:10B5F00011300100BE8E000548B10000B09200403D +:10B6000081320100C08E2209803000000B9500407D +:10B6100013300100DA8A004005B0000000800019F4 +:10B6200042C90100C88E2240E36D000000000043C3 +:10B6300061B101004000001062DD0100C48EA8402D +:10B6400081320000AF8200881CB0000000000005BD +:10B6500048B101000000004005B00100CC8E22413D +:10B66000197C0000C692004011300100CD8E00050B +:10B6700048B10000B09200408132010008002D0A5C +:10B6800084B00100000000F082B0010014002040EE +:10B69000E1B10100D28E031E80320000D38E004142 +:10B6A00087B000002100004087980100CE93004041 +:10B6B000813201000000005C1F900100D78E22093A +:10B6C000803000000B95004013300100DA8E2244D8 +:10B6D000197C00000B95004F8130010000000044F0 +:10B6E00019800100D58AA24A1F7C0000DA8A004036 +:10B6F00081B20000BA002040E5B10100E08E9C1745 +:10B7000080320000CC000040439901009D9500402C +:10B71000813201004495004013300100C000004018 +:10B7200043990100C4002DF082B00100789500F02B +:10B7300084300100B092004081320100DA8A22098F +:10B74000803000000B95004013300100DA8A004081 +:10B7500081B200002E00004043990100EC8E22408F +:10B76000E76D00003200004043990100F48EA240D2 +:10B77000E56D00009A930040813201002400200B07 +:10B78000E0B1010028002013E0B1010022002006F2 +:10B79000E4B101001400200AE0B10100DA8A2209B4 +:10B7A000803000000B95004013300100DA8A004021 +:10B7B00081B200009A93004081320100539300400F +:10B7C00081320100028F2241197C00000000000B31 +:10B7D00099B0010004001F1598500000028F20014D +:10B7E000986C00007000000348C9010000002E465C +:10B7F0001F90010000000050F1B1010000000003A3 +:10B80000F0B101000000004261B10100A00000A4FD +:10B8100062DD0100FF8EA800E0310000000000059D +:10B8200048B10100AC002F0010B001000000000181 +:10B83000E0C1010014002F1510C001000000000A33 +:10B8400080B001000000600180D0010000000047CE +:10B8500019900100848E2209803200000B950009A6 +:10B8600080300100848E004013B00000008000038F +:10B8700042C90100000000F082B001001300004046 +:10B88000879801000000004C43C10100CE9300F0F6 +:10B8900084300100D58A005C1F9000002C002040FD +:10B8A000E7B101002D002040E7B10100D58A004238 +:10B8B00019800000C093004081320100E0940048EC +:10B8C000953001000000004561B10100400000100A +:10B8D00062DD0100178FA84013300000AF8200889E +:10B8E0001CB000001D8F000548B100001C8F0040F7 +:10B8F00013B000000000000012B00100080000407A +:10B900004399010014002DF082B00100040022F0E0 +:10B91000843000001300004087980100CE9300405F +:10B92000813201000000005C1F900100358F00098A +:10B9300000B00000D58A8742191000008B002F4705 +:10B9400019800100D58A0040E79100002F000040D7 +:10B9500047990100338F2247E77D00003492004071 +:10B96000E7310100338F2200803200002E8FA24089 +:10B970001F7C0000B092004081320100338F0040F4 +:10B9800081B20000300000404399010032002DF2E6 +:10B9900094B00100589300F2023001005F93004B15 +:10B9A00002B000000000000548B10100348F0040E3 +:10B9B00001B000000000004005B001003A8F2200F5 +:10B9C00080320000398FA242197C0000AD93004004 +:10B9D000813201003A8F004081B20000DD930040C7 +:10B9E00081320100C68F225C1F7C00000000005CD9 +:10B9F0001F8001000080001042C90100428F2240D8 +:10BA0000E36D00000000004561B10100400000103E +:10BA100062DD01003F8FA84081320000AF820088C4 +:10BA20001CB00000C68F000548B10000A292004083 +:10BA300081320100498FA20880320000498FA2168E +:10BA4000803200009A94004D813001000082000293 +:10BA500004DC01001A87004081B20000740000403D +:10BA600043990100000000F882B00100000000F0DE +:10BA700084B001000000004196B00100578F2242BF +:10BA8000961400000080001044C901006400684062 +:10BA90009798010000000041F0B101000000004251 +:10BAA000F0B1010070000005E0C901000000004590 +:10BAB00061B101002000001062DD0100548FA84038 +:10BAC000813200000000005C1F9001000000004572 +:10BAD00061B101004000001062DD0100588FA85CD8 +:10BAE0001F000000AF8200881CB000005E012D0521 +:10BAF00048B101005C8F65F21230000000993F42AE +:10BB000013F00100618F2247E77D0000F582758800 +:10BB10001CB000005B8F004081B2000000000047B5 +:10BB2000E79101000400750996E40100008000100F +:10BB300044C9010000000044F1B10100000068A800 +:10BB400097C0010000000003E0B101000080000385 +:10BB5000449901000000004461B1010000000010A0 +:10BB600062B10100698FA840E1310000AF82008816 +:10BB70001CB0000000993F4213F001006D8F650575 +:10BB8000483100003F0000F39688010000000040AB +:10BB9000E7B101000000754081B20100758F224BB2 +:10BBA000803200000000005561B101000000004B30 +:10BBB00062B10100738FA8408132000000000007CD +:10BBC00016B001000062000B16DC01003492004048 +:10BBD000813201008D8F220080320000E393005FEC +:10BBE00001100100778F2240956C0000008000104A +:10BBF00044C9010000000050F1B101000000000341 +:10BC0000F0B101000000004261B10100000000102D +:10BC100062B101007F8FA800E0310000AF82008890 +:10BC20001CB000000000000548B1010004800003C2 +:10BC300042C90100000000F202B001005893005216 +:10BC400095300100B092004081320100778F22418F +:10BC5000975000000C80000342C90100000000F072 +:10BC600000B001000000005C018001005F93004B08 +:10BC700002B00000778F000548B10000EB9400404F +:10BC8000033001001780000344C9010000F0000CDC +:10BC9000968801000000634C97F0010010800003BB +:10BCA00044C90100000000ABE1B101008C94005ECA +:10BCB00005100100030000071AF401000700000747 +:10BCC0001688010000B5000D46C90100978F30406D +:10BCD000813200000000000BE681010000B7000D7A +:10BCE00046C901000000000BE68101001000100FA2 +:10BCF00094F401009304005F95040100399300401F +:10BD000081320100A18F2250FD7F00009F8F4640AD +:10BD10008132000000001E4131D3010000002E05D9 +:10BD200048B1010000000040E1B101000000004006 +:10BD30000FB001009B920041813001001A87004042 +:10BD400081B20000A292004081320100B38FA208AC +:10BD500080320000B38FA216803200000082000201 +:10BD600004DC01000000004503F0010000000001B8 +:10BD700000C00100AC8F375C613100000000001B87 +:10BD800062B10100B08F284081320000AD8F0040C9 +:10BD900081B200000000000062B10100B08FA84035 +:10BDA000813200001A87174081B2000074002240DF +:10BDB000F1B1010000000040E1B10100E094004A4F +:10BDC00095300100C093005C1F100100498F0040B6 +:10BDD00081B200002F00004047990100C48F224724 +:10BDE000E77D000034920040E7310100C48F22005B +:10BDF00080320000BF8FA2401F7C0000B092004044 +:10BE000081320100C48F004081B200003000004048 +:10BE10004399010032002DF294B00100589300F2D2 +:10BE2000023001005F93004B02B0000000000005EB +:10BE300048B10100E094004895300100C093005CD7 +:10BE40001F100100C98F8742191000008B002F4777 +:10BE50001980010000000040E79101000B950042AD +:10BE600081300100D58A004081B20000C0930040BB +:10BE700081320100D58A005C1F900000BA0020408A +:10BE8000E5B101004495004081320100C00000404E +:10BE900043990100C4002DF082B00100789500F0B4 +:10BEA00084300100B0920040813201000B950045C2 +:10BEB00081300100D58A2242197C00009A94003A10 +:10BEC00081300100D58A004081B2000004000040AA +:10BED00081B20000A292004081320100DE8FA208F0 +:10BEE00080320000DE8FA216803200009A94004754 +:10BEF000803001000082000204DC01001A8700404B +:10BF000081B200001080000344C9010000E100A6D6 +:10BF100084B0010000000040F1B1010000000040C9 +:10BF2000F1B1010000006007849401008C94005E70 +:10BF300005100100D58A004081B200008A0000404F +:10BF400047990100B0920041E7410100DA8A0040C0 +:10BF500081B200009A930040813201005393004067 +:10BF600081320100000000012CB00100000000152A +:10BF700010B001000000000010C0010004001F0A02 +:10BF80002C5000000000001032B001001E95000689 +:10BF900004300100F68FA2481F7C0000F48F844813 +:10BFA0001F100000AC00004047990100F68F000A06 +:10BFB000E0C100000000000A02B00100BD910001D4 +:10BFC0008C3001000000004361B10100400000100E +:10BFD00062DD0100F78FA84081320000AF82008847 +:10BFE0001CB000000000000548B101000000000284 +:10BFF00010C0010004902202145000000894004573 +:10C000001F000100EE8F225C1F7C00000000004733 +:10C0100061B101004000001062DD01000090A85CE9 +:10C020001F000000AF8200881CB00000EE8F0005EA +:10C0300048B100000000000B1BB0010008002D40BB +:10C0400085B00100000000F082B001000000004057 +:10C0500005B00100CE93004187300100000000458B +:10C0600061B101004000001062DD01000A90A840AB +:10C0700081320000AF8200881CB000000000000583 +:10C0800048B1010010902209803000000B9500405B +:10C090001330010014902244197C00000B95004FCE +:10C0A000813001001490A2471F7C00000000004472 +:10C0B00019800100FF070008008C01002290224A2D +:10C0C0001F7C00001A90A21602300000B0920040BF +:10C0D000813201002F002040E7B10100D58A0040E5 +:10C0E00081B200002D002D082AB001001E902242CE +:10C0F000197C0000DD930040813201001F90004058 +:10C1000081B20000AD9300408132010030002E006A +:10C110002AD0010032002A15E4B10100D58A0016A8 +:10C12000E4B1000035902216023000000000000843 +:10C130002AB0010094950040953001002790A2405C +:10C14000116C0000369022402D6C0000AC000040C5 +:10C1500047990100B0002B01E0C10100002B00A6AF +:10C1600016B0010000000001E0D10100E3940008D6 +:10C17000803001002E90005E17900000049500436F +:10C18000613101000000004361B101004000001076 +:10C1900062DD01002F90A84081320000AF8200884C +:10C1A0001CB000000000000548B10100EB9400073E +:10C1B000161401008C94005E05100100B09200403E +:10C1C000813201002F002040E7B10100DA8A0040EF +:10C1D00081B200000000000B1BB0010004001F151D +:10C1E0001A500000439020161A6C000070000003E3 +:10C1F00048C9010000002250F1B101000000000315 +:10C20000F0B1010000000000E0B1010000000042B8 +:10C2100061B10100A00000A462DD01004090A846C9 +:10C220001F1000000000000548B1010000000000E0 +:10C2300010B001000000001510C001000000000A4D +:10C240002AB001000000000A2CD00100AC002F40F1 +:10C2500023B001004A9084451F1000004B90000A53 +:10C26000E0C100000000000A02B001004B94004051 +:10C2700035B000000080001942C9010053902240EF +:10C28000E36D00000000004361B1010040000010B8 +:10C2900062DD01004F90A84081320000AF8200882B +:10C2A0001CB000000000000548B101006390A2022C +:10C2B0001A500000649022402D6C00000080001095 +:10C2C00044C9010000000050F1B10100000000036A +:10C2D000F0B10100FF070008E08D010000000042FE +:10C2E00061B101000000001062B101005A90A84045 +:10C2F00081320000AF8200881CB000000000000501 +:10C3000048B101002F002047E7B501000C80000371 +:10C3100042C90100100000F010C80100F007004001 +:10C320001B9801006490005C118000000000000276 +:10C3300010C00100C69200401F000100000000056F +:10C3400048B101006890230D2C6C000000000040F3 +:10C350001F900100719022461F7C000000000046E3 +:10C360001F8001007080000342C9010071902240CB +:10C37000E36D00000000004261B1010040000010C8 +:10C3800062DD01006D90A84081320000AF8200881C +:10C390001CB000000000000548B1010008002D405D +:10C3A00085B00100000000F082B0010000000040F4 +:10C3B00005B00100CE930041873001000000004528 +:10C3C00061B101004000001062DD01007690A840DC +:10C3D00081320000AF8200881CB000000000000520 +:10C3E00048B101007C902209803000000B9500408C +:10C3F0001330010080902244197C00000B95004FFF +:10C40000813001008090A2471F7C000000000044A2 +:10C4100019800100FF070008008C01009590224A56 +:10C420001F7C00008690A21602300000B0920040EF +:10C43000813201002F002040E7B10100D58A004081 +:10C4400081B200002D002D082AB0010091902242F7 +:10C45000197C00008A90A2F384300000000000A53F +:10C4600085B001000000004185D00100D4003E41AC +:10C4700085E001008E9022401F7C00000000005AE1 +:10C48000119001000B000008E4F50100DD9300406D +:10C49000813201009290004081B20000AD930040D3 +:10C4A0008132010030002E002AD0010032002A150E +:10C4B000E4B10100D58A0016E4B100009890A216FC +:10C4C00002300000B092004081320100E79000404D +:10C4D00081B200002D002D082AB00100A69022474D +:10C4E0001F7C0000A2902242197C00009D90A2F3C4 +:10C4F00084300000000000A585B00100000000416C +:10C5000085D00100D4003E4185E00100A190224089 +:10C510001F7C00000000005A119001000B00000871 +:10C52000E4F5010058012D002AD0010060012DF032 +:10C5300010B00100000000F02CB00100358E00406A +:10C5400081B200009495004195300100AE90A208A0 +:10C5500080320000AE90A216803200000000004140 +:10C5600097B00100AC90230D026C00000000004168 +:10C5700097C001005F93004B02B00000E7900005F8 +:10C5800048B10000AC002F0114B00100B0002B0135 +:10C59000E0C10100002B00A616B001000000000160 +:10C5A000E0D10100BE90230D026C0000008000105D +:10C5B00044C9010000000050F1B101000000000377 +:10C5C000F0B101000000004261B101000000001064 +:10C5D00062B10100B790A800E0310000AF8200888E +:10C5E0001CB000000000000548B101000C800003F1 +:10C5F00042C90100100000F022C801000000005CE8 +:10C60000238001000000000184B00100C190230DCF +:10C61000026C00000000000D02B0010000000008E4 +:10C6200080B00100C69022401B6C0000E394000122 +:10C6300084500100CE902240856C00000000000173 +:10C6400080C001001080001046C901000000004FAA +:10C650004381010000000042F0B1010020000040D1 +:10C66000F0C9010000000016F0B101000000004315 +:10C6700061B10100A00000A162DD0100CC90A81111 +:10C68000E0310000DD90005E17900000D190230D96 +:10C69000026C00000000000D02B00100000000016B +:10C6A00084D00100D69022401B6C0000049500430A +:10C6B00061310100DD902240856C00000000000126 +:10C6C00012C001001080001046C901000000004F98 +:10C6D0004381010000000042F0B1010000000009A8 +:10C6E000F0B1010000000018F0B10100A00000A1AD +:10C6F00062DD0100DB90A811E03100000000004382 +:10C7000061B101004000001062DD0100DE90A80A66 +:10C7100002300000AF8200881CB00000B09200051B +:10C7200048310100E590230D026C0000FF07001165 +:10C73000008C0100B092004081320100EB940007B0 +:10C74000161401008C94005E051001002F0020409B +:10C75000E7B10100DA8A004081B2000000800003E6 +:10C7600042C90100000000F882B00100000000F89A +:10C770008CB00100000000F08EB0010097930040E3 +:10C78000133001000000004085B00100CE9300414D +:10C790008730010053930040813201000080001077 +:10C7A00042C90100F8902240E36D000000000045FE +:10C7B00061B101004000001062DD0100F490A8406A +:10C7C00081320000AF8200881CB00000000000052C +:10C7D00048B10100FA902209803000000B9500401A +:10C7E000133001000000000B1BB001000000001519 +:10C7F0001AD001000191A241197C000094950040DB +:10C80000953001000000001680B201000A9127084F +:10C8100080320000279000002AC00000949500415B +:10C82000953001000000001680B201000591270834 +:10C8300080320000AE9000002AC0000000000041DD +:10C8400097B001000891230D026C00000000004128 +:10C8500097C001005F93004B02B00000000000058C +:10C8600048B10100D58A2242197C00009A94003A0E +:10C8700081300100D58A004081B200000E91004A4B +:10C880001F900000D8920000103001000000001539 +:10C8900010C001000000001032B001001E9500061B +:10C8A000043001001791A2441F7C00000000000B1F +:10C8B0001BB001000000000A2CD001000000000A9B +:10C8C00002B00100BD9100018C3001000080001910 +:10C8D00042C901001E912240E36D000000000043A8 +:10C8E00061B101004000001062DD01001A91A84012 +:10C8F00081320000AF8200881CB0000000000005FB +:10C9000048B101000000000210C00100279122027E +:10C9100014500000089400451F0001001091225C93 +:10C920001F7C00000000004761B1010040000010C2 +:10C9300062DD01002391A85C1F000000AF82008827 +:10C940001CB000001091000548B1000008002D4007 +:10C9500085B00100000000F082B00100000000403E +:10C9600005B00100CE930041873001000000004572 +:10C9700061B101004000001062DD01002C91A8406F +:10C9800081320000AF8200881CB00000000000056A +:10C9900048B1010032912209803000000B9500401F +:10C9A0001330010035912244197C00000B95004F93 +:10C9B000813001000000004419800100FF070008D9 +:10C9C000008C01004391224A1F7C00003B91A2167B +:10C9D00002300000B0920040813201002F00204060 +:10C9E000E7B10100D58A004081B200002D002D087A +:10C9F0002AB001003F912242197C0000DD930040E3 +:10CA0000813201004091004081B20000AD930040AE +:10CA10008132010030002E002AD0010032002A1598 +:10CA2000E4B10100D58A0016E4B100002390A216FB +:10CA300002300000B0920040813201002F002040FF +:10CA4000E7B10100DA8A004081B20000D892004AC2 +:10CA50001F1001003890001032B000008A00204002 +:10CA6000E7B101004D91A241197C0000B092004055 +:10CA7000813201005091004081B2000058930015AE +:10CA8000943001005F93004B02B0000000000005ED +:10CA900048B1010052912242197C00009A94003A58 +:10CAA000813001000B95004581300100D58A00409E +:10CAB00081B20000F48E00451F9000009A93004060 +:10CAC000813201005393004081320100389000010F +:10CAD0002CB00000A2920040813201006591A208B2 +:10CAE000803200006591A2168032000000820002B0 +:10CAF00004DC01000000004503F00100000000011B +:10CB000000C001005E91375C613100000000001B35 +:10CB100062B1010062912840813200005F910040C3 +:10CB200081B200000000000062B101006291A840E3 +:10CB3000813200001A87174081B200005801200896 +:10CB4000E0B1010060012016E0B101009A930047B6 +:10CB50001F10010053930040813201003890000102 +:10CB60002CB00000A29200471F1001007891A2088B +:10CB7000803200007891A216803200007491A242A7 +:10CB8000197C00000082000204DC0100A098004033 +:10CB90004799010030050041893001005893001584 +:10CBA000943001005F93004B02B000001A870040F0 +:10CBB00081B20000DD930040813201000000004B93 +:10CBC000199001009A94003A813001001A870040C0 +:10CBD00081B2000058012008E0B101006001201678 +:10CBE000E0B10100D89200103230010038900040CE +:10CBF00013B00000A2920040813201008991A20886 +:10CC0000803200008991A21680320000008200026A +:10CC100004DC01000000004503F0010000000001F9 +:10CC200000C001008291375C613100000000001BF0 +:10CC300062B101008691284081320000839100405A +:10CC400081B200000000000062B101008691A8409E +:10CC5000813200001A87174081B200000080000373 +:10CC600042C90100000000F882B00100000000F895 +:10CC70008CB00100000000F08EB0010097930040DE +:10CC8000133001000000004085B00100CE93004148 +:10CC90008730010053930040813201000080001072 +:10CCA00042C9010098912240E36D00000000004558 +:10CCB00061B101004000001062DD01009491A840C4 +:10CCC00081320000AF8200881CB000000000000527 +:10CCD00048B10100358E2209803000000B950040DC +:10CCE00013300100358E004081B2000014002D4544 +:10CCF0001F9001007D8E004419900000A091A24178 +:10CD0000197C00000000004A1F900100E88F0040DD +:10CD100081B200009A93004A1F1001005393004013 +:10CD200081320100389000012CB00000D892004000 +:10CD3000813201003890001032B00000F48E0045BE +:10CD40001F9000000000004137C3010000000041B7 +:10CD500033C301003600000102CC01000000D240C4 +:10CD600081B20000AC9185178032000000009F481E +:10CD700003D00000AE919C178032000000009F4C51 +:10CD800003D000000000800134C301004080000394 +:10CD900044C901000000004AF0B101000000004059 +:10CDA000F1B1010000000012F0B10100B4920041A5 +:10CDB000E13101000080004344C90100100000403F +:10CDC000F199010000000048F0B1010000000049A5 +:10CDD000F0B1010040000003E0C90100000000457F +:10CDE00061B101000000004362B101000000A840F1 +:10CDF00081B20000BA91004081B20000BA00204028 +:10CE0000E5B10100B0002F018CD001000000004608 +:10CE1000E0C10100AC002F4013B00100CC002D0197 +:10CE2000E0C10100C4919C17803200009D95004034 +:10CE300081320100C6912247197C00000000005F8A +:10CE4000139001004495004719100100C0002D44C3 +:10CE50001F900100C4002DF082B00100789500F011 +:10CE600084B0000090002D0548B10100DB91A24B79 +:10CE70001F7C00002E92A24C1F7C0000DB911F1C27 +:10CE8000E06D0000DE91A20180320000A8002D4676 +:10CE90008FB00100D4911F1CE06D0000B400004071 +:10CEA00043990100D69122F03A6C00002B921FF0BA +:10CEB0003A6C00000000A24080B200000000804FE9 +:10CEC0008FB001008A000040439901002C9220425B +:10CED000E76D0000DA9122408032000000008059A6 +:10CEE0008FB00100000080588FB00100DD9122401A +:10CEF000803200000000805C8FB001000000805B89 +:10CF00008FB00100AC00004043990100B0002DF04B +:10CF100084B00100E291A242246C0000EB9123F066 +:10CF2000026C0000E891A2F0803200002D92A24233 +:10CF3000246C00002D92A241036C0000E791A240F6 +:10CF400080320000000080518FB00100000080524C +:10CF50008FB001002D921F12845000002D92A0016D +:10CF6000846C0000DB91004081B200008B00004027 +:10CF7000439901001692A246E77D0000140000408C +:10CF800043990100089222F014300000F491200A25 +:10CF9000026C00000592031E80320000F391A24053 +:10CFA00080320000000080448FB001000000804902 +:10CFB0008FB00100F991220A026C0000FC91A2419D +:10CFC000197C0000F891A2408032000000008055DA +:10CFD0008FB00100000080568FB00100FB91A2408D +:10CFE00080320000000080438FB0010000008048C4 +:10CFF0008FB001000000000182B001000000000AB3 +:10D0000082D0010002922091836C00000192A24024 +:10D0100080320000260080408F9801002700804069 +:10D020008F9801000492A240803200001F008040CF +:10D030008F980100200080408F9801000792A24045 +:10D0400080320000220080408F9801002300804041 +:10D050008F98010088002D448FB001001192A241E9 +:10D06000197C00000E92A2433D7C00000E92A2F2B9 +:10D07000026C00000000A24080B200000000804965 +:10D080008FB001001092A240803200000000804367 +:10D090008FB00100000080488FB001000E92A09177 +:10D0A000036C00000C9222433D7C00001592A240CC +:10D0B00080320000280080408F98010029008040C5 +:10D0C0008F98010014000040439901001F92A2F0C4 +:10D0D0001430000088002D448FB001001C92A2F291 +:10D0E000026C00000000A24080B2000000008049F5 +:10D0F0008FB001000E922241197C00000C92209109 +:10D10000036C00000E92004081B200002392200ABE +:10D11000026C00002292A240803200000000804495 +:10D120008FB00100000080498FB001002892220AD0 +:10D13000026C0000FC91A241197C00002792A240E1 +:10D1400080320000000080558FB001000000805642 +:10D150008FB001002A92A24080320000000080437C +:10D160008FB00100000080488FB001003092004372 +:10D1700095B000003092004195B00000309200421E +:10D1800095B000003092004495B000003092004C01 +:10D1900095B00000E0940040813201003392A2403B +:10D1A000803200000000804B8FB001000000804CF6 +:10D1B0008FB001002D000040439901002E002FF395 +:10D1C00084B001003892A2F3963000000000804045 +:10D1D00001B001002D002A41E7D10100D4003D41FA +:10D1E00085E001000B0000F200E401003E92225AAB +:10D1F000017C0000000000401F9001003F92005A97 +:10D2000001800000000000401F8001000000634119 +:10D2100085C001000000A0A5856C01000000E3406E +:10D2200085B001000C80000342C9010012000040DB +:10D2300087980100DF9500F08CB000004C922240EE +:10D240000F6C000000002F0548B101004992A24B6D +:10D25000197C00004A9222F0186C00000000604B1C +:10D26000199001001693000710300100F982004068 +:10D2700005B000004E92225A1F7C00009B92004095 +:10D2800081300100F982004005B0000000002F0548 +:10D2900048B101000000604B19900100169300078F +:10D2A00010300100F982004005B0000000002F0599 +:10D2B00048B101000000604B19900100169300076F +:10D2C000103001000000804005B00100579233404B +:10D2D000813200005A92A1AD95200000689213405F +:10D2E00081B200000000134A5A8301003000394522 +:10D2F00095E001001F00000F5ED801000000005AF9 +:10D300005F9001000000004045B0010000000004F3 +:10D3100048B00100000000054AB001000000000C08 +:10D3200058B00100000000074EB00100A884004082 +:10D330005D9801000000005861B101000000004A42 +:10D3400062B101000000A84197B000006592004062 +:10D3500081B200000000804097B001006992600730 +:10D3600096300000FFFF004B84890100000070C26E +:10D3700024B001007392A245257C00006D923120FB +:10D380008530000074922212487F00005804111268 +:10D39000480301001000001296E401000000004B59 +:10D3A0001E9401000000805A1F90010073923140CA +:10D3B00081320000000000B424B0010074922212F7 +:10D3C000487F0000580400408132010000002F0512 +:10D3D00048B1010081920BF084300000000011126E +:10D3E000488301007E922250857000005E0100405B +:10D3F00043990100419400F2963001009304001219 +:10D40000943001000000005A1F900100100000122B +:10D4100096E401000000804B1E94010010000042C1 +:10D4200010F4010000B73F4311F0010007000008AD +:10D430008A880100849230A10C3000008792224536 +:10D44000E67D00007492104081B2000000002A4581 +:10D45000E691010000001012488301000000114015 +:10D4600081B201000000604B858001005E01004038 +:10D4700043990100419400F29630010000800010B1 +:10D4800044C90100D8000040819801002E002D05FC +:10D4900048B1010092922240E76D000080000040F8 +:10D4A00080C8010000000040F0B101000900000840 +:10D4B00086E40100000068A787C001000000004466 +:10D4C00061B101000000001062B101009692A80550 +:10D4D000E03100001000001296E401000014004B3F +:10D4E00096DC01000000804B1E9401001000000F2C +:10D4F00084F401001F000042848801009F922240B2 +:10D5000080320000A092004268B10000000000429A +:10D510006AB10100A092315A1F0000000000914240 +:10D5200048930100A2923540813200006D00004016 +:10D5300061990100A89228B12C300000A392224DDD +:10D54000757D0000000000402DB0010000009540F6 +:10D5500011B001006D00004061990100A892A8B1CE +:10D56000103000000000954081B201007F000040B3 +:10D5700061990100AF9228B110300000AB929FBAC0 +:10D58000803200000000804011B0010000008024C3 +:10D59000118401000000005F61B101000010000073 +:10D5A00062DD01000000A84081B20000B19200409D +:10D5B00081B20000AC94004047990100B59232401E +:10D5C00081320000BB9222F896300000000000F883 +:10D5D00090B00100000000F092B001000100004B8B +:10D5E000F0CD010020009248E0C901006C0000402D +:10D5F00061990100BF9228B192300000BB92224C89 +:10D60000757D00000400124091B000006C000040E5 +:10D6100061990100BF92A8B190300000FF0000485E +:10D62000968801000000004B90D001000100004BE3 +:10D63000F0CD010020000048F0C90100000092492F +:10D64000E0B101000C002D1048B10100FF070008F7 +:10D65000828C0100FF0700F0008C01000000A24155 +:10D6600000EC0000CC92221A006C0000B092000086 +:10D67000343001000000005049C10100C892A241AD +:10D68000235000000000804081B201000C002D10EA +:10D6900048B10100FF070015828C0100FF0700F070 +:10D6A000008C01000000A24100EC0000D592220D88 +:10D6B000006C0000B09200001A3001000000005021 +:10D6C00049C10100D192A2412350000000008040D6 +:10D6D00081B20100DA92831E803200000000004413 +:10D6E0001990010024002D012CB0010028002DF01C +:10D6F00016B0010022002DF026B0010014002FF218 +:10D700000CB0010000008040E1B101003000004099 +:10D710009798010060972E4081B201000000004000 +:10D72000F1B10100E192A2419750000064973E439D +:10D730009DE0010000008040E1B1010064973E439C +:10D740009DE001000000800BE8B1010064973F43B9 +:10D750009DE00100000000F016C0010000008040C4 +:10D76000E1B1010064973F439DE00100000000F437 +:10D7700016B0010000008040E1B1010060173D4398 +:10D780009DE00100100080A116E4010000B5000D2D +:10D7900042C90100F092304717040000F392A20B37 +:10D7A000E67D00000000904281B0010000B7000D4E +:10D7B00046C90100F792A20BE67D00000000000BB5 +:10D7C000E69101000000904181B00100000010408E +:10D7D00081B20100F8924007963000009D0400409D +:10D7E000813201000293A245957C000001973F41E0 +:10D7F00095E00100000000F396B001000000004E2B +:10D80000E6B1010040973E4097E001000000004E65 +:10D81000E6B1010040973E409DE001001593003BBA +:10D82000E7B1000002933040813200000C93A20B5C +:10D83000E67D000000B5000D46C901000893A20B6B +:10D84000E67D00000000104081B201000000984217 +:10D8500081B0010000B7000D46C901000000000BB7 +:10D86000E69101000000104081B2010000009841E3 +:10D8700081B00100040021A2952000000000104AA0 +:10D880004483010000973E4195E001000000004EF6 +:10D89000F6B101000000004EE6B1010040973E40A5 +:10D8A0009DE001000000003BE7B101000000004ADC +:10D8B00090B10100FFFF000792890100000098402D +:10D8C00081B001000300000886F4010000B70043A6 +:10D8D00046C901000700000882880100199340082A +:10D8E000963000009D0400408132010025932245BE +:10D8F000957C00002193225A1F7C00001000000F2D +:10D9000096F401001E93315F970400000000114B54 +:10D91000489301000000004B6AB1010021933040A0 +:10D920008132000000000041E6810100000010404B +:10D9300081B201000000984081B2010000973F4190 +:10D9400095E00100000000F396B0010040973D40D3 +:10D9500097E00100000063F388B001002D93A23B23 +:10D96000896C00000000004A90B10100010000A68F +:10D9700092B101002E93184A449300000000184011 +:10D9800081B201003000394597E001003393225AFB +:10D990001F7C00001F04000F98D801000000004CFD +:10D9A0005E940100359300054AB000001F0400A7F3 +:10D9B0005E840100000000404BB0010000000058F0 +:10D9C00061B101000000004B62B101000000A840FD +:10D9D00081B200003693004081B2000039934007C5 +:10D9E000963000009D040040813201003D932245A5 +:10D9F000957C00000000984081B201009B04004A21 +:10DA00004413010000973F4195E00100000000F33E +:10DA100096B0010040973D4097E00100000063F39D +:10DA200088B001003000384597E001000000005F39 +:10DA30000F9001000000005861B101000000004B90 +:10DA400062B101004593A840813200003E93A23BA1 +:10DA5000896C0000300038459DE0010000009840CE +:10DA600081B2010093040012943001001693005A11 +:10DA70001F0001000000805A1F9001001100004AA1 +:10DA8000E6C9010034002F4F95840100000000F327 +:10DA900096B001000100634B84C801000000A04360 +:10DAA000856C01000000E34085B0010030002D448A +:10DAB0001F90010032002DF22AB00100040022F272 +:10DAC0000230000034920010323001003200A040D9 +:10DAD000E5B101000000004097B00100F0070040F0 +:10DAE000999801000000004A02C0010000000050A7 +:10DAF00003D001000000004197C001000000A34CCA +:10DB000002D000005C93004081B20000000000A839 +:10DB100036B001006C9322410350000000800010D9 +:10DB200044C9010000000050F1B101007000000381 +:10DB3000F0C901000000004261B1010000000010C6 +:10DB400062B101006593A800E0310000AF82008857 +:10DB50001CB00000B0920040813201007C800003C4 +:10DB600042C90100000000F000B001006093005CB9 +:10DB700001800000B0920040813201000000001BD3 +:10DB800010B1000068012D0682B00100000000F213 +:10DB900082C001000080000346C90100AB92004032 +:10DBA0008132010093932240116C0000000068084C +:10DBB00038960100F007004182CC01007193AA4120 +:10DBC0003B400000000000F810B001000000005CC5 +:10DBD000118001000100001D04CC01009293264633 +:10DBE000233000000800000312C80100640120F087 +:10DBF000E0B1010091932241055000002000000394 +:10DC000048C901000C0000F886C801000000224449 +:10DC1000F1B1010000000043F0B101000000000973 +:10DC2000E0B101000000004461B10100A00000A4C7 +:10DC300062DD01008393A8461F10000090932241EB +:10DC4000055000008E93A24123500000000000A167 +:10DC50001AB001000000004461B101004000001052 +:10DC600062DD01008993A84623300000AF8200885E +:10DC70001CB000001000000348C901000000000DA6 +:10DC800042B101000000004413C001007E93005027 +:10DC900049C100000000000548B1010004800003F4 +:10DCA0001AC801000000804081B201009293224016 +:10DCB0003B6C0000000000F800B00100B092005C76 +:10DCC00001000100939300413BD0000000008D470C +:10DCD00080320100B0002F5F13B001000000E0F0BF +:10DCE0008CC001000080000342C90100000000F860 +:10DCF00094B00100000000F88CB001009F938CF8F4 +:10DD00008E3000000000004419900100040022F849 +:10DD100014300000000000F816B00100000000F808 +:10DD200026B0010008002EF80CB001000C002A4AB1 +:10DD3000E0B1010028000000E0C901001000201B34 +:10DD4000E0B10100AC93200A0C6C0000000000F868 +:10DD500094B00100000000F896B00100200020F00F +:10DD6000E4B101001800204AE0B101001C00204B82 +:10DD7000E0B101009793004013B000002C002D4249 +:10DD8000199001002E002FF382B00100000000F373 +:10DD900096B00100B293A2A5976C000000008041EC +:10DDA00095B00100B593A240976C000000000040C0 +:10DDB00083B001002D002040E7B101000000634165 +:10DDC00097C00100D4003E4183E001000000004103 +:10DDD00083C00100BA93A0A5836C0000000000403E +:10DDE00083B001002C002041E6B10100BF93224026 +:10DDF0001F7C00000004000098DC01000B00004CB8 +:10DE0000E4F50100000080401F8001000B0080004D +:10DE1000E4F50100B4920040813201000480000367 +:10DE200044C9010000000040F1B1010000000040C1 +:10DE3000F1B101000000604187B0010000800010D6 +:10DE400044C9010000000050F1B101000000004889 +:10DE5000F0B1010000000049F0B101000000000332 +:10DE6000E0B101000000004561B101002000001098 +:10DE700062DD01000000A85D05900000CB9300402A +:10DE800081B20000B49200408132010000800003A2 +:10DE900044C9010000000041F0B10100000000424F +:10DEA000F0B1010000000040F1B1010000000043AA +:10DEB000F0B101000080001044C9010000000050D2 +:10DEC000F1B1010000000048F0B10100000000497C +:10DED000F0B1010000000003E0B1010000000045C6 +:10DEE00061B101002000001062DD01000000A85DAA +:10DEF00005900000DA93004081B200002D00004040 +:10DF0000439901002E002FF384B00100010063F358 +:10DF100096C80100E2939F4185500000010000A5D2 +:10DF200085CC01002D00A042E6B101005E012D006C +:10DF300080B00100E793524381600000020000F2CC +:10DF400082F40100E8930041809400000000005F2B +:10DF5000819001000000005E61B1010000000040FE +:10DF600062B101000000A84095B00000E9939EBB9B +:10DF700080320000EE93A2401F7C0000B09200406F +:10DF800081B200000000804195B00100040000153E +:10DF900042C90100000000542BC00100000000FC39 +:10DFA00024B00100000000FC38B00100000000FEB9 +:10DFB0003CB00100000000FE3AB0010003949C1741 +:10DFC00080320000F893A24A197C00000000804CC7 +:10DFD0001F9001000C00001E98F40100F793A24866 +:10DFE000996C00000000001542B10100F793A28A6D +:10DFF000F16D00000C00000102CC0100000000FCEB +:10E000003EB00100010000F428CC0100CC002D0539 +:10E0100048B10100029420F03E6C00000000004B6B +:10E020001F9001000000004C2BC00100BF002D0517 +:10E0300048B10100000080F33AE0010000002E4BDF +:10E040001990010007002A0CE4B1010000008004CF +:10E05000E6B1010018000040439901001C002DF0BA +:10E0600016B0010020002DF026B001000C002FF2A8 +:10E070000CB001000000A20614EC00000F94224531 +:10E080001F7C00000000A3062AEC0000000000F83E +:10E0900094B00100000000F096B001000C002D408B +:10E0A00081B2010000002A4CE1C1010030000010E3 +:10E0B00048C901000A000040F1990100180000055C +:10E0C000F0C901000000004AF0B101000000004B5F +:10E0D000E0B101000000004761B10100A00000A410 +:10E0E00062DD01001994A85C1F100000000080058B +:10E0F00048B1010000002E1048B1010040000001AD +:10E10000F0CD010040000003F0C901004000000014 +:10E11000E0C9010000002E5049C1010000000006C6 +:10E12000F1B1010000000003F0B10100239462424C +:10E13000613100002000001062DD01002494A8403D +:10E14000813200001000001062C901002694A8006E +:10E15000E03100000000F24081B2010000002E100A +:10E1600048B1010040000001F0CD01004000000373 +:10E17000F0C9010040000000E0C9010000002E507D +:10E1800049C1010000000006F1B1010000000003D8 +:10E19000F0B10100309462426131000020000010B3 +:10E1A00062DD01003194A84081320000A00000A48B +:10E1B00062DD01003394A800E03100000000F2406D +:10E1C00081B201003080004A44C90100000000060D +:10E1D000F1B10100C0A83D460DE00100FF7F00A1A4 +:10E1E000F08901000200000996F4010000000046D9 +:10E1F00097E00100000060A897C001003D946342D1 +:10E20000613100003000004A62C901003E94A8401C +:10E21000813200000000F34081B2010000993F42CA +:10E2200097F0010042946540813200004A9422F345 +:10E23000740600003F0000F394880100000000070E +:10E24000E78501000000755561B101000000004A3A +:10E2500062B101000000A84081B200004794004074 +:10E2600081B200000000F54081B20100000000A86A +:10E2700036B001005A948241234000004F94A244DA +:10E280001F7C0000BD9100018C3001002080001037 +:10E2900042C9010055942240E36D00000000004394 +:10E2A00061B101004000001062DD01005294A840FD +:10E2B00081320000AF8200881CB0000000000041E5 +:10E2C00023B001000000001032B001005A94224136 +:10E2D000197C0000C6920043233001000000004179 +:10E2E00023B001005C94A3150C6C00005D94000643 +:10E2F00004B000000000001504B001005F9420028B +:10E300001A6C00000000000D04B001001E9500050D +:10E310004831010089942202145000006394A20243 +:10E320002A5000008994A2451F7C000065942202B7 +:10E330000C5000006E94000216C000006D94225C28 +:10E340001F7C00003080001042C901006D94224003 +:10E35000E36D00000000004761B1010040000010C3 +:10E3600062DD01006994A84081320000AF8200881C +:10E370001CB000000000000548B101000894005CDA +:10E380001F00010089942215803200000000005017 +:10E3900033C001008894A2021A5000007A942246E9 +:10E3A0001F7C00007080000342C90100000000468D +:10E3B0001F8001007A942240E36D000000000042BB +:10E3C00061B101004000001062DD01007694A840B8 +:10E3D00081320000AF8200881CB000000000000500 +:10E3E00048B101000C80000342C90100100000F098 +:10E3F00010C801002F002F5C1180010000000047B1 +:10E40000E7910100F00700401B9801004C94201593 +:10E410001A6C00007000000348C90100000022507F +:10E42000F1B1010000000003F0B10100FF07000896 +:10E43000E08D01000000004261B10100A00000A4D5 +:10E4400062DD01008594A8461F1000004C94000571 +:10E4500048B100004C94000210C000008B94A2440C +:10E460001F7C0000BD9100018C3001000000001BEA +:10E4700010B100000080001044C901000C000040F1 +:10E48000F199010010000008F0C901000000001619 +:10E49000F0B1010010000003E0C9010000000045D8 +:10E4A00061B101002000001062DD01000000A85CE5 +:10E4B0001F9000009294004081B20000170000D02D +:10E4C000A2C901000000A24027EC000000000020CB +:10E4D00000B00100B0920041A341010096940041B8 +:10E4E00027D000001000000796E401000000004B58 +:10E4F000809401000000005461B1010000800040E0 +:10E5000062DD01000000A84081B200009D9400403F +:10E5100081B20000EF9400402B300100AC002D06CA +:10E5200016C0010090002DF016C40100A594A0F0C3 +:10E53000164400000000004117C001000E0000A2B8 +:10E5400044C9010000006CF030B00100AC002D4067 +:10E5500087B0010000006CF028B00100AE94224AA0 +:10E56000197C00000030004386C801000030000B19 +:10E5700016C80100AE94A4408132000000000041A2 +:10E5800017C00100CF94220680320000BB94A2067F +:10E59000146C0000B8942248197C0000B394A04188 +:10E5A000174000000000004117C0010000000041BA +:10E5B00031C0010090002018E0B101008B002D480F +:10E5C000198001008B002045E7910100BB940040B9 +:10E5D000879000000800004386980100BB94A04883 +:10E5E000174000000000004117C00100B0000040CB +:10E5F0004399010010500043FCC9010026950030EA +:10E600008130010000000040E5B10100C694224ABB +:10E61000197C0000080000A244C90100CC002DAB09 +:10E62000F9B10100000000AB17C00100C594A0F0D3 +:10E63000164400000000004117C00100CA9464F0B5 +:10E6400082B00000A400004047990100CA94A2F2E1 +:10E650008032000000000041E5B101008C0020186C +:10E66000E0B1010090000040459901000000600603 +:10E6700030C001000000860C80B20000BC002D46B6 +:10E6800019900100A000A0F2E4B10100B000004028 +:10E690004399010010500043FCC901002695003049 +:10E6A000813001000000A24A19FC0000080000A20D +:10E6B00044C90100CC002DABF9B10100000000AB52 +:10E6C00017C00100D894A0F01644000000000041DB +:10E6D00017C001000000E4F082B0010000800010CB +:10E6E00044C9010000000041F0B101000000000336 +:10E6F000F0B1010000000000F0B1010000000010C6 +:10E7000062B101000000A81BE0B10000DD940040F0 +:10E7100081B2000000F0000C7E8901000000A64CD0 +:10E72000956001000000804A1894010000800010EC +:10E7300044C9010004002201F03100002000004023 +:10E74000F0C9010000000016F0B101000000004314 +:10E7500061B101002000001062DD01000000A81579 +:10E76000E0B10000E894004081B200001080000396 +:10E7700044C9010000000006F0B1010000000001E2 +:10E78000F0B101000000E85F179001007000004048 +:10E79000439901007A012EFE92B001008B002DF604 +:10E7A00016B00100F5942243E77D0000000000440C +:10E7B00045C10100040000A62AB0010028006E0631 +:10E7C00082C80100F994224A197C0000000000422E +:10E7D00045D1010000006E4C83C0010000000041E3 +:10E7E00092C00100FA9443303D0700000000669E8D +:10E7F00083B0010000001B413DC301000000004147 +:10E8000092C00100060000A244C9010010000049A6 +:10E8100098F4010003952630930400000395904C72 +:10E82000924000000000004193C00100FFFF8049BA +:10E83000ECA901000080001044C90100040022017D +:10E84000F031000000000009F0B1010000000018E4 +:10E85000F0B101002000001062DD01000000A815E9 +:10E86000E0B100000895004081B200001595225FDC +:10E87000817C00001495A240197C0000000000403B +:10E88000199001000000005461B101001000000760 +:10E8900096E401000000004F979401000000004B37 +:10E8A00062B10100149528408132000011950040AA +:10E8B00081B200000000A221818400001895A25FAF +:10E8C000816C00000000A243197C0100000000439D +:10E8D000199001000000005461B101001000000710 +:10E8E00096E4010000000040969401000000004BF7 +:10E8F00062B101000000A84081B200001B950040F9 +:10E9000081B200000080001944C901000400220205 +:10E91000F03100000000000BF0B101000000001316 +:10E92000F0B101000000004361B1010020000019B6 +:10E9300062DD01000000A808E0B10000239500405E +:10E9400081B200007C002DF084B00100020000F0D4 +:10E9500098F401002C95204C846C00008800004045 +:10E96000439901002C9520F2846C000000000040C7 +:10E9700085B0010098002D1482B00100000000F065 +:10E9800098B00100A3002D1498D001003195204CBF +:10E99000846C00000000004C84B00100000000F313 +:10E9A00080E0010034952340846C000000000040AA +:10E9B00084B00100D0002014E0B10100980025428D +:10E9C00080B0010000006EF380F001000000A6425C +:10E9D00082C000003A95A0401640000000000041AF +:10E9E00017C0010000009FF082EC00009800A041D9 +:10E9F000E0B1010000002E1048B10100A801004064 +:10EA0000F199010000000005F0B1010009000007C4 +:10EA100096E40100000060A797C00100000000100C +:10EA200062B101000000A84081B2000041950040A1 +:10EA300081B20000A8002D1C8AB0010000009FF0E8 +:10EA40008AD000000000A2408BEC00008A00204029 +:10EA5000E7B10100B400004047990100A4002D4532 +:10EA6000E0D101004E959C1780320000BE002FAB14 +:10EA700083B00100A195001482500100539500401D +:10EA800081B20000539522F2823000008C000040D9 +:10EA90004399010053959F1CE06D0000BE000040AB +:10EAA00047990100A195004081320100A800201C77 +:10EAB000E0B101009C002D3081B0010088002DF0F4 +:10EAC00084B0010094002DF286B00100669523F019 +:10EAD000846C00005B952392876C0000C90400A63B +:10EAE00094B001005D95004081B20000200000A6B6 +:10EAF00094B001006089004A949801005D956840D7 +:10EB0000813200000000004AB0B10100BF002D4278 +:10EB1000B2B1010090002DF380E001006195D44076 +:10EB200081320000000078DA84C001006B95234038 +:10EB3000846C00009400209DE1B101006B950040C1 +:10EB400084B00000BF002D4384C0010090002DF36D +:10EB500080E001006B952340846C00009400209DB0 +:10EB6000E1B101000000004084B001006F95A2F007 +:10EB7000386C00009C002042E0B101000000005F02 +:10EB80001394010000008046198001009C0020427F +:10EB9000E0B101003700004043990100040000F398 +:10EBA00080F401000F0000F3828801007595234175 +:10EBB000806C00000000005F139401000000890CCD +:10EBC00080B20000BC00004043990100A000A0F208 +:10EBD000E4B1010000009F4124EC00007F95A640B5 +:10EBE0008132000000009F4238EC00007F95A64073 +:10EBF00081320000B4000040439901008195A3F0E8 +:10EC00003A6C00000000804081B20100B400004076 +:10EC100043990100859522F03A6C0000B400201D54 +:10EC2000E0B1010080002D5F13940100859523F071 +:10EC30003A6C00008000201DE0B10100C0002012ED +:10EC4000E0B10100C400A01CE0B10100008000039D +:10EC500044C9010000000042E0B101001200004080 +:10EC6000879801008E959F41246C000000000041B0 +:10EC70008CB00100000000128CD001008F95004183 +:10EC800024B00000000000408DB00100DF9500407E +:10EC9000813201000000004561B101004000001018 +:10ECA00062DD01000000A84081B2000091950040A3 +:10ECB00081B20000A29200408132010000000016E3 +:10ECC00080B201000000A708803201009995A2409F +:10ECD000956C0000B092004081320100008200A6D5 +:10ECE00004B00100000000402DB00100A0982F40AA +:10ECF00011B001003005004189B0000000009FF80C +:10ED00003EEC000000009F12E0ED0000C80020ABC8 +:10ED1000E1B10100CC00A01FE0B10100A395A35F09 +:10ED2000E76D000000000041E7C10100A6000040BF +:10ED300047990100B79522F2863000000300004396 +:10ED400084F401000100004180CC0100B8002D4294 +:10ED500080D001000000624086C00100AB951F43D7 +:10ED600080320000AC95A240876C00000000624138 +:10ED700087B00100B0959F40803200000000004045 +:10ED800085B001000000004084D001000000004276 +:10ED900080B00100000000F288B0010002000044D1 +:10EDA00084F40100B8002E4280D0010000006240CF +:10EDB00088C00100B6951F4480320000BA95A24079 +:10EDC000896C0000BA95624189B00000030062417D +:10EDD00086E40100B800004045990100010062414D +:10EDE00088E40100A4002040E5B10100A200204019 +:10EDF000E7B10100BC002E4387F001000000004491 +:10EE000086C00100C0952043876C0000000080434D +:10EE1000E5B101004001004380CE01000000A443A1 +:10EE2000E43101004001E2408798010088002D4450 +:10EE300081B0010090002DF22EB001009C002DF059 +:10EE400086B0010090002DF082B00100BA002DF0D4 +:10EE500098B00100CD95A212986C0000BC002DF274 +:10EE600098B00100CD95A0F2986C0000000000174A +:10EE700082B001009C002041E0B10100B4002D12DD +:10EE800086D00100D095A341E06D0000D19500F03F +:10EE900084B000000000004184B0010080002D43D8 +:10EEA00084D00100D4959F428032000000000040D1 +:10EEB00085B00100D695A342146C0000D795000AD6 +:10EEC0000CB00000000000420CB00100D995A01762 +:10EED0000C6C0000000080170CB00100DE95224091 +:10EEE0000D6C00000000A00A0CEC0000010000F016 +:10EEF00082F40100DE95A0410C6C00000000A2F03D +:10EF0000803201000000804081B00100B4920040D6 +:10EF1000813201000480000344C901000000004662 +:10EF2000F0B1010000000040F1B1010000006041BB +:10EF3000879401000080001044C9010000000050C7 +:10EF4000F1B1010000000048F0B1010000000049EB +:10EF5000F0B1010000000003E0B101000000004535 +:10EF600061B101002000001062DD01000000A85D19 +:10EF700005900000EA95004081B2000000002E4B91 +:10EF80001990010005002A0CE4B101000000800482 +:10EF9000E6B10100F095454861310000001000081D +:10EFA00062DD0100F595284087300000F195224888 +:10EFB000777D000095941D4687B00000F895225F8C +:10EFC000117C00000400221562310000F695A84073 +:10EFD0008132000000009D4081B20100000000402D +:10EFE00049B1010000142F4C83B001000000004023 +:10EFF000F1B10100FB95A241835000000000804068 +:10F0000081B201000000004049B101003000004021 +:10F01000A19901000000004093B0010000000040F1 +:10F020001FB001004E9600499630010007000049CC +:10F0300006E401000039000306C80100000000409A +:10F0400005B00100200000D0A0C90100000000416F +:10F0500093C001000296A054936C000000002E059E +:10F0600097B0010000800040499901000000004075 +:10F07000E1B10100000200A244C901000B96A241C7 +:10F08000975000000000002049B301005496004052 +:10F0900049310100DF9200408132010000B52E08A5 +:10F0A00097B0010000000040F1B101001296A241AA +:10F0B00097500000180000409798010000972E40DC +:10F0C00081B2010000000040F1B101001696A2419A +:10F0D000975000000000004049B1010040182E0583 +:10F0E00097B0010000000040F1B101001A96A24162 +:10F0F0009750000057952040E7B101003094004040 +:10F100004599010064000040E599010056952040B2 +:10F11000E7B10100B8942041E5B10100BA94204163 +:10F12000E5B10100989400404599010002000040BB +:10F130009798010000000040F1B101002496A2411F +:10F14000975000000000004097B001000000004010 +:10F150006FB101000000004B68B1010028968541A5 +:10F160009740000080040040813201000000004010 +:10F1700039B301000000004037B301000000004037 +:10F1800035B301000000004033B30100000000402F +:10F1900041B30100000000403FB30100EE05004014 +:10F1A000259B0100420000404B9B010000000040F5 +:10F1B0002FB30100000000402DB30100000000400B +:10F1C00047B301000000004043B30100600000406D +:10F1D0002B9B010000000054EF930100000000553C +:10F1E000F1930100FFFF00A53C8B01000000002C03 +:10F1F0005BB301000000002C45B30100000000409B +:10F2000059B301000000004057B301000000004066 +:10F2100027B301000000004053B301004496A25000 +:10F22000FD7F00004496A251FD7F000045960040FE +:10F230001DB30000504600401D9B010000C000A609 +:10F2400088B30100FF3F00A63AB3010000C0009D53 +:10F250003B9B0100B4050040239B010000000040DF +:10F260004DB30100080A00A614B301000101008A91 +:10F27000159B0100008000A656B101000000805ED1 +:10F2800057B501001800004B20E401000600004BB8 +:10F2900096E401000043004B96C8010018000010DE +:10F2A00020DC01000000004B20940100000080578A +:10F2B0002190010000992E0A97B001000000004043 +:10F2C000F1B101005596A2419750000000030040A3 +:10F2D0009798010000A900404599010000000040F6 +:10F2E000F1B101005996A241975000003000004052 +:10F2F000979801000000005561B101000000004B2B +:10F3000062B101005D96A840813200005D96A24185 +:10F31000975000000000804081B201000000804052 +:10F3200081B201000400004081B2000004000040EE +:10F3300081B200000400004081B2000004000040DF +:10F3400081B200000400004081B2000004000040CF +:10F3500081B200000400004081B2000004000040BF +:10F3600081B200000400004081B2000004000040AF +:10F3700081B200000400004081B20000040000409F +:10F3800081B200000400004081B20000040000408F +:10F3900081B200000400004081B20000040000407F +:10F3A00081B200000400004081B20000040000406F +:10F3B00081B200000400004081B20000040000405F +:10F3C00081B200000400004081B20000040000404F +:10F3D00081B200000400004081B20000040000403F +:10F3E00081B200000400004081B20000040000402F +:10F3F00081B200000400004081B20000040000401F +:10F4000081B200000400004081B20000040000400E +:10F4100081B200000400004081B2000004000040FE +:10F4200081B200000400004081B2000004000040EE +:10F4300081B200000400004081B2000004000040DE +:10F4400081B200000400004081B2000004000040CE +:10F4500081B200000400004081B2000004000040BE +:10F4600081B200000400004081B2000004000040AE +:10F4700081B200000400004081B20000040000409E +:10F4800081B200000400004081B20000040000408E +:10F4900081B200000400004081B20000040000407E +:10F4A00081B200000400004081B20000040000406E +:10F4B00081B200000400004081B20000040000405E +:10F4C00081B200000400004081B20000040000404E +:10F4D00081B200000400004081B20000040000403E +:10F4E00081B200000400004081B20000040000402E +:10F4F00081B200000400004081B20000040000401E +:10F5000081B200000400004081B20000040000400D +:10F5100081B200000400004081B2000004000040FD +:10F5200081B200000400004081B2000004000040ED +:10F5300081B200000400004081B2000004000040DD +:10F5400081B200000400004081B2000004000040CD +:10F5500081B200000400004081B2000004000040BD +:10F5600081B200000400004081B2000004000040AD +:10F5700081B200000400004081B20000040000409D +:10F5800081B200000400004081B20000040000408D +:10F5900081B200000400004081B20000040000407D +:10F5A00081B200000400004081B20000040000406D +:10F5B00081B200000400004081B20000040000405D +:10F5C00081B200000400004081B20000040000404D +:10F5D00081B200000400004081B20000040000403D +:10F5E00081B200000400004081B20000040000402D +:10F5F00081B200000400004081B20000040000401D +:10F6000081B200000400004081B20000040000400C +:10F6100081B200000400004081B2000004000040FC +:10F6200081B200000400004081B2000004000040EC +:10F6300081B200000400004081B2000004000040DC +:10F6400081B200000400004081B2000004000040CC +:10F6500081B200000400004081B2000004000040BC +:10F6600081B200000400004081B2000004000040AC +:10F6700081B200000400004081B20000040000409C +:10F6800081B200000400004081B20000040000408C +:10F6900081B200000400004081B20000040000407C +:10F6A00081B200000400004081B20000040000406C +:10F6B00081B200000400004081B20000040000405C +:10F6C00081B200000400004081B20000040000404C +:10F6D00081B200000400004081B20000040000403C +:10F6E00081B200000400004081B20000040000402C +:10F6F00081B200000400004081B20000040000401C +:10F7000081B200000400004081B20000040000400B +:10F7100081B200000400004081B2000004000040FB +:10F7200081B200000400004081B2000004000040EB +:10F7300081B200000400004081B2000004000040DB +:10F7400081B200000400004081B2000004000040CB +:10F7500081B200000400004081B2000004000040BB +:10F7600081B200000400004081B2000004000040AB +:10F7700081B200000400004081B20000040000409B +:10F7800081B200000400004081B20000040000408B +:10F7900081B200000400004081B20000040000407B +:10F7A00081B200000400004081B20000040000406B +:10F7B00081B200000400004081B20000040000405B +:10F7C00081B200000400004081B20000040000404B +:10F7D00081B200000400004081B20000040000403B +:10F7E00081B200000400004081B20000040000402B +:10F7F00081B200000400004081B20000040000401B +:10F8000081B200000400004081B20000040000400A +:10F8100081B200000400004081B2000004000040FA +:10F8200081B200000400004081B2000004000040EA +:10F8300081B200000400004081B2000004000040DA +:10F8400081B200000400004081B2000004000040CA +:10F8500081B200000400004081B2000004000040BA +:10F8600081B200000400004081B2000004000040AA +:10F8700081B200000400004081B20000040000409A +:10F8800081B200000400004081B20000040000408A +:10F8900081B200000400004081B20000040000407A +:10F8A00081B200000400004081B20000040000406A +:10F8B00081B200000400004081B20000040000405A +:10F8C00081B200000400004081B20000040000404A +:10F8D00081B200000400004081B20000040000403A +:10F8E00081B200000400004081B20000040000402A +:10F8F00081B200000400004081B20000040000401A +:10F9000081B200000400004081B200000400004009 +:10F9100081B200000400004081B2000004000040F9 +:10F9200081B200000400004081B2000004000040E9 +:10F9300081B200000400004081B2000004000040D9 +:10F9400081B200000400004081B2000004000040C9 +:10F9500081B200000400004081B2000004000040B9 +:10F9600081B200000400004081B2000004000040A9 +:10F9700081B200000400004081B200000400004099 +:10F9800081B200000400004081B200000400004089 +:10F9900081B200000400004081B200000400004079 +:10F9A00081B200000400004081B200000400004069 +:10F9B00081B200000400004081B200000400004059 +:10F9C00081B200000400004081B200000400004049 +:10F9D00081B200000400004081B200000400004039 +:10F9E00081B200000400004081B200000400004029 +:10F9F00081B200000400004081B200000400004019 +:10FA000081B200000400004081B200000400004008 +:10FA100081B200000400004081B2000004000040F8 +:10FA200081B200000400004081B2000004000040E8 +:10FA300081B200000400004081B2000004000040D8 +:10FA400081B200000400004081B2000004000040C8 +:10FA500081B200000400004081B2000004000040B8 +:10FA600081B200000400004081B2000004000040A8 +:10FA700081B200000400004081B200000400004098 +:10FA800081B200000400004081B200000400004088 +:10FA900081B200000400004081B200000400004078 +:10FAA00081B200000400004081B200000400004068 +:10FAB00081B200000400004081B200000400004058 +:10FAC00081B200000400004081B200000400004048 +:10FAD00081B200000400004081B200000400004038 +:10FAE00081B200000400004081B200000400004028 +:10FAF00081B200000400004081B200000400004018 +:10FB000081B200000400004081B200000400004007 +:10FB100081B200000400004081B2000004000040F7 +:10FB200081B200000400004081B2000004000040E7 +:10FB300081B200000400004081B2000004000040D7 +:10FB400081B200000400004081B2000004000040C7 +:10FB500081B200000400004081B2000004000040B7 +:10FB600081B200000400004081B2000004000040A7 +:10FB700081B200000400004081B200000400004097 +:10FB800081B200000400004081B200000400004087 +:10FB900081B200000400004081B200000400004077 +:10FBA00081B200000400004081B200000400004067 +:10FBB00081B200000400004081B200000400004057 +:10FBC00081B200000400004081B200000400004047 +:10FBD00081B200000400004081B200000400004037 +:10FBE00081B200000400004081B200000400004027 +:10FBF00081B200000400004081B200000400004017 +:10FC000081B200000400004081B200000400004006 +:10FC100081B200000400004081B2000004000040F6 +:10FC200081B200000400004081B2000004000040E6 +:10FC300081B200000400004081B2000004000040D6 +:10FC400081B200000400004081B2000004000040C6 +:10FC500081B200000400004081B2000004000040B6 +:10FC600081B200000400004081B2000004000040A6 +:10FC700081B200000400004081B200000400004096 +:10FC800081B200000400004081B200000400004086 +:10FC900081B200000400004081B200000400004076 +:10FCA00081B200000400004081B200000400004066 +:10FCB00081B200000400004081B200000400004056 +:10FCC00081B200000400004081B200000400004046 +:10FCD00081B200000400004081B200000400004036 +:10FCE00081B200000400004081B200000400004026 +:10FCF00081B200000400004081B200000400004016 +:10FD000081B200000400004081B200000400004005 +:10FD100081B200000400004081B2000004000040F5 +:10FD200081B200000400004081B2000004000040E5 +:10FD300081B200000400004081B2000004000040D5 +:10FD400081B200000400004081B2000004000040C5 +:10FD500081B200000400004081B2000004000040B5 +:10FD600081B200000400004081B2000004000040A5 +:10FD700081B200000400004081B200000400004095 +:10FD800081B200000400004081B200000400004085 +:10FD900081B200000400004081B200000400004075 +:10FDA00081B200000400004081B200000400004065 +:10FDB00081B200000400004081B200000400004055 +:10FDC00081B200000400004081B200000400004045 +:10FDD00081B200000400004081B200000400004035 +:10FDE00081B200000400004081B200000400004025 +:10FDF00081B200000400004081B200000400004015 +:10FE000081B200000400004081B200000400004004 +:10FE100081B200000400004081B2000004000040F4 +:10FE200081B200000400004081B2000004000040E4 +:10FE300081B200000400004081B2000004000040D4 +:10FE400081B200000400004081B2000004000040C4 +:10FE500081B200000400004081B2000004000040B4 +:10FE600081B200000400004081B2000004000040A4 +:10FE700081B200000400004081B200000400004094 +:10FE800081B200000400004081B200000400004084 +:10FE900081B200000400004081B200000400004074 +:10FEA00081B200000400004081B200000400004064 +:10FEB00081B200000400004081B200000400004054 +:10FEC00081B200000400004081B200000400004044 +:10FED00081B200000400004081B200000400004034 +:10FEE00081B200000400004081B200000400004024 +:10FEF00081B200000400004081B200000400004014 +:10FF000081B200000400004081B200000400004003 +:10FF100081B200000400004081B2000004000040F3 +:10FF200081B200000400004081B2000004000040E3 +:10FF300081B200000400004081B2000004000040D3 +:10FF400081B200000400004081B2000004000040C3 +:10FF500081B200000400004081B2000004000040B3 +:10FF600081B200000400004081B2000004000040A3 +:10FF700081B200000400004081B200000400004093 +:10FF800081B200000400004081B200000400004083 +:10FF900081B200000400004081B200000400004073 +:10FFA00081B200000400004081B200000400004063 +:10FFB00081B200000400004081B200000400004053 +:10FFC00081B200000400004081B200000400004043 +:10FFD00081B200000400004081B200000400004033 +:10FFE00081B200000400004081B200000400004023 +:10FFF00081B200000400004081B200000400004013 +:020000021000EC +:1000000081B200000400004081B200000400004002 +:1000100081B200000400004081B2000004000040F2 +:1000200081B200000400004081B2000004000040E2 +:1000300081B200000400004081B2000004000040D2 +:1000400081B200000400004081B2000004000040C2 +:1000500081B200000400004081B2000004000040B2 +:1000600081B200000400004081B2000004000040A2 +:1000700081B200000400004081B200000400004092 +:1000800081B200000400004081B200000400004082 +:1000900081B200000400004081B200000400004072 +:1000A00081B200000400004081B200000400004062 +:1000B00081B200000400004081B200000400004052 +:1000C00081B200000400004081B200000400004042 +:1000D00081B200000400004081B200000400004032 +:1000E00081B200000400004081B200000400004022 +:1000F00081B200000400004081B200000400004012 +:1001000081B200000400004081B200000400004001 +:1001100081B200000400004081B2000004000040F1 +:1001200081B200000400004081B2000004000040E1 +:1001300081B200000400004081B2000004000040D1 +:1001400081B200000400004081B2000004000040C1 +:1001500081B200000400004081B2000004000040B1 +:1001600081B200000400004081B2000004000040A1 +:1001700081B200000400004081B200000400004091 +:1001800081B200000400004081B200000400004081 +:1001900081B200000400004081B200000400004071 +:1001A00081B200000400004081B200000400004061 +:1001B00081B200000400004081B200000400004051 +:1001C00081B200000400004081B200000400004041 +:1001D00081B200000400004081B200000400004031 +:1001E00081B200000400004081B200000400004021 +:1001F00081B200000400004081B200000400004011 +:1002000081B200000400004081B200000400004000 +:1002100081B200000400004081B2000004000040F0 +:1002200081B200000400004081B2000004000040E0 +:1002300081B200000400004081B2000004000040D0 +:1002400081B200000400004081B2000004000040C0 +:1002500081B200000400004081B2000004000040B0 +:1002600081B200000400004081B2000004000040A0 +:1002700081B200000400004081B200000400004090 +:1002800081B200000400004081B200000400004080 +:1002900081B200000400004081B200000400004070 +:1002A00081B200000400004081B200000400004060 +:1002B00081B200000400004081B200000400004050 +:1002C00081B200000400004081B200000400004040 +:1002D00081B200000400004081B200000400004030 +:1002E00081B200000400004081B200000400004020 +:1002F00081B200000400004081B200000400004010 +:1003000081B200000400004081B2000004000040FF +:1003100081B200000400004081B2000004000040EF +:1003200081B200000400004081B2000004000040DF +:1003300081B200000400004081B2000004000040CF +:1003400081B200000400004081B2000004000040BF +:1003500081B200000400004081B2000004000040AF +:1003600081B200000400004081B20000040000409F +:1003700081B200000400004081B20000040000408F +:1003800081B200000400004081B20000040000407F +:1003900081B200000400004081B20000040000406F +:1003A00081B200000400004081B20000040000405F +:1003B00081B200000400004081B20000040000404F +:1003C00081B200000400004081B20000040000403F +:1003D00081B200000400004081B20000040000402F +:1003E00081B200000400004081B20000040000401F +:1003F00081B200000400004081B20000040000400F +:1004000081B200000400004081B2000004000040FE +:1004100081B200000400004081B2000004000040EE +:1004200081B200000400004081B2000004000040DE +:1004300081B200000400004081B2000004000040CE +:1004400081B200000400004081B2000004000040BE +:1004500081B200000400004081B2000004000040AE +:1004600081B200000400004081B20000040000409E +:1004700081B200000400004081B20000040000408E +:1004800081B200000400004081B20000040000407E +:1004900081B200000400004081B20000040000406E +:1004A00081B200000400004081B20000040000405E +:1004B00081B200000400004081B20000040000404E +:1004C00081B200000400004081B20000040000403E +:1004D00081B200000400004081B20000040000402E +:1004E00081B200000400004081B20000040000401E +:1004F00081B200000400004081B20000040000400E +:1005000081B200000400004081B2000004000040FD +:1005100081B200000400004081B2000004000040ED +:1005200081B200000400004081B2000004000040DD +:1005300081B200000400004081B2000004000040CD +:1005400081B200000400004081B2000004000040BD +:1005500081B200000400004081B2000004000040AD +:1005600081B200000400004081B20000040000409D +:1005700081B200000400004081B20000040000408D +:1005800081B200000400004081B20000040000407D +:1005900081B200000400004081B20000040000406D +:1005A00081B200000400004081B20000040000405D +:1005B00081B200000400004081B20000040000404D +:1005C00081B200000400004081B20000040000403D +:1005D00081B200000400004081B20000040000402D +:1005E00081B200000400004081B20000040000401D +:1005F00081B200000400004081B20000040000400D +:1006000081B200000400004081B2000004000040FC +:1006100081B200000400004081B2000004000040EC +:1006200081B200000400004081B2000004000040DC +:1006300081B200000400004081B2000004000040CC +:1006400081B200000400004081B2000004000040BC +:1006500081B200000400004081B2000004000040AC +:1006600081B200000400004081B20000040000409C +:1006700081B200000400004081B20000040000408C +:1006800081B200000400004081B20000040000407C +:1006900081B200000400004081B20000040000406C +:1006A00081B200000400004081B20000040000405C +:1006B00081B200000400004081B20000040000404C +:1006C00081B200000400004081B20000040000403C +:1006D00081B200000400004081B20000040000402C +:1006E00081B200000400004081B20000040000401C +:1006F00081B200000400004081B20000040000400C +:1007000081B200000400004081B2000004000040FB +:1007100081B200000400004081B2000004000040EB +:1007200081B200000400004081B2000004000040DB +:1007300081B200000400004081B2000004000040CB +:1007400081B200000400004081B2000004000040BB +:1007500081B200000400004081B2000004000040AB +:1007600081B200000400004081B20000040000409B +:1007700081B200000400004081B20000040000408B +:1007800081B200000400004081B20000040000407B +:1007900081B200000400004081B20000040000406B +:1007A00081B200000400004081B20000040000405B +:1007B00081B200000400004081B20000040000404B +:1007C00081B200000400004081B20000040000403B +:1007D00081B200000400004081B20000040000402B +:1007E00081B200000400004081B20000040000401B +:1007F00081B200000400004081B20000040000400B +:1008000081B200000400004081B2000004000040FA +:1008100081B200000400004081B2000004000040EA +:1008200081B200000400004081B2000004000040DA +:1008300081B200000400004081B2000004000040CA +:1008400081B200000400004081B2000004000040BA +:1008500081B200000400004081B2000004000040AA +:1008600081B200000400004081B20000040000409A +:1008700081B200000400004081B20000040000408A +:1008800081B200000400004081B20000040000407A +:1008900081B200000400004081B20000040000406A +:1008A00081B200000400004081B20000040000405A +:1008B00081B200000400004081B20000040000404A +:1008C00081B200000400004081B20000040000403A +:1008D00081B200000400004081B20000040000402A +:1008E00081B200000400004081B20000040000401A +:1008F00081B200000400004081B20000040000400A +:1009000081B200000400004081B2000004000040F9 +:1009100081B200000400004081B2000004000040E9 +:1009200081B200000400004081B2000004000040D9 +:1009300081B200000400004081B2000004000040C9 +:1009400081B200000400004081B2000004000040B9 +:1009500081B200000400004081B2000004000040A9 +:1009600081B200000400004081B200000400004099 +:1009700081B200000400004081B200000400004089 +:1009800081B200000400004081B200000400004079 +:1009900081B200000400004081B200000400004069 +:1009A00081B200000400004081B200000400004059 +:1009B00081B200000400004081B200000400004049 +:1009C00081B200000400004081B200000400004039 +:1009D00081B200000400004081B200000400004029 +:1009E00081B200000400004081B200000400004019 +:1009F00081B200000400004081B200000400004009 +:100A000081B200000400004081B2000004000040F8 +:100A100081B200000400004081B2000004000040E8 +:100A200081B200000400004081B2000004000040D8 +:100A300081B200000400004081B2000004000040C8 +:100A400081B200000400004081B2000004000040B8 +:100A500081B200000400004081B2000004000040A8 +:100A600081B200000400004081B200000400004098 +:100A700081B200000400004081B200000400004088 +:100A800081B200000400004081B200000400004078 +:100A900081B200000400004081B200000400004068 +:100AA00081B200000400004081B200000400004058 +:100AB00081B200000400004081B200000400004048 +:100AC00081B200000400004081B200000400004038 +:100AD00081B200000400004081B200000400004028 +:100AE00081B200000400004081B200000400004018 +:100AF00081B200000400004081B200000400004008 +:100B000081B200000400004081B2000004000040F7 +:100B100081B200000400004081B2000004000040E7 +:100B200081B200000400004081B2000004000040D7 +:100B300081B200000400004081B2000004000040C7 +:100B400081B200000400004081B2000004000040B7 +:100B500081B200000400004081B2000004000040A7 +:100B600081B200000400004081B200000400004097 +:100B700081B200000400004081B200000400004087 +:100B800081B200000400004081B200000400004077 +:100B900081B200000400004081B200000400004067 +:100BA00081B200000400004081B200000400004057 +:100BB00081B200000400004081B200000400004047 +:100BC00081B200000400004081B200000400004037 +:100BD00081B200000400004081B200000400004027 +:100BE00081B200000400004081B200000400004017 +:100BF00081B200000400004081B200000400004007 +:100C000081B200000400004081B2000004000040F6 +:100C100081B200000400004081B2000004000040E6 +:100C200081B200000400004081B2000004000040D6 +:100C300081B200000400004081B2000004000040C6 +:100C400081B200000400004081B2000004000040B6 +:100C500081B200000400004081B2000004000040A6 +:100C600081B200000400004081B200000400004096 +:100C700081B200000400004081B200000400004086 +:100C800081B200000400004081B200000400004076 +:100C900081B200000400004081B200000400004066 +:100CA00081B200000400004081B200000400004056 +:100CB00081B200000400004081B200000400004046 +:100CC00081B200000400004081B200000400004036 +:100CD00081B200000400004081B200000400004026 +:100CE00081B200000400004081B200000400004016 +:100CF00081B200000400004081B200000400004006 +:100D000081B200000400004081B2000004000040F5 +:100D100081B200000400004081B2000004000040E5 +:100D200081B200000400004081B2000004000040D5 +:100D300081B200000400004081B2000004000040C5 +:100D400081B200000400004081B2000004000040B5 +:100D500081B200000400004081B2000004000040A5 +:100D600081B200000400004081B200000400004095 +:100D700081B200000400004081B200000400004085 +:100D800081B200000400004081B200000400004075 +:100D900081B200000400004081B200000400004065 +:100DA00081B200000400004081B200000400004055 +:100DB00081B200000400004081B200000400004045 +:100DC00081B200000400004081B200000400004035 +:100DD00081B200000400004081B200000400004025 +:100DE00081B200000400004081B200000400004015 +:100DF00081B200000400004081B200000400004005 +:100E000081B200000400004081B2000004000040F4 +:100E100081B200000400004081B2000004000040E4 +:100E200081B200000400004081B2000004000040D4 +:100E300081B200000400004081B2000004000040C4 +:100E400081B200000400004081B2000004000040B4 +:100E500081B200000400004081B2000004000040A4 +:100E600081B200000400004081B200000400004094 +:100E700081B200000400004081B200000400004084 +:100E800081B200000400004081B200000400004074 +:100E900081B200000400004081B200000400004064 +:100EA00081B200000400004081B200000400004054 +:100EB00081B200000400004081B200000400004044 +:100EC00081B200000400004081B200000400004034 +:100ED00081B200000400004081B200000400004024 +:100EE00081B200000400004081B200000400004014 +:100EF00081B200000400004081B200000400004004 +:100F000081B200000400004081B2000004000040F3 +:100F100081B200000400004081B2000004000040E3 +:100F200081B200000400004081B2000004000040D3 +:100F300081B200000400004081B2000004000040C3 +:100F400081B200000400004081B2000004000040B3 +:100F500081B200000400004081B2000004000040A3 +:100F600081B200000400004081B200000400004093 +:100F700081B200000400004081B200000400004083 +:100F800081B200000400004081B200000400004073 +:100F900081B200000400004081B200000400004063 +:100FA00081B200000400004081B200000400004053 +:100FB00081B200000400004081B200000400004043 +:100FC00081B200000400004081B200000400004033 +:100FD00081B200000400004081B200000400004023 +:100FE00081B200000400004081B200000400004013 +:100FF00081B200000400004081B200000400004003 +:1010000081B200000400004081B2000004000040F2 +:1010100081B200000400004081B2000004000040E2 +:1010200081B200000400004081B2000004000040D2 +:1010300081B200000400004081B2000004000040C2 +:1010400081B200000400004081B2000004000040B2 +:1010500081B200000400004081B2000004000040A2 +:1010600081B200000400004081B200000400004092 +:1010700081B200000400004081B200000400004082 +:1010800081B200000400004081B200000400004072 +:1010900081B200000400004081B200000400004062 +:1010A00081B200000400004081B200000400004052 +:1010B00081B200000400004081B200000400004042 +:1010C00081B200000400004081B200000400004032 +:1010D00081B200000400004081B200000400004022 +:1010E00081B200000400004081B200000400004012 +:1010F00081B200000400004081B200000400004002 +:1011000081B200000400004081B2000004000040F1 +:1011100081B200000400004081B2000004000040E1 +:1011200081B200000400004081B2000004000040D1 +:1011300081B200000400004081B2000004000040C1 +:1011400081B200000400004081B2000004000040B1 +:1011500081B200000400004081B2000004000040A1 +:1011600081B200000400004081B200000400004091 +:1011700081B200000400004081B200000400004081 +:1011800081B200000400004081B200000400004071 +:1011900081B200000400004081B200000400004061 +:1011A00081B200000400004081B200000400004051 +:1011B00081B200000400004081B200000400004041 +:1011C00081B200000400004081B200000400004031 +:1011D00081B200000400004081B200000400004021 +:1011E00081B200000400004081B200000400004011 +:1011F00081B200000400004081B200000400004001 +:1012000081B200000400004081B2000004000040F0 +:1012100081B200000400004081B2000004000040E0 +:1012200081B200000400004081B2000004000040D0 +:1012300081B200000400004081B2000004000040C0 +:1012400081B200000400004081B2000004000040B0 +:1012500081B200000400004081B2000004000040A0 +:1012600081B200000400004081B200000400004090 +:1012700081B200000400004081B200000400004080 +:1012800081B200000400004081B200000400004070 +:1012900081B200000400004081B200000400004060 +:1012A00081B200000400004081B200000400004050 +:1012B00081B200000400004081B200000400004040 +:1012C00081B200000400004081B200000400004030 +:1012D00081B200000400004081B200000400004020 +:1012E00081B200000400004081B200000400004010 +:1012F00081B200000400004081B200000400004000 +:1013000081B200000400004081B2000004000040EF +:1013100081B200000400004081B2000004000040DF +:1013200081B200000400004081B2000004000040CF +:1013300081B200000400004081B2000004000040BF +:1013400081B200000400004081B2000004000040AF +:1013500081B200000400004081B20000040000409F +:1013600081B200000400004081B20000040000408F +:1013700081B200000400004081B20000040000407F +:1013800081B200000400004081B20000040000406F +:1013900081B200000400004081B20000040000405F +:1013A00081B200000400004081B20000040000404F +:1013B00081B200000400004081B20000040000403F +:1013C00081B200000400004081B20000040000402F +:1013D00081B200000400004081B20000040000401F +:1013E00081B200000400004081B20000040000400F +:1013F00081B200000400004081B2000004000040FF +:1014000081B200000400004081B2000004000040EE +:1014100081B200000400004081B2000004000040DE +:1014200081B200000400004081B2000004000040CE +:1014300081B200000400004081B2000004000040BE +:1014400081B200000400004081B2000004000040AE +:1014500081B200000400004081B20000040000409E +:1014600081B200000400004081B20000040000408E +:1014700081B200000400004081B20000040000407E +:1014800081B200000400004081B20000040000406E +:1014900081B200000400004081B20000040000405E +:1014A00081B200000400004081B20000040000404E +:1014B00081B200000400004081B20000040000403E +:1014C00081B200000400004081B20000040000402E +:1014D00081B200000400004081B20000040000401E +:1014E00081B200000400004081B20000040000400E +:1014F00081B200000400004081B2000004000040FE +:1015000081B200000400004081B2000004000040ED +:1015100081B200000400004081B2000004000040DD +:1015200081B200000400004081B2000004000040CD +:1015300081B200000400004081B2000004000040BD +:1015400081B200000400004081B2000004000040AD +:1015500081B200000400004081B20000040000409D +:1015600081B200000400004081B20000040000408D +:1015700081B200000400004081B20000040000407D +:1015800081B200000400004081B20000040000406D +:1015900081B200000400004081B20000040000405D +:1015A00081B200000400004081B20000040000404D +:1015B00081B200000400004081B20000040000403D +:1015C00081B200000400004081B20000040000402D +:1015D00081B200000400004081B20000040000401D +:1015E00081B200000400004081B20000040000400D +:1015F00081B200000400004081B2000004000040FD +:1016000081B200000400004081B2000004000040EC +:1016100081B200000400004081B2000004000040DC +:1016200081B200000400004081B2000004000040CC +:1016300081B200000400004081B2000004000040BC +:1016400081B200000400004081B2000004000040AC +:1016500081B200000400004081B20000040000409C +:1016600081B200000400004081B20000040000408C +:1016700081B200000400004081B20000040000407C +:1016800081B200000400004081B20000040000406C +:1016900081B200000400004081B20000040000405C +:1016A00081B200000400004081B20000040000404C +:1016B00081B200000400004081B20000040000403C +:1016C00081B200000400004081B20000040000402C +:1016D00081B200000400004081B20000040000401C +:1016E00081B200000400004081B20000040000400C +:1016F00081B200000400004081B2000004000040FC +:1017000081B200000400004081B2000004000040EB +:1017100081B200000400004081B2000004000040DB +:1017200081B200000400004081B2000004000040CB +:1017300081B200000400004081B2000004000040BB +:1017400081B200000400004081B2000004000040AB +:1017500081B200000400004081B20000040000409B +:1017600081B200000400004081B20000040000408B +:1017700081B200000400004081B20000040000407B +:1017800081B200000400004081B20000040000406B +:1017900081B200000400004081B20000040000405B +:1017A00081B200000400004081B20000040000404B +:1017B00081B200000400004081B20000040000403B +:1017C00081B200000400004081B20000040000402B +:1017D00081B200000400004081B20000040000401B +:1017E00081B200000400004081B20000040000400B +:1017F00081B200000400004081B2000004000040FB +:1018000081B200000400004081B2000004000040EA +:1018100081B200000400004081B2000004000040DA +:1018200081B200000400004081B2000004000040CA +:1018300081B200000400004081B2000004000040BA +:1018400081B200000400004081B2000004000040AA +:1018500081B200000400004081B20000040000409A +:1018600081B200000400004081B20000040000408A +:1018700081B200000400004081B20000040000407A +:1018800081B200000400004081B20000040000406A +:1018900081B200000400004081B20000040000405A +:1018A00081B200000400004081B20000040000404A +:1018B00081B200000400004081B20000040000403A +:1018C00081B200000400004081B20000040000402A +:1018D00081B200000400004081B20000040000401A +:1018E00081B200000400004081B20000040000400A +:1018F00081B200000400004081B2000004000040FA +:1019000081B200000400004081B2000004000040E9 +:1019100081B200000400004081B2000004000040D9 +:1019200081B200000400004081B2000004000040C9 +:1019300081B200000400004081B2000004000040B9 +:1019400081B200000400004081B2000004000040A9 +:1019500081B200000400004081B200000400004099 +:1019600081B200000400004081B200000400004089 +:1019700081B200000400004081B200000400004079 +:1019800081B200000400004081B200000400004069 +:1019900081B200000400004081B200000400004059 +:1019A00081B200000400004081B200000400004049 +:1019B00081B200000400004081B200000400004039 +:1019C00081B200000400004081B200000400004029 +:1019D00081B200000400004081B200000400004019 +:1019E00081B200000400004081B200000400004009 +:1019F00081B200000400004081B2000004000040F9 +:101A000081B200000400004081B2000004000040E8 +:101A100081B200000400004081B2000004000040D8 +:101A200081B200000400004081B2000004000040C8 +:101A300081B200000400004081B2000004000040B8 +:101A400081B200000400004081B2000004000040A8 +:101A500081B200000400004081B200000400004098 +:101A600081B200000400004081B200000400004088 +:101A700081B200000400004081B200000400004078 +:101A800081B200000400004081B200000400004068 +:101A900081B200000400004081B200000400004058 +:101AA00081B200000400004081B200000400004048 +:101AB00081B200000400004081B200000400004038 +:101AC00081B200000400004081B200000400004028 +:101AD00081B200000400004081B200000400004018 +:101AE00081B200000400004081B200000400004008 +:101AF00081B200000400004081B2000004000040F8 +:101B000081B200000400004081B2000004000040E7 +:101B100081B200000400004081B2000004000040D7 +:101B200081B200000400004081B2000004000040C7 +:101B300081B200000400004081B2000004000040B7 +:101B400081B200000400004081B2000004000040A7 +:101B500081B200000400004081B200000400004097 +:101B600081B200000400004081B200000400004087 +:101B700081B200000400004081B200000400004077 +:101B800081B200000400004081B200000400004067 +:101B900081B200000400004081B200000400004057 +:101BA00081B200000400004081B200000400004047 +:101BB00081B200000400004081B200000400004037 +:101BC00081B200000400004081B200000400004027 +:101BD00081B200000400004081B200000400004017 +:101BE00081B200000400004081B200000400004007 +:101BF00081B200000400004081B2000004000040F7 +:101C000081B200000400004081B2000004000040E6 +:101C100081B200000400004081B2000004000040D6 +:101C200081B200000400004081B2000004000040C6 +:101C300081B200000400004081B2000004000040B6 +:101C400081B200000400004081B2000004000040A6 +:101C500081B200000400004081B200000400004096 +:101C600081B200000400004081B200000400004086 +:101C700081B200000400004081B200000400004076 +:101C800081B200000400004081B200000400004066 +:101C900081B200000400004081B200000400004056 +:101CA00081B200000400004081B200000400004046 +:101CB00081B200000400004081B200000400004036 +:101CC00081B200000400004081B200000400004026 +:101CD00081B200000400004081B200000400004016 +:101CE00081B200000400004081B200000400004006 +:101CF00081B200000400004081B2000004000040F6 +:101D000081B200000400004081B2000004000040E5 +:101D100081B200000400004081B2000004000040D5 +:101D200081B200000400004081B2000004000040C5 +:101D300081B200000400004081B2000004000040B5 +:101D400081B200000400004081B2000004000040A5 +:101D500081B200000400004081B200000400004095 +:101D600081B200000400004081B200000400004085 +:101D700081B200000400004081B200000400004075 +:101D800081B200000400004081B200000400004065 +:101D900081B200000400004081B200000400004055 +:101DA00081B200000400004081B200000400004045 +:101DB00081B200000400004081B200000400004035 +:101DC00081B200000400004081B200000400004025 +:101DD00081B200000400004081B200000400004015 +:101DE00081B200000400004081B200000400004005 +:101DF00081B200000400004081B2000004000040F5 +:101E000081B200000400004081B2000004000040E4 +:101E100081B200000400004081B2000004000040D4 +:101E200081B200000400004081B2000004000040C4 +:101E300081B200000400004081B2000004000040B4 +:101E400081B200000400004081B2000004000040A4 +:101E500081B200000400004081B200000400004094 +:101E600081B200000400004081B200000400004084 +:101E700081B200000400004081B200000400004074 +:101E800081B200000400004081B200000400004064 +:101E900081B200000400004081B200000400004054 +:101EA00081B200000400004081B200000400004044 +:101EB00081B200000400004081B200000400004034 +:101EC00081B200000400004081B200000400004024 +:101ED00081B200000400004081B200000400004014 +:101EE00081B200000400004081B200000400004004 +:101EF00081B200000400004081B2000004000040F4 +:101F000081B200000400004081B2000004000040E3 +:101F100081B200000400004081B2000004000040D3 +:101F200081B200000400004081B2000004000040C3 +:101F300081B200000400004081B2000004000040B3 +:101F400081B200000400004081B2000004000040A3 +:101F500081B200000400004081B200000400004093 +:101F600081B200000400004081B200000400004083 +:101F700081B200000400004081B200000400004073 +:101F800081B200000400004081B200000400004063 +:101F900081B200000400004081B200000400004053 +:101FA00081B200000400004081B200000400004043 +:101FB00081B200000400004081B200000400004033 +:101FC00081B200000400004081B200000400004023 +:101FD00081B200000400004081B200000400004013 +:101FE00081B200000400004081B200000400004003 +:101FF00081B200000400004081B2000004000040F3 +:1020000081B200000400004081B2000004000040E2 +:1020100081B200000400004081B2000004000040D2 +:1020200081B200000400004081B2000004000040C2 +:1020300081B200000400004081B2000004000040B2 +:1020400081B200000400004081B2000004000040A2 +:1020500081B200000400004081B200000400004092 +:1020600081B200000400004081B200000400004082 +:1020700081B200000400004081B200000400004072 +:1020800081B200000400004081B200000400004062 +:1020900081B200000400004081B200000400004052 +:1020A00081B200000400004081B200000400004042 +:1020B00081B200000400004081B200000400004032 +:1020C00081B200000400004081B200000400004022 +:1020D00081B200000400004081B200000400004012 +:1020E00081B200000400004081B200000400004002 +:1020F00081B200000400004081B2000004000040F2 +:1021000081B200000400004081B2000004000040E1 +:1021100081B200000400004081B2000004000040D1 +:1021200081B200000400004081B2000004000040C1 +:1021300081B200000400004081B2000004000040B1 +:1021400081B200000400004081B2000004000040A1 +:1021500081B200000400004081B200000400004091 +:1021600081B200000400004081B200000400004081 +:1021700081B200000400004081B200000400004071 +:1021800081B200000400004081B200000400004061 +:1021900081B200000400004081B200000400004051 +:1021A00081B200000400004081B200000400004041 +:1021B00081B200000400004081B200000400004031 +:1021C00081B200000400004081B200000400004021 +:1021D00081B200000400004081B200000400004011 +:1021E00081B200000400004081B200000400004001 +:1021F00081B200000400004081B2000004000040F1 +:1022000081B200000400004081B2000004000040E0 +:1022100081B200000400004081B2000004000040D0 +:1022200081B200000400004081B2000004000040C0 +:1022300081B200000400004081B2000004000040B0 +:1022400081B200000400004081B2000004000040A0 +:1022500081B200000400004081B200000400004090 +:1022600081B200000400004081B200000400004080 +:1022700081B200000400004081B200000400004070 +:1022800081B200000400004081B200000400004060 +:1022900081B200000400004081B200000400004050 +:1022A00081B200000400004081B200000400004040 +:1022B00081B200000400004081B200000400004030 +:1022C00081B200000400004081B200000400004020 +:1022D00081B200000400004081B200000400004010 +:1022E00081B200000400004081B200000400004000 +:1022F00081B200000400004081B2000004000040F0 +:1023000081B200000400004081B2000004000040DF +:1023100081B200000400004081B2000004000040CF +:1023200081B200000400004081B2000004000040BF +:1023300081B200000400004081B2000004000040AF +:1023400081B200000400004081B20000040000409F +:1023500081B200000400004081B20000040000408F +:1023600081B200000400004081B20000040000407F +:1023700081B200000400004081B20000040000406F +:1023800081B200000400004081B20000040000405F +:1023900081B200000400004081B20000040000404F +:1023A00081B200000400004081B20000040000403F +:1023B00081B200000400004081B20000040000402F +:1023C00081B200000400004081B20000040000401F +:1023D00081B200000400004081B20000040000400F +:1023E00081B200000400004081B2000004000040FF +:1023F00081B200000400004081B2000004000040EF +:1024000081B200000400004081B2000004000040DE +:1024100081B200000400004081B2000004000040CE +:1024200081B200000400004081B2000004000040BE +:1024300081B200000400004081B2000004000040AE +:1024400081B200000400004081B20000040000409E +:1024500081B200000400004081B20000040000408E +:1024600081B200000400004081B20000040000407E +:1024700081B200000400004081B20000040000406E +:1024800081B200000400004081B20000040000405E +:1024900081B200000400004081B20000040000404E +:1024A00081B200000400004081B20000040000403E +:1024B00081B200000400004081B20000040000402E +:1024C00081B200000400004081B20000040000401E +:1024D00081B200000400004081B20000040000400E +:1024E00081B200000400004081B2000004000040FE +:1024F00081B200000400004081B2000004000040EE +:1025000081B200000400004081B2000004000040DD +:1025100081B200000400004081B2000004000040CD +:1025200081B200000400004081B2000004000040BD +:1025300081B200000400004081B2000004000040AD +:1025400081B200000400004081B20000040000409D +:1025500081B200000400004081B20000040000408D +:1025600081B200000400004081B20000040000407D +:1025700081B200000400004081B20000040000406D +:1025800081B200000400004081B20000040000405D +:1025900081B200000400004081B20000040000404D +:1025A00081B200000400004081B20000040000403D +:1025B00081B200000400004081B20000040000402D +:1025C00081B200000400004081B20000040000401D +:1025D00081B200000400004081B20000040000400D +:1025E00081B200000400004081B2000004000040FD +:1025F00081B200000400004081B2000004000040ED +:1026000081B200000400004081B2000004000040DC +:1026100081B200000400004081B2000004000040CC +:1026200081B200000400004081B2000004000040BC +:1026300081B200000400004081B2000004000040AC +:1026400081B200000400004081B20000040000409C +:1026500081B200000400004081B20000040000408C +:1026600081B200000400004081B20000040000407C +:1026700081B200000400004081B20000040000406C +:1026800081B200000400004081B20000040000405C +:1026900081B200000400004081B20000040000404C +:1026A00081B200000400004081B20000040000403C +:1026B00081B200000400004081B20000040000402C +:1026C00081B200000400004081B20000040000401C +:1026D00081B200000400004081B20000040000400C +:1026E00081B200000400004081B2000004000040FC +:1026F00081B200000400004081B2000004000040EC +:1027000081B200000400004081B2000004000040DB +:1027100081B200000400004081B2000004000040CB +:1027200081B200000400004081B2000004000040BB +:1027300081B200000400004081B2000004000040AB +:1027400081B200000400004081B20000040000409B +:1027500081B200000400004081B20000040000408B +:1027600081B200000400004081B20000040000407B +:1027700081B200000400004081B20000040000406B +:1027800081B200000400004081B20000040000405B +:1027900081B200000400004081B20000040000404B +:1027A00081B200000400004081B20000040000403B +:1027B00081B200000400004081B20000040000402B +:1027C00081B200000400004081B20000040000401B +:1027D00081B200000400004081B20000040000400B +:1027E00081B200000400004081B2000004000040FB +:1027F00081B200000400004081B2000004000040EB +:1028000081B200000400004081B2000004000040DA +:1028100081B200000400004081B2000004000040CA +:1028200081B200000400004081B2000004000040BA +:1028300081B200000400004081B2000004000040AA +:1028400081B200000400004081B20000040000409A +:1028500081B200000400004081B20000040000408A +:1028600081B200000400004081B20000040000407A +:1028700081B200000400004081B20000040000406A +:1028800081B200000400004081B20000040000405A +:1028900081B200000400004081B20000040000404A +:1028A00081B200000400004081B20000040000403A +:1028B00081B200000400004081B20000040000402A +:1028C00081B200000400004081B20000040000401A +:1028D00081B200000400004081B20000040000400A +:1028E00081B200000400004081B2000004000040FA +:1028F00081B200000400004081B2000004000040EA +:1029000081B200000400004081B2000004000040D9 +:1029100081B200000400004081B2000004000040C9 +:1029200081B200000400004081B2000004000040B9 +:1029300081B200000400004081B2000004000040A9 +:1029400081B200000400004081B200000400004099 +:1029500081B200000400004081B200000400004089 +:1029600081B200000400004081B200000400004079 +:1029700081B200000400004081B200000400004069 +:1029800081B200000400004081B200000400004059 +:1029900081B200000400004081B200000400004049 +:1029A00081B200000400004081B200000400004039 +:1029B00081B200000400004081B200000400004029 +:1029C00081B200000400004081B200000400004019 +:1029D00081B200000400004081B200000400004009 +:1029E00081B200000400004081B2000004000040F9 +:1029F00081B200000400004081B2000004000040E9 +:102A000081B200000400004081B2000004000040D8 +:102A100081B200000400004081B2000004000040C8 +:102A200081B200000400004081B2000004000040B8 +:102A300081B200000400004081B2000004000040A8 +:102A400081B200000400004081B200000400004098 +:102A500081B200000400004081B200000400004088 +:102A600081B200000400004081B200000400004078 +:102A700081B200000400004081B200000400004068 +:102A800081B200000400004081B200000400004058 +:102A900081B200000400004081B200000400004048 +:102AA00081B200000400004081B200000400004038 +:102AB00081B200000400004081B200000400004028 +:102AC00081B200000400004081B200000400004018 +:102AD00081B200000400004081B200000400004008 +:102AE00081B200000400004081B2000004000040F8 +:102AF00081B200000400004081B2000004000040E8 +:102B000081B200000400004081B2000004000040D7 +:102B100081B200000400004081B2000004000040C7 +:102B200081B200000400004081B2000004000040B7 +:102B300081B200000400004081B2000004000040A7 +:102B400081B200000400004081B200000400004097 +:102B500081B200000400004081B200000400004087 +:102B600081B200000400004081B200000400004077 +:102B700081B200000400004081B200000400004067 +:102B800081B200000400004081B200000400004057 +:102B900081B200000400004081B200000400004047 +:102BA00081B200000400004081B200000400004037 +:102BB00081B200000400004081B200000400004027 +:102BC00081B200000400004081B200000400004017 +:102BD00081B200000400004081B200000400004007 +:102BE00081B200000400004081B2000004000040F7 +:102BF00081B200000400004081B2000004000040E7 +:102C000081B200000400004081B2000004000040D6 +:102C100081B200000400004081B2000004000040C6 +:102C200081B200000400004081B2000004000040B6 +:102C300081B200000400004081B2000004000040A6 +:102C400081B200000400004081B200000400004096 +:102C500081B200000400004081B200000400004086 +:102C600081B200000400004081B200000400004076 +:102C700081B200000400004081B200000400004066 +:102C800081B200000400004081B200000400004056 +:102C900081B200000400004081B200000400004046 +:102CA00081B200000400004081B200000400004036 +:102CB00081B200000400004081B200000400004026 +:102CC00081B200000400004081B200000400004016 +:102CD00081B200000400004081B200000400004006 +:102CE00081B200000400004081B2000004000040F6 +:102CF00081B200000400004081B2000004000040E6 +:102D000081B200000400004081B2000004000040D5 +:102D100081B200000400004081B2000004000040C5 +:102D200081B200000400004081B2000004000040B5 +:102D300081B200000400004081B2000004000040A5 +:102D400081B200000400004081B200000400004095 +:102D500081B200000400004081B200000400004085 +:102D600081B200000400004081B200000400004075 +:102D700081B200000400004081B200000400004065 +:102D800081B200000400004081B200000400004055 +:102D900081B200000400004081B200000400004045 +:102DA00081B200000400004081B200000400004035 +:102DB00081B200000400004081B200000400004025 +:102DC00081B200000400004081B200000400004015 +:102DD00081B200000400004081B200000400004005 +:102DE00081B200000400004081B2000004000040F5 +:102DF00081B200000400004081B2000004000040E5 +:102E000081B200000400004081B2000004000040D4 +:102E100081B200000400004081B2000004000040C4 +:102E200081B200000400004081B2000004000040B4 +:102E300081B200000400004081B2000004000040A4 +:102E400081B200000400004081B200000400004094 +:102E500081B200000400004081B200000400004084 +:102E600081B200000400004081B200000400004074 +:102E700081B200000400004081B200000400004064 +:102E800081B200000400004081B200000400004054 +:102E900081B200000400004081B200000400004044 +:102EA00081B200000400004081B200000400004034 +:102EB00081B200000400004081B200000400004024 +:102EC00081B200000400004081B200000400004014 +:102ED00081B200000400004081B200000400004004 +:102EE00081B200000400004081B2000004000040F4 +:102EF00081B200000400004081B2000004000040E4 +:102F000081B200000400004081B2000004000040D3 +:102F100081B200000400004081B2000004000040C3 +:102F200081B200000400004081B2000004000040B3 +:102F300081B200000400004081B2000004000040A3 +:102F400081B200000400004081B200000400004093 +:102F500081B200000400004081B200000400004083 +:102F600081B200000400004081B200000400004073 +:102F700081B200000400004081B200000400004063 +:102F800081B200000400004081B200000400004053 +:102F900081B200000400004081B200000400004043 +:102FA00081B200000400004081B200000400004033 +:102FB00081B200000400004081B200000400004023 +:102FC00081B200000400004081B200000400004013 +:102FD00081B200000400004081B200000400004003 +:102FE00081B200000400004081B2000004000040F3 +:102FF00081B200000400004081B2000004000040E3 +:1030000081B200000400004081B2000004000040D2 +:1030100081B200000400004081B2000004000040C2 +:1030200081B200000400004081B2000004000040B2 +:1030300081B200000400004081B2000004000040A2 +:1030400081B200000400004081B200000400004092 +:1030500081B200000400004081B200000400004082 +:1030600081B200000400004081B200000400004072 +:1030700081B200000400004081B200000400004062 +:1030800081B200000400004081B200000400004052 +:1030900081B200000400004081B200000400004042 +:1030A00081B200000400004081B200000400004032 +:1030B00081B200000400004081B200000400004022 +:1030C00081B200000400004081B200000400004012 +:1030D00081B200000400004081B200000400004002 +:1030E00081B200000400004081B2000004000040F2 +:1030F00081B200000400004081B2000004000040E2 +:1031000081B200000400004081B2000004000040D1 +:1031100081B200000400004081B2000004000040C1 +:1031200081B200000400004081B2000004000040B1 +:1031300081B200000400004081B2000004000040A1 +:1031400081B200000400004081B200000400004091 +:1031500081B200000400004081B200000400004081 +:1031600081B200000400004081B200000400004071 +:1031700081B200000400004081B200000400004061 +:1031800081B200000400004081B200000400004051 +:1031900081B200000400004081B200000400004041 +:1031A00081B200000400004081B200000400004031 +:1031B00081B200000400004081B200000400004021 +:1031C00081B200000400004081B200000400004011 +:1031D00081B200000400004081B200000400004001 +:1031E00081B200000400004081B2000004000040F1 +:1031F00081B200000400004081B2000004000040E1 +:1032000081B200000400004081B2000004000040D0 +:1032100081B200000400004081B2000004000040C0 +:1032200081B200000400004081B2000004000040B0 +:1032300081B200000400004081B2000004000040A0 +:1032400081B200000400004081B200000400004090 +:1032500081B200000400004081B200000400004080 +:1032600081B200000400004081B200000400004070 +:1032700081B200000400004081B200000400004060 +:1032800081B200000400004081B200000400004050 +:1032900081B200000400004081B200000400004040 +:1032A00081B200000400004081B200000400004030 +:1032B00081B200000400004081B200000400004020 +:1032C00081B200000400004081B200000400004010 +:1032D00081B200000400004081B200000400004000 +:1032E00081B200000400004081B2000004000040F0 +:1032F00081B200000400004081B2000004000040E0 +:1033000081B200000400004081B2000004000040CF +:1033100081B200000400004081B2000004000040BF +:1033200081B200000400004081B2000004000040AF +:1033300081B200000400004081B20000040000409F +:1033400081B200000400004081B20000040000408F +:1033500081B200000400004081B20000040000407F +:1033600081B200000400004081B20000040000406F +:1033700081B200000400004081B20000040000405F +:1033800081B200000400004081B20000040000404F +:1033900081B200000400004081B20000040000403F +:1033A00081B200000400004081B20000040000402F +:1033B00081B200000400004081B20000040000401F +:1033C00081B200000400004081B20000040000400F +:1033D00081B200000400004081B2000004000040FF +:1033E00081B200000400004081B2000004000040EF +:1033F00081B200000400004081B2000004000040DF +:1034000081B200000400004081B2000004000040CE +:1034100081B200000400004081B2000004000040BE +:1034200081B200000400004081B2000004000040AE +:1034300081B200000400004081B20000040000409E +:1034400081B200000400004081B20000040000408E +:1034500081B200000400004081B20000040000407E +:1034600081B200000400004081B20000040000406E +:1034700081B200000400004081B20000040000405E +:1034800081B200000400004081B20000040000404E +:1034900081B200000400004081B20000040000403E +:1034A00081B200000400004081B20000040000402E +:1034B00081B200000400004081B20000040000401E +:1034C00081B200000400004081B20000040000400E +:1034D00081B200000400004081B2000004000040FE +:1034E00081B200000400004081B2000004000040EE +:1034F00081B200000400004081B2000004000040DE +:1035000081B200000400004081B2000004000040CD +:1035100081B200000400004081B2000004000040BD +:1035200081B200000400004081B2000004000040AD +:1035300081B200000400004081B20000040000409D +:1035400081B200000400004081B20000040000408D +:1035500081B200000400004081B20000040000407D +:1035600081B200000400004081B20000040000406D +:1035700081B200000400004081B20000040000405D +:1035800081B200000400004081B20000040000404D +:1035900081B200000400004081B20000040000403D +:1035A00081B200000400004081B20000040000402D +:1035B00081B200000400004081B20000040000401D +:1035C00081B200000400004081B20000040000400D +:1035D00081B200000400004081B2000004000040FD +:1035E00081B200000400004081B2000004000040ED +:1035F00081B200000400004081B2000004000040DD +:1036000081B200000400004081B2000004000040CC +:1036100081B200000400004081B2000004000040BC +:1036200081B200000400004081B2000004000040AC +:1036300081B200000400004081B20000040000409C +:1036400081B200000400004081B20000040000408C +:1036500081B200000400004081B20000040000407C +:1036600081B200000400004081B20000040000406C +:1036700081B200000400004081B20000040000405C +:1036800081B200000400004081B20000040000404C +:1036900081B200000400004081B20000040000403C +:1036A00081B200000400004081B20000040000402C +:1036B00081B200000400004081B20000040000401C +:1036C00081B200000400004081B20000040000400C +:1036D00081B200000400004081B2000004000040FC +:1036E00081B200000400004081B2000004000040EC +:1036F00081B200000400004081B2000004000040DC +:1037000081B200000400004081B2000004000040CB +:1037100081B200000400004081B2000004000040BB +:1037200081B200000400004081B2000004000040AB +:1037300081B200000400004081B20000040000409B +:1037400081B200000400004081B20000040000408B +:1037500081B200000400004081B20000040000407B +:1037600081B200000400004081B20000040000406B +:1037700081B200000400004081B20000040000405B +:1037800081B200000400004081B20000040000404B +:1037900081B200000400004081B20000040000403B +:1037A00081B200000400004081B20000040000402B +:1037B00081B200000400004081B20000040000401B +:1037C00081B200000400004081B20000040000400B +:1037D00081B200000400004081B2000004000040FB +:1037E00081B200000400004081B2000004000040EB +:1037F00081B200000400004081B2000004000040DB +:1038000081B200000400004081B2000004000040CA +:1038100081B200000400004081B2000004000040BA +:1038200081B200000400004081B2000004000040AA +:1038300081B200000400004081B20000040000409A +:1038400081B200000400004081B20000040000408A +:1038500081B200000400004081B20000040000407A +:1038600081B200000400004081B20000040000406A +:1038700081B200000400004081B20000040000405A +:1038800081B200000400004081B20000040000404A +:1038900081B200000400004081B20000040000403A +:1038A00081B200000400004081B20000040000402A +:1038B00081B200000400004081B20000040000401A +:1038C00081B200000400004081B20000040000400A +:1038D00081B200000400004081B2000004000040FA +:1038E00081B200000400004081B2000004000040EA +:1038F00081B200000400004081B2000004000040DA +:1039000081B200000400004081B2000004000040C9 +:1039100081B200000400004081B2000004000040B9 +:1039200081B200000400004081B2000004000040A9 +:1039300081B200000400004081B200000400004099 +:1039400081B200000400004081B200000400004089 +:1039500081B200000400004081B200000400004079 +:1039600081B200000400004081B200000400004069 +:1039700081B200000400004081B200000400004059 +:1039800081B200000400004081B200000400004049 +:1039900081B200000400004081B200000400004039 +:1039A00081B200000400004081B200000400004029 +:1039B00081B200000400004081B200000400004019 +:1039C00081B200000400004081B200000400004009 +:1039D00081B200000400004081B2000004000040F9 +:1039E00081B200000400004081B2000004000040E9 +:1039F00081B200000400004081B2000004000040D9 +:103A000081B200000400004081B2000004000040C8 +:103A100081B200000400004081B2000004000040B8 +:103A200081B200000400004081B2000004000040A8 +:103A300081B200000400004081B200000400004098 +:103A400081B200000400004081B200000400004088 +:103A500081B200000400004081B200000400004078 +:103A600081B200000400004081B200000400004068 +:103A700081B200000400004081B200000400004058 +:103A800081B200000400004081B200000400004048 +:103A900081B200000400004081B200000400004038 +:103AA00081B200000400004081B200000400004028 +:103AB00081B200000400004081B200000400004018 +:103AC00081B200000400004081B200000400004008 +:103AD00081B200000400004081B2000004000040F8 +:103AE00081B200000400004081B2000004000040E8 +:103AF00081B200000400004081B2000004000040D8 +:103B000081B200000400004081B2000004000040C7 +:103B100081B200000400004081B2000004000040B7 +:103B200081B200000400004081B2000004000040A7 +:103B300081B200000400004081B200000400004097 +:103B400081B200000400004081B200000400004087 +:103B500081B200000400004081B200000400004077 +:103B600081B200000400004081B200000400004067 +:103B700081B200000400004081B200000400004057 +:103B800081B200000400004081B200000400004047 +:103B900081B200000400004081B200000400004037 +:103BA00081B200000400004081B200000400004027 +:103BB00081B200000400004081B200000400004017 +:103BC00081B200000400004081B200000400004007 +:103BD00081B200000400004081B2000004000040F7 +:103BE00081B200000400004081B2000004000040E7 +:103BF00081B200000400004081B2000004000040D7 +:103C000081B200000400004081B2000004000040C6 +:103C100081B200000400004081B2000004000040B6 +:103C200081B200000400004081B2000004000040A6 +:103C300081B200000400004081B200000400004096 +:103C400081B200000400004081B200000400004086 +:103C500081B200000400004081B200000400004076 +:103C600081B200000400004081B200000400004066 +:103C700081B200000400004081B200000400004056 +:103C800081B200000400004081B200000400004046 +:103C900081B200000400004081B200000400004036 +:103CA00081B200000400004081B200000400004026 +:103CB00081B200000400004081B200000400004016 +:103CC00081B200000400004081B200000400004006 +:103CD00081B200000400004081B2000004000040F6 +:103CE00081B200000400004081B2000004000040E6 +:103CF00081B200000400004081B2000004000040D6 +:103D000081B200000400004081B2000004000040C5 +:103D100081B200000400004081B2000004000040B5 +:103D200081B200000400004081B2000004000040A5 +:103D300081B200000400004081B200000400004095 +:103D400081B200000400004081B200000400004085 +:103D500081B20000AE9F00889AB00000AE9F00883C +:103D60009AB00000AE9F00889AB00000AE9F008815 +:103D70009AB00000AE9F00889AB000000000008852 +:103D80009AB00100AE9F414081320000B29F2240B4 +:103D90007B6F00000000194081B20100AE9F00401F +:103DA00081B20000000019417BB30100000000A4B3 +:103DB000C4B30100000000A1C6B3010000002FA29F +:103DC000C8B301000814004049990100A89F004DA4 +:103DD0009ACC0100BB9F2640813200000000004CBD +:103DE00049C10100B99FA2419B500000BF9F808044 +:103DF0008032000000005249FD9301000000004A9B +:103E0000FD930100C29F0042CD9300000000514A83 +:103E1000FD93010000000049FD930100C29F004393 +:103E2000CB9300000000504081B20100D29F0040BF +:103E300019990100000000F09AB001000000004450 +:103E400049D10100000040F080B201000000414D66 +:103E500080B20100CA9F00401999010000004C4047 +:103E600081B201000000004449D10100000000F0CF +:103E70009AB001000000004D10B10000000000E207 +:103E800049B10100000000E343B10100000000E47B +:103E900045B10100000000407BB301000000484F25 +:103EA00040B10100D29F004081B2000004000040F8 +:103EB00081B200000400004081B200000400004014 +:103EC00081B200000400004081B200000400004004 +:103ED00081B20000040000CB81C80100F4820040E0 +:103EE000F29300004082004081B200004005004093 +:103EF00081B200001806004081B20000F482004048 +:103F000081B20000AF82004081B2000038810040E1 +:103F100081B200003681004081B20000B8800040CC +:103F200081B200001A87004081B20000AF820040D9 +:103F300081B20000F582004081B20000AB920040E7 +:103F400081B20000F095004081B200007392004001 +:103F500081B20000DF95004081B200004A9300402A +:103F600081B20000ED92004081B20000E792004073 +:103F700081B200009A82004081B2000000008040BF +:103F800081B201000400004081B200000400004042 +:103F900081B200000400004081B200000400004033 +:103FA00081B200000400004081B200000400004023 +:103FB00081B200000400004081B200000400004013 +:103FC00081B200000400004081B200000400004003 +:103FD00081B200000400004081B2000004000040F3 +:103FE00081B200000400004081B2000004000040E3 +:103FF00081B200000400004081B2000004000040D3 +:1040000081B200000400004081B2000004000040C2 +:0440100081B2000079 +:00000001FF diff --git a/trunk/firmware/slicoss/oasisrcvucode.sys.ihex b/trunk/firmware/slicoss/oasisrcvucode.sys.ihex new file mode 100644 index 000000000000..813bea4e133e --- /dev/null +++ b/trunk/firmware/slicoss/oasisrcvucode.sys.ihex @@ -0,0 +1,162 @@ +:10000000000200004775010004A01301001CB75B4B +:10001000093000B65F01001C00000020183B783A50 +:10002000001CA27701001C071D017018AD7BF1FFB9 +:100030001CB37BA9AA1EB47B010C1CB57B0D061C4E +:1000400000003064080C315A70040C315A80040CE2 +:10005000314E90040C314AA000092555C0040C31E2 +:1000600052B000E92455C004CCB3001C1CEB2D0198 +:10007000001C065632D408079D00001C7BB7020006 +:1000800010A00F31540906565EC004A0305403007E +:10009000AC30550300CD033A001C7BB702001C6056 +:1000A0008E3154092925550300808E3154098C3036 +:1000B000910004471C01001CA00F3154090000648A +:1000C0000004471C65C004471C5503006C30010048 +:1000D0001C4D3402001C7BB702001CA00F315409D8 +:1000E000C88337001C800100001C0000640004A0CD +:1000F0000F305409000054C3047BFBF2001CCC33C6 +:100100000D001CB47BFD031C800E305409E0FB0580 +:10011000001C00008C0300B30F3154090000EC7088 +:10012000040000EC800400008C930061768DC30411 +:10013000C08D315409E07B00C01FA0FDC50100CC7B +:100140003305001CD403003C1CD4D31B001CC0D3BB +:1001500052001C00005C13048E8E3254095B805EDA +:100160001304000000001C0000940100A00F315493 +:1001700009A00F315409C003FC7F1CA001A001009D +:100180000000A40100A00F315409C003FC031CF5BA +:100190007701001C267AE6051CA00F315409B30F25 +:1001A000315409B50202001CA00F3154097A7E02B5 +:1001B000001CB50202001C530F325409AF030100AA +:1001C0001C7A0E325409B50202001C000002001C09 +:1001D000A03DAA11040000AC1104D4D352001CB5F8 +:1001E0003EB2010020FBFDFF1F802C6C0300B93ADA +:1001F0009E0100753B02001CA71C010010DB83164A +:10020000001CC71D21C104B93B8DC1048B2C01000A +:100210001C6B2C35C1040000781100CB2C79C10473 +:10022000A00F315409A00F31540954D002001C49C9 +:1002300025B10100AB2C81C104A71D550300CC33AF +:1002400009001CEB2D01001CEA2901001CA00F3144 +:100250005409AE0F315409A00F315409D407FC03DF +:100260001C993A02001CBB3802001C003800001C1C +:100270000000FC0104DB3B7E001CC71D01001C26A6 +:100280007AFA051C271D01001CB30F3154097A0EA0 +:10029000325409530F3254097A0E325409530F3233 +:1002A00054097A0E325409530F325409A00F3154B5 +:1002B000097A0602001C530F325409AF0301001CD7 +:1002C0007A0E325409530F3254097A0E32540953BC +:1002D0000F3254097A0E325409530F3254097A0EF0 +:1002E000325409003D02001C0000581200CB2C01C2 +:1002F000001C753B02001CA71C010010CB2F050041 +:100300001C602C00001CC71CC90200A00F3154093E +:10031000530702001C467ACA051C7A0E3254094063 +:10032000FA19001C0000880204467ACA051CA00FB6 +:10033000315409A00F315409A00F315409A00F31D5 +:100340005409B37B01C01F740E305409C0039C00D4 +:100350001C8000D802000000D802040000AC120586 +:10036000071D01001CD4D32B001CD4D352001C80C9 +:10037000767D13040000E00200A67B950310C79C65 +:1003800000001C802C00001C00006C0204000054C3 +:10039000C304AB2DD91205071DB5C2048B2D010076 +:1003A0001C692501001CA67B950310CB2F09001C9E +:1003B000602C00001C0000480300530F3254094613 +:1003C0007ACA051C7A0E32540940FA19001C000042 +:1003D000100304467ACA051CB50F315409A00F3129 +:1003E000540973EC2A0304602C00001C000028034D +:1003F00000C71C01001C0000281305071D01001C7C +:10040000C0D722001C75567E1304602C00001CE728 +:100410001C450304E79C00001CA67B950310802C60 +:1004200000001C0000F80204000054C304B97B0162 +:10043000001C00008CC304CBAFFC071CCB2F0104B5 +:100440001CC79F80031C00008CC304CBAFFC071C9F +:10045000CB2F0D041CC79F80031C00008CC304CB52 +:10046000AF00F81DCB2F01001DA67B95031CC79C78 +:100470008CC30400008C1305071D01001CC01DDC8B +:10048000D308279DE40300A0EE46D400FB750914B1 +:1004900004207B06001CC01C1C04000000B0D30814 +:1004A000000000F400C0EFF2001C20255C14046082 +:1004B000B7D2030000000C1500CCB3FC031CCC33F6 +:1004C00005021C00000CC50460B70E050400000CFA +:1004D000150400005CC404C01D98F304000068C447 +:1004E00004079D00001C1B74FDF304A67BF1031C94 +:1004F000A00F695409E07B00FC1F397F02001C0734 +:100500001D9DC304A67BAD031C000068C404E01C51 +:1005100000001C0000A40304CBAF00F81DCB2F018A +:10052000101D0000ACC3040000AC0304CBAF00F806 +:100530001DCB2F01181DC79F000B1C0000ACC3046E +:10054000FB7501001C071D01001CCCB3FC031CCC77 +:100550003301021C0000ACC304A01C00001CA0EE70 +:10056000A20304CBAFFC071CCB2F09041CFB7501B5 +:10057000001C0000ACC304CCB3FC031CCC33010250 +:100580001C00000CC5040000783405CCB3FC031C2F +:10059000CC3315021C479D54C404000078440080ED +:1005A0001D7C5404871D8D0400CE7601001CEF765F +:1005B0009DC404A4778D2409E47601001CC476014F +:1005C000001C0000985404D776015018F6760100FC +:1005D0001C00000030180000000010CC3045C5049D +:1005E000EB2D01001CEA2901001CC05901001CF57B +:1005F0007729C504E030DC0400004CB00400204C36 +:10060000F404000000E80400CCB3FC031CCC330964 +:10061000021CEB2DB5C404CCB3FC031CCC33190273 +:100620001CEB2DB5C404CCB3FC031CCC330D021C55 +:10063000EB2DB5C404CCB3FC031CCC3311021CEB72 +:100640002DB5C404007B00801CAE7745050000007A +:1006500004C004D38B00FC1F607A3C001C604CC0BB +:100660000400C02F20051FE030B004008025B00436 +:1006700000B55BB10404692601001C6A2B01001C53 +:10068000801D00001CA925450500EE3000001CAFB0 +:10069000770105000000AC2404B45F014018079DF9 +:1006A000485504B77601001C967601001C471D01D1 +:1006B000001CA433016018A42F0160186477016046 +:1006C000182477016018447701001C648803001C1B +:1006D000A43F01001CA43B01001C537B00C01CD3A1 +:1006E000CF1B001C534F02001CDACF00C01FD55790 +:1006F0000F001CD3D337001CD4530F001CE029007B +:10070000001CF5D5B0050000009C5504775601008B +:100710001C565301001C0000001018000004C00407 +:10072000F55501001C0000B45504775601001C5615 +:100730005301001C0000001018000004C004CB2F5F +:10074000011810CB2F011010CB2F010810CB2F0157 +:100750000810CB2F012010CB2F012810CB2F010028 +:1007600010892561C2040000ECC204000054C304D7 +:10077000000054C304000054C304000060C204001D +:1007800000ECC204000054C304000054C304000081 +:1007900054C304401C6CC004401C9CC004A7775583 +:1007A000C3040000C4C004271DF1C004000054C3EA +:1007B00004000054C304000054C30400002CC60409 +:1007C00000002CC60400002CC60400002CC6040047 +:1007D000002CC60400002CC60400002CC604000037 +:1007E0002CC60400002CC60400002CC60400002CFB +:1007F000C60400002CC60400002CC60400002CC651 +:100800000400002CC60400002CC60400002CC60402 +:1008100000002CC60400002CC60400002CC60400F6 +:10082000002CC60400002CC60400002CC6040000E6 +:100830002CC60400002CC60400002CC60400002CAA +:10084000C60400002CC60400002CC60400002CC600 +:100850000400002CC60400002CC60400002CC604B2 +:1008600000002CC60400002CC60400002CC60400A6 +:10087000002CC60400002CC60400002CC604000096 +:100880002CC60400002CC60400002CC60400002C5A +:10089000C60400002CC60400002CC60400002CC6B0 +:1008A0000400002CC60400002CC60400002CC60462 +:1008B00000002CC60400002CC60400002CC6040056 +:1008C000002CC60400002CC60400002CC604000046 +:1008D0002CC60400002CC60400002CC60400002C0A +:1008E000C60400002CC60400002CC60400002CC660 +:1008F0000400002CC60400002CC60400002CC60412 +:1009000000002CC60400002CC60400002CC6040005 +:10091000002CC60400002CC60400002CC6040000F5 +:100920002CC60400002CC60400002CC60400002CB9 +:10093000C60400002CC60400002CC60400002CC60F +:100940000400002CC60400002CC60400002CC604C1 +:1009500000002CC60400002CC60400002CC60400B5 +:10096000002CC60400002CC60400002CC6040000A5 +:100970002CC60400002CC60400002CC60400002C69 +:10098000C60400002CC60400002CC60400002CC6BF +:100990000400002CC60400002CC60400002CC60471 +:1009A00000002CC60400002CC60400002CC6040065 +:1009B000002CC60400002CC60400002CC604000055 +:1009C0002CC60400002CC60400002CC60400002C19 +:1009D000C60400002CC60400002CC60400002CC66F +:1009E0000400002CC60400002CC60400002CC60421 +:1009F00000002CC60400002CC60400002CC6040015 +:040A0000002CC604FC +:00000001FF diff --git a/trunk/firmware/sxg/saharadbgdownloadB.sys.ihex b/trunk/firmware/sxg/saharadbgdownloadB.sys.ihex new file mode 100644 index 000000000000..e3016d34feee --- /dev/null +++ b/trunk/firmware/sxg/saharadbgdownloadB.sys.ihex @@ -0,0 +1,3937 @@ +:1000000002000000DCF500000C0000000000000011 +:10001000FF1F00000100000000000088824D293A07 +:1000200000000404000000800200009000000900AD +:100030000000008002000090000009000000008025 +:100040000200009000000900000000800200009003 +:10005000000009000000008002000090000009007C +:1000600000000080020000900000090000000080F5 +:1000700002000090000009000000008002000090D3 +:10008000FEFF0000000000AC020036320000360027 +:10009000000000A80200009200001613000000807B +:1000A0000200009000001613000000800200009083 +:1000B00000001613000000800200009000001613DC +:1000C0000000008002000090000016130000008075 +:1000D0000200009000002000000000D80F8028924D +:1000E00000002100000000D80F80289200002200AC +:1000F000000000D80F80289200002300000000D8E4 +:100100000F402B9200002400000000D80F8028929E +:1001100000002500000000D80F8028920000260073 +:10012000000000D80F80289200002700000000D8AF +:100130000F80289200002800000000D80F8028922D +:1001400000002900000000D80F80289200002A003B +:10015000000000D80F8028920000360000000098B0 +:100160001E80E99A00002C00000000D80F80289221 +:1001700000002D00000000D80F80289200002E0003 +:10018000000000D80F80289200002F00000000D847 +:100190000F80289200003000000000D40F00009271 +:1001A00000003000000000D40F400092000030003A +:1001B000000000D40F80009200003400000000D442 +:1001C0000FC0009200003000000000D40F00019228 +:1001D00000003000000000D40F4001920000300009 +:1001E000000000D40F80019200003000000000D415 +:1001F0000FC0019200003000000000D40F000292F6 +:1002000000003000000000D40F40029200003000D7 +:10021000000000D40F80029200001613000000803E +:100220000200009000003000000000D40F00039294 +:1002300000003000000000D40F40039200003000A6 +:10024000000000D40F80039200003000000000D4B2 +:100250000FC0039200000000000000D05F3F003498 +:10026000000016130400008042FFFCB000000000F4 +:10027000000000881280FD3A000016130000008084 +:10028000020000901613161302010080828DFDBC3F +:1002900000000000000000881280FD3A000000000D +:1002A000000000F803C001323800000000010084A3 +:1002B000824D281A000036000000007409400092A8 +:1002C00000004F00000000FC020000920000480007 +:1002D000000000800200009000004D00000000902F +:1002E0000E80189200001B030000000008C020923E +:1002F000000089000000000008002192000019039E +:10030000000000000840219200008600000000006C +:100310000885219000009B03000000EC02C022929F +:1003200000009404000000800200009000005800CB +:10033000000000FC0240189D00005100000000D0A9 +:10034000020000920000E003000000800200009024 +:100350000000161300000080020000900000000062 +:10036000000100800200007000004C00000000004E +:1003700009C0219200004A0012010000088522B045 +:1003800018003600000000F8738A029900008E0001 +:100390006A000080020000B008008E00000000F833 +:1003A0002340019900000000000100E80200907263 +:1003B0000000161380010080B200E9B600000204BC +:1003C0000000007C1EC0E79A08000000000000F852 +:1003D000134001390000F60300000008B801009442 +:1003E000000016130300007809401ABD0000161320 +:1003F00004010080E28097BC00000000000000A023 +:10040000E125003408000000000000F8B340013985 +:1004100000000204B20000D8020000B2000016136F +:1004200017010080020000B000001F06001001F854 +:1004300002006E9200005B000A0100CC020000B2D4 +:1004400000007000030100FC024019BD0800020416 +:10045000000000F8A34001990000000000000084A3 +:1004600001C02F320000000000000090F1010034B4 +:10047000000000000000009401C02F320000600066 +:10048000800100801281FCB6000016130401008078 +:1004900002C02FBC02006000B00000A0F20B00B947 +:1004A000000063000401008002C0B0BC00006E00C8 +:1004B000A000008002000090000065008001008024 +:1004C000F24BD0B600006E00A00000800200009049 +:1004D00000000000A0000004FD4BD03400006B00C1 +:1004E000800100801281FCB60000C211000000D81B +:1004F000020000D20000161304000080028092BCAB +:1005000018000000000000F8730A03396E0036007E +:10051000000000C00200369200009611000000D8D2 +:10052000020000D20000161304000080028092BC7A +:1005300018003600000000F8730A03F900005B00A1 +:10054000030100FC024018BD00008500030000FC10 +:10055000024019BD000000000000009401C02F32CD +:100560000000000000000080F101003400000000E5 +:100570000000008401C02F3200007500800100805F +:100580001281FCB6000016130401008002C02FBCCB +:1005900002007500B00000A0F20B00B90000780066 +:1005A0000401008002C0B0BC00008300A0000080F5 +:1005B0000200009000007A0080010080F24BD0B66B +:1005C00000008300A00000800200009000000000F6 +:1005D000A0000004FD4BD0340000800080010080AA +:1005E0001281FCB60000C211000000D8020000D247 +:1005F0000000161304000080028092BC1800000066 +:10060000000000F8730A033983003600000000C0C0 +:100610000200369200009611000000D8020000D2BD +:100620000000161304000080028092BC18003600FF +:10063000000000F8730A03F900007000030100FCD9 +:10064000024019BD00005B00030100FC024018BD20 +:1006500008000204000000F8A3400199080000000F +:10066000000000F87340013900008E008001008016 +:10067000E20180B600008B000000008002000090C4 +:10068000080091030C0000F8534001B900008D00F0 +:1006900080010080E20180B600001613120000689D +:1006A000020580B00000F6030000006C1FC0F69A3F +:1006B000000000000000000008058030000000007D +:1006C000000000FC020001320000000000000010E9 +:1006D00008803D3200000000000000CC0200003223 +:1006E00000000000000000100900363200008012F7 +:1006F00000000014090080D2000016138000008062 +:1007000062802FB60000161302010080823A80BC7E +:100710000000161306010080923A80BC0090161368 +:1007200004010080A20D80B000001613120100BC6D +:1007300008C021B200000000000000D40200003216 +:1007400002A0000000000000A90D80320000161376 +:100750001200005402A438B2000200800000002CF5 +:100760000800373218003600000000F8730A03F959 +:100770000000000000080004088072320000A2009F +:100780009F00005C080072B28300A100800100801D +:1007900082CD85B00000B6000000002CD8C1829444 +:1007A0000000B6000000002C88C1829400001613DF +:1007B00006010080827D80BC000FAC000401008037 +:1007C00082CD85B00000AC00800000803281FCB694 +:1007D0000000161312000068020580B0000000003F +:1007E0000000006C1FC0F63A00000000000000FC92 +:1007F000020001320000AA00040100DC43603DB3A6 +:100800000000F603000000FC020000921800000047 +:10081000000000F8738A0339A7003600000000C00A +:10082000020036920000AE0080010080F2C085B662 +:100830000000BE000000002C98C182941000C3008C +:1008400087000000792116B80000C30080010078FD +:10085000390090B08300C3008700007889CD85B04F +:100860000000B30080000080028097B60000B60050 +:100870000000002C88C182940000B5008000008038 +:1008800022C185B60000B6000000002CD8C18294B9 +:100890000000C3000000002C98C182940000BC003E +:1008A00080010080D2C182B60000C30080010080B8 +:1008B0007280FCB600000000001800A8423D7230B3 +:1008C00000000000541809FEF2C07C300000EA006D +:1008D00080010080F2C185B60000C50000000080E4 +:1008E00002000090000016138001008082C182B6D1 +:1008F0000000B800800000808280FCB60900C300C0 +:10090000040000B428BF17B88300C500870000ACFE +:1009100088CD85B00000C30004000080D2E28AB018 +:1009200000000000001800A8423D72300000C50021 +:10093000541809FEF2C07C9000000000540000FC36 +:100940000200003200000000001800200700003202 +:100950008000802000000080C2CD85300000DA00D9 +:100960000B000080020000B01800000000000078BA +:1009700079A116382000EA0004000080828D97BC1F +:100980000000D100800100806280FCB68300D100AD +:100990008700007889CD85B00000CD008000008000 +:1009A000028097B60000D10080010080128097B6C7 +:1009B0000000D1008001008072C185B610000000E7 +:1009C00000000078796116380000D800040100802A +:1009D000328097BC0000EA000000002CB8C182946D +:1009E0000000D800800100805280FCB60000D800D2 +:1009F0008000008072C185B60000D80080010080B0 +:100A000002C185B60000D80080010080D2C185B641 +:100A1000180000000000007879E116380000D800C6 +:100A200004010080328097BC0000EA000000002C26 +:100A3000C8C18294000000000000000408000432D5 +:100A40000000EA000000002CA8C182940800000009 +:100A500000000078792117380000EA0004000080C7 +:100A6000328097BC0000EA0004010080228097BC1D +:100A70001F0000000012000889CD72300500000040 +:100A800000120000B9DC173800000000000000A8C8 +:100A9000220090370000EA008000868022247CB685 +:100AA00000000000000000780905803000001613E7 +:100AB0000201008082BA97BC000016130601008074 +:100AC00092BA97BC0000161312000068020580B0AD +:100AD00000000000000000FC020001320000E800FD +:100AE000040100DC43603DB30000F603000000FC9D +:100AF0000200009218000000000000F8738A033919 +:100B0000E5003600000000C002003692020000003E +:100B100000000010090036320000801200000014AE +:100B2000090080D20000F10012010060084023B2E9 +:100B30003200000000000010090036320000801270 +:100B400000000014090080D20082000000000008AC +:100B5000088036320000E100000000641F40F69A71 +:100B60000000161312000024080023B20000161320 +:100B70001200002008C023B2000016131200001853 +:100B8000088023B200000000000000FC02000132D7 +:100B90000000F800040000DC43603DB318000000D2 +:100BA000000000F8738A0339F4003600000000C02A +:100BB0000200369200000000000000FC02008532B6 +:100BC00000000000000000D8028001320000000098 +:100BD000000000D00200003200C007011801000C24 +:100BE000A8CD3EB20000F80012000038028081B2A9 +:100BF000000000000000003C020082320000000003 +:100C0000000000300240823200000000000000348A +:100C10000200863220800000000000080880363282 +:100C2000000000000000005C1FC0F53A000000005A +:100C300000000078090580300000161302010080D2 +:100C400082BA97BC000016130601008092BA97BCC6 +:100C50000000F60312010068020580B000001613C0 +:100C600000000080020000900000000000180078E2 +:100C70000900723200230A0104010080A2CD82B073 +:100C800000000B0100000000090000920000161394 +:100C90009F16000029C172BC00000000001800006F +:100CA000078081320000000000200000070082322F +:100CB00000000000002800000780973210000000AC +:100CC00000300000172090390000000000380000BC +:100CD00007C0823200000000000000D8020000328D +:100CE00000000000000000000740803200001401F6 +:100CF00080010080A2C182B600001501000800003A +:100D000057008097050000000008000007A0043984 +:100D10000000161304100000074082B2000000001B +:100D20000018000007008632000016131200005061 +:100D3000F2C138B418003600000000F8730A03F955 +:100D40000000161312000068020580B000000000C9 +:100D500000000078090580300000161302010080B1 +:100D600082BA97BC000016130601008092BA97BCA5 +:100D7000000016131200004802C080B20000F60303 +:100D8000CA010008E8818094000000000000008093 +:100D9000024590300000161304010080120028BCA8 +:100DA00000001613120100BC08C021B208000000A8 +:100DB000000000F89340013910000000540000FCCE +:100DC000824D9036000016130200008042C02FBCF6 +:100DD00000002501F00100D8020000B20000000070 +:100DE000620401A802C06E3200000000000401008D +:100DF00059C06E37000000000004017819C06E3A37 +:100E0000000000004E0401EC06BD97300000000019 +:100E1000E00000F41E40EF3A0000161304190B82A4 +:100E200002C07CBC0000000000180BCE074000325E +:100E30000000000000000000074009320000161307 +:100E400004010080020036BC000000000008000021 +:100E500077C029370000161304100000173D90BA20 +:100E600000000000001800000780F4320000161394 +:100E700012000040F2C138B40B0000000000001066 +:100E8000090036320000801200000014098083D26D +:100E900000000000000000FC32C02F300000000005 +:100EA0000000001008803D3218003600000000F8F5 +:100EB000730A03F900000000000000D402000032B1 +:100EC000000016130401008002802DBC0000CE013A +:100ED0008038008022C072B600003E01120000C8B7 +:100EE000020020B2000045011201005C088020B21F +:100EF000000016131200006002802CB218000000DF +:100F0000000000F8738A03393B013600000000C07E +:100F10000200369200000000000000F81F80FF3A37 +:100F200000000000000000FC320085300000A3013A +:100F30000400008042603DB318000000000000F88B +:100F4000738A033941013600000000C00200369266 +:100F5000080000000000000088CD85370000000078 +:100F60000000002008007232000000000008002489 +:100F700008007232000016130410006C080072B2F0 +:100F8000000000000018004C080072320000161328 +:100F900004200018080072B2000000000030002891 +:100FA00008007232000016130200008082BD82BC6D +:100FB000000000000028003008007232000000002D +:100FC00000000060088082320000560106000080A8 +:100FD00062A082BC000016139F3C0014288072BCE3 +:100FE00000000000000000000700063207000000BB +:100FF00000080000774A09390000161304100000A9 +:10100000070082B200000000CA19000007408232C7 +:101010000000161312000040F2C138B400000000B6 +:10102000000000D80240003200007D010438007842 +:10103000D9C572B000005A0180010080028097B6C5 +:1010400000000000000000F882802F3400005C01E6 +:1010500080010080128097B600000000000000F8B8 +:1010600092802F34000016130401008002402DBC32 +:10107000040000000038003CB81C173800000000D5 +:101080000000003C28C0833700000000003A002C1C +:1010900008C07232000000000000001CB8E0833A73 +:1010A00000000000CB2900200700003200007C0176 +:1010B0000400008002C081BC000000000000003479 +:1010C00078A0813E000000000000001CD8E0813CB8 +:1010D00000006A01063A0080B25C83BC0000000098 +:1010E000003A000089C17237070069012B01000432 +:1010F000790A04B900000000CB00000419419034C3 +:1011000000006D01003A002C070000920000000072 +:10111000003A002CD7E0723C000000000000000004 +:101120000900003200000000000000040900003245 +:10113000000000000000000007648332000000008F +:1011400000080000070080320000161304100000A1 +:1011500007C086B2000000000018000007C08432FB +:1011600000008C0104000028D8A082BC00001613E7 +:1011700009010080020000B0000000000000000033 +:10118000D820803A000077010400008072802DBCD6 +:10119000000016131200004412E438B20000780177 +:1011A000000000D812802D9A000075120000000483 +:1011B000F94190F400007A0104000018D8A081BC25 +:1011C000000062010000006CD8E0869A0000201246 +:1011D0000000004408802DF2000062010000003091 +:1011E0000800009200000000CB1900200700003228 +:1011F00007007F012B010004790A02B900000000FA +:10120000CB00000419419034000000004D000000A4 +:10121000A7A0813E00000000000800000700803207 +:10122000000016130410000007C086B20000000082 +:101230000018000007C0843200008C010400002860 +:10124000D8A082BC0000161304010080626083BC39 +:101250000000000000000000D820803A0000890152 +:101260000400008072802DBC0000161312000044A0 +:1012700012E438B200008A01000000D812802D9AD2 +:101280000000751200000004F94190F400002012E3 +:101290000000004408802DF200007D0100000030B5 +:1012A000080000920000161380000080A2802FB674 +:1012B0000000000000000004F94190340000161303 +:1012C0001200004412E438B218003600000000F8A2 +:1012D000730A03F9000016130400008002802DBC7D +:1012E00000000000001800040980733200000000B4 +:1012F000002800088980733700000000000000808B +:1013000007008632410000000006008C07003632DC +:10131000000098012908008007C085B200009B01E9 +:101320002810008C070000B200009C01001200840D +:1013300007000092000000000010008CF7E0823AE5 +:1013400000009B0128180080074090B200009C011B +:1013500000120084070000920000000000120084C8 +:1013600027E4823200000000000000783900853058 +:101370000000161304010080F28B97BC0000A1014D +:101380000400008042603DB318000000000000F837 +:10139000738A03399C013600000000C002003692B7 +:1013A00000000000000000FC02008532000016135F +:1013B0001200005C52812CB400000000000000D834 +:1013C00002800132000000000000008002003B3279 +:1013D0000840A501F0010008088036B200000000B6 +:1013E0000004013808C06E3200000000E00000F484 +:1013F0001E40EF3C0000AC010B01008C080000B265 +:101400000000A901F2010080020000B0000000000D +:10141000000000F00E003A320000BE01E200008041 +:101420000E8083920000AC01F2010078C93B3ABC07 +:101430000000B60102010080828097BC000000001D +:10144000000000A80200E8320000B10104000080A2 +:1014500022A22ABC0000B50104190B8202C07CBC88 +:10146000000000000000008C18C0883A0000000056 +:10147000000000A812802A3A00000000000000A826 +:1014800002BD2A300000AF0104010080E2A02ABCA6 +:101490000000BB010200008082C088BC0000000088 +:1014A000E20000080800003200000000000000A870 +:1014B000028088320000161304190B8212C07CBC13 +:1014C0000000000000180BCE070000320000F603F9 +:1014D000000000DC03000092000000000000003863 +:1014E00008802A3200000000000000F00E003A32AE +:1014F00000000000E20000800E802A3200000000A0 +:10150000000000A8028088320000161304190B8224 +:1015100012C07CBC0000000000180BCE0700003297 +:1015200000000000000000DC030000320000161381 +:1015300004000080227AE8BA0000000000000000E9 +:1015400007808332000000000000000079C02937C6 +:101550006020000000000000890D903A00000000AB +:10156000CA0100D812802D3A0000000000000000DF +:101570000700013200000000000800000700903260 +:1015800000000000001000000740E83200000000EA +:10159000001800000780E83200000000000000FC96 +:1015A000020000320000F60312010048F2C138B414 +:1015B00000001613000000800200009000001613C7 +:1015C0000401008002402DBC0000161304010080BD +:1015D00002802DBC000016138000008072802FB6A0 +:1015E0000000000000300078088072320400000023 +:1015F00000380054A85C16380B0000000038002C9E +:10160000A8DC1638140000000000001C884D853A44 +:101610002200000000000010090036321000801285 +:1016200000380014A99C87D90000000000000020A9 +:101630000800723200000000000800240800723226 +:10164000000000000010006C080072320000000072 +:101650000018004C08007232000016130420001815 +:10166000080072B20000000000280030080072324A +:10167000000016139F3C0014188072BC0000E501A6 +:1016800004000080024081BC000000000000001443 +:101690001840813C000000000000000007000632F6 +:1016A0000700000000080000774A093900001613FF +:1016B00004100000070082B200000000CA190000F8 +:1016C000074082320000161312000040F2C138B405 +:1016D00000000000000000D80240003200000000BE +:1016E0000000006478C02937021000000000006488 +:1016F000884D863A0000000000000080080000329B +:10170000000000000000004008000032000000005F +:101710004D00000077A0813E00000000000800009E +:1017200007408632000016130410000007C086B27E +:10173000000000000018000007C084320000000212 +:101740000400001CD8E081BC0000161309010080D1 +:10175000020000B00000000000000064D860863A7B +:101760000000F4010400008072802DBC00001613FC +:101770001200004002C038B20000FC01000000D896 +:1017800012802D9A0000161312000040F2C138B4E6 +:1017900018003600000000F8730A03F90000FA018F +:1017A0000401008002802DBC00001613800100801F +:1017B000A2802FB60000F501670000F8A2802FB5C7 +:1017C00000001613120000E802C021B20000161338 +:1017D0000401008072802DBC00000000000000D8D1 +:1017E000024000320000FE0104000018D8A081BCB5 +:1017F0000000EA010000006CD8E0869A0000C910E1 +:101800000000004408802DF20000EA0100000030D2 +:10181000080000920000161312000040F2C138B414 +:1018200018003600000000F8730A03F900000602F1 +:101830000401008002802DBC00001613800100808E +:10184000A2802FB600000102670000F8A2802FB529 +:1018500000001613120000E802C021B200001202BC +:1018600004010080020084BC00000000000000D4DD +:101870000240003200000000000000A42240853A2F +:10188000040000000018004088CD743600000000FD +:10189000000000402800843700000000000000D451 +:1018A00002000032140012020400001C880D84BCE7 +:1018B0000000161309010080020000B000000000C3 +:1018C000000000780961853A800016130601008047 +:1018D000828D97BC0000000000000064D860863A4A +:1018E0000000FC01000000D8024000920000140239 +:1018F00004000018D8A081BC000016020000006C93 +:10190000D8E0869A0000C9100000004408802DF23B +:10191000000000000000003008000032000000005D +:10192000000000D40240003200000000000000A4CB +:1019300022C0823A000000000000003CB860853CF4 +:1019400004001C028100006088CD74B60000000015 +:1019500000040028F8A0753C00001D020008007477 +:10196000088075920000000000080028F8A0753C6F +:10197000000000000000002808A1823C00000000D8 +:10198000000000A4F2602A3A0000000000080048AD +:1019900008007532000000000020007C08807532CD +:1019A00009002302041A007088CD74B009000000F9 +:1019B000001A004C87CD74317F00000000000064E5 +:1019C000884D863100000000000000642840863AFF +:1019D00023000000000000100900363200008012D1 +:1019E00000000014098082D20C00000000000010EA +:1019F000090036320000801200000014098084D2F1 +:101A000000000000000000D802400032000000008A +:101A1000001000000740863200000000000000D8DF +:101A20000280003200000000001000005761863A7A +:101A300000003002120000C8020020B20000330291 +:101A40001201005C088020B2000016131200006032 +:101A500002802CB2000040012A0100D4020000B232 +:101A600018003600CA0000F8730A03F900004101AB +:101A7000000000F81F80FF9A00000000000000D462 +:101A800002400032080000000000000088CD8537C9 +:101A9000000000000000001CE8A1823E00000000E1 +:101AA000000000A42240853A000000000008005019 +:101AB0000780843200003A020401008072A082BCD8 +:101AC00000000000001A004CC7E174320000000062 +:101AD0000000006808E1813A00003D0290010078B2 +:101AE000F9A186BA00000000000000781980973A3A +:101AF000000000000020005807809732000000001E +:101B0000000000D802800032000000000000000049 +:101B10000700843200000000400800005721803A8E +:101B2000000041021200004CF2C138B40000000075 +:101B3000000000000821803A0000000000000004BE +:101B400008C0813200000000510000D802C00032FD +:101B500000000000000000D402000032000000007D +:101B6000CB1900200700003200001613020100808C +:101B700032802DBC07004A022B010084780A02B98A +:101B800000000000CB0000841841883400000000F1 +:101B90004D00000077A0813E00000000000800001A +:101BA00007008032000016130410000007C086B240 +:101BB000000000000018000007C084320000161367 +:101BC0009F000028D8A082BC000068020400001C0E +:101BD000D8E081BC0000161304010080626083BC61 +:101BE000000059022D000000D82080BA00005402E5 +:101BF000120100E802C021B218003600000000F80F +:101C0000730A03F9000056020401008022802DBCF3 +:101C100000005902CD0100D8024084920000161342 +:101C20000401008002802DBC00001613800100809A +:101C3000A2802FB600005302000000F8A2802F956A +:101C400000005C020400008072802DBC00001613AE +:101C50001200004412E238B200006602000000D810 +:101C600012802D9A0000000000000084F8418834A2 +:101C7000000016131200004412E238B218003600B9 +:101C8000000000F8730A03F90000640206010080F6 +:101C900022802DBC000016130401008002802DBCA0 +:101CA0000000161380010080A2802FB600005E02A3 +:101CB000670000F8A2802FB500005F02000000E876 +:101CC00002C02192000016130401008072802DBC16 +:101CD00000000000000000D802C000320000C9105F +:101CE0000000004408802DF2000047020000003090 +:101CF000080000920000700280000080D2802FB6A1 +:101D000000006B02120100E802C021B21800360088 +:101D1000000000F8730A03F900006D02040100805E +:101D200022802DBC00007002000000D80240849286 +:101D3000000016130401008002802DBC0000161361 +:101D400080010080A2802FB600006A02000000F827 +:101D5000A2802F9500000000CD000084F841883457 +:101D6000000016131200004412E238B20000000016 +:101D7000000000D40240003200000000000000A477 +:101D800022C0823A0000790204010080420086BC31 +:101D90000000000000080058074087320000780269 +:101DA0008F010074184087BA000000000000007422 +:101DB0000800003200007B0200040058F7A0869A59 +:101DC0000000000000000078F9A0863A280000001A +:101DD00000080058878D973C00000000000000D8E4 +:101DE000024000321800000000000000B760853992 +:101DF000080000000008000087CD853700007E0243 +:101E00001200004CF2C138B400000000000000488D +:101E100018A0843A00000000000000D40200003244 +:101E2000000000000000008057A1863A4100000039 +:101E30000006008C07003632000000000008008019 +:101E400007C08532000000000010008C074085327A +:101E500000000000000000D80280003200001613CD +:101E600004000058088071B20000000000000080EB +:101E70000880003218003600000000F8730A03F9E9 +:101E800000008C020401008002802DBC00001613AB +:101E900080010080A2802FB600008802000000F8B8 +:101EA000A2802F950000880204010080180088BCE1 +:101EB00000008F0290190058E89C85BA00000000CD +:101EC000000000581880853A0000000000180080CB +:101ED000078585300000940204010080420086BC22 +:101EE00000000000000000D80240003200000000A6 +:101EF00000000008898071370000950200120084FC +:101F000027E48292000000000012008407000032E3 +:101F100000009902270000FC020085B2000099022F +:101F20000400008042603DB318000000000000F88B +:101F3000738A033995023600000000C00200369211 +:101F4000000016131200005C52812CB400009D02A8 +:101F500004010080028082BC000016138000008013 +:101F6000A2802FB60000A301000000D4020000925E +:101F70000000A00204010018D8A081BC0000C91014 +:101F80000000004408802DF200002D02C70100303F +:101F90000800009200002D02C701006CD8E0869A6C +:101FA00008000000C60100F8934001391900000044 +:101FB00000000010090036320000801200000014FA +:101FC000094081D200000000000000140845813063 +:101FD00000001613120100BC08C021B20000161345 +:101FE00080000080A2802FB60000F6038001808070 +:101FF000320B6AB600006A100000003C030038F2A1 +:102000000000AC020406018002C06EBC0000161382 +:10201000870601EC56E06EBA0000F3030000008072 +:102020000200009000001613870601EC56E06EBA1D +:1020300000000000000000F842802F3408C0161392 +:1020400012000040A2CD39B218003600000000F89E +:10205000730A03F90000161303B8000009C06EBD2F +:10206000B202000000000088820D903A2F005E0648 +:102070000000001C080036920000161300000080CB +:10208000020000902C005E060000001C0800369242 +:1020900000001613000000800200009000001613DC +:1020A0000000008002000090000016130000008075 +:1020B0000200009038005E060000001C0800369206 +:1020C00039005E060000001C08003692080000007F +:1020D000000000F89340013900001613120100BC03 +:1020E00008C021B20000161380000080A2802FB625 +:1020F0000000161380008080320B6AB600006A1060 +:102100000000003C030038F20000C102040000801F +:10211000524082BC0000161304010080624082BC61 +:10212000000016130405018002C06EBC0000000010 +:10213000000000F842802F3408C01613120000403F +:10214000A2CD39B218003600000000F8730A03F976 +:10215000000000000004017809C06E320000000099 +:10216000006201EC068097320900000000000010B8 +:1021700009003632000080120004011409C06ED23A +:102180000200CB0204B8008082CD6EBC080016139A +:1021900004B9008082CD6EBC00000000000601EC96 +:1021A000064000320000CC02B50000D8020000B2A8 +:1021B00000000000A50080A0360B6A34000000007B +:1021C000003002E806C02C320000000000000000D1 +:1021D000078000320000000000000078A9002D37C1 +:1021E0001805010000080000C78D973A00000000A4 +:1021F0000000007899C02C3718010000000000781A +:10220000898D973A000016130210000087BF97BA15 +:1022100000000000001800000740FE320000161306 +:1022200012000048F2C138B418003600000000F86F +:10223000730A03F900000000001801E006000032F4 +:1022400000000000000000F882852F3000006806C2 +:102250000000001C0800369208000000000000F892 +:102260009340013900001613120100BC08C021B2CE +:102270000000161380000080A2802FB660001613A5 +:10228000040100F8828D2FB007000000000000104C +:10229000090036320000801200000014094081D28B +:1022A0000000E50280008080320B6AB61700000053 +:1022B00000000010090036320000801200380014BF +:1022C00009C06ED20000F6030000008002000090FA +:1022D00000006A1000000038030038F20000E80235 +:1022E0000402018002C06EBC0000F303000201EC96 +:1022F00056E06E9A00000000C00301EC56E06E3A12 +:10230000000016138001008002802FB600C0161353 +:1023100012000040A28D39B218003600000000F80B +:10232000730A03F9200016130439008082CD6EBCB5 +:102330001200000000000010090036320000801278 +:102340000030001409006ED21500000000000010DB +:1023500009003632180000000002011489CD6E37E2 +:102360000000801200200114895B91D21B00F4024E +:1023700038010010090036B200008012003001144C +:1023800009006ED21800000000000010090036326B +:102390000800000000000014790B143810008012AF +:1023A00000500114A95B91D90000F902042801141E +:1023B00009006EB21C00801200000010090036D225 +:1023C000000005033828001809006EB20000FD0265 +:1023D0000421010869246EBC000016130901008065 +:1023E000020000B0030068060000001C08003692DE +:1023F0000000010302300080829B90BC00000003BB +:102400000603018012C06EBC040068060000001CB8 +:1024100008003692050068060000001C080036928D +:10242000000016130430008002006EB200000403A6 +:102430000603018012C06EBC0B0068060000001C81 +:10244000080036920C0068060000001C0800369256 +:10245000000008030421010869246EBC0000161363 +:1024600009010080020000B0030068060000001CA3 +:102470000800369200000C0302300080829B90BC62 +:1024800000000B030603018012C06EBC0400680646 +:102490000000001C08003692050068060000001CC1 +:1024A0000800369200000E039F31010C69246EBCB7 +:1024B000000000000000000C0900003200001203C0 +:1024C00004310004899B90BC0000110306030180C5 +:1024D00012C06EBC200068060000001C0800369286 +:1024E000210068060000001C080036920000161348 +:1024F0009F000080024090B200001503040201809A +:1025000012C06EBC220068060000001C0800369253 +:10251000000017030401000039A490BC23006806E2 +:102520000000001C08003692000016139F00008077 +:10253000020090B2240068060000001C08003692D9 +:10254000080016130C0000F8634001B910001D03C9 +:10255000C50100CC02201598080091030C0000F87A +:10256000434001B910000000C50100CC022015381D +:102570000000000000000010090036320000801248 +:1025800000000014090080D200001613120100BCE4 +:1025900008C021B200006A100000003C030038F2BD +:1025A000000000000000005C0805803000001613E9 +:1025B0000401008002402DBC0000161302010080BF +:1025C00082FA85BC000016130601008092FA85BCD1 +:1025D0000000270336010080020000B00F006806EB +:1025E0000000001C0800369210000000002C0200C1 +:1025F000A9DB8539000016131200005402A438B27A +:10260000000000000008028C08C06E3200000000CC +:10261000000C029828806E37000000000000009C2B +:1026200038221437000032030430002808006EB24C +:10263000000016130410006C08006EB200000000C9 +:102640000018004C08006E32000016130420001819 +:1026500008006EB200000000003C001408806E32DA +:10266000050035030038020078E16E990000000093 +:10267000510000D80200003200000000003802784B +:1026800009C06E32050000006808000077A1973984 +:10269000000037031201000009C021B21800360003 +:1026A000000000F8730A03F900000000545401FC14 +:1026B00002C06E3214103B0304000080A20D72B001 +:1026C0000000F3110000002809C002F20E006806A5 +:1026D0000000001C08003692000016130609008056 +:1026E00082BD72BC00004F03331500A402C072B259 +:1026F00000008C0380010080B20172B60101420328 +:1027000004290080828D74BC080A8C03042D00808B +:10271000828D74BC000000000030007C080075321F +:1027200000004903003800881800759C080A8C03D3 +:1027300004290080828D74BC10000000002C007CF5 +:10274000888D7537000000000030007C68DD87321E +:10275000000048039F390088188075BC10000000F5 +:1027600000340088888D7537000049030000008818 +:102770001880889C1000000000340088689D88390B +:1027800037000000000000100900363200008012FF +:102790000000001409C087D23B00000000000010B8 +:1027A000090036320000801200000014098088D22F +:1027B000000050039FF1018082DB87BC00008C0386 +:1027C000000000800200009000008C038000008068 +:1027D000B20172B60000000000080048080075321F +:1027E00000000000001000700800753200000000BA +:1027F000001C007438A2753700005503831B007855 +:1028000008C074B200000000000000F8C2802F343D +:102810002F00000000000010090036320000801276 +:1028200000000014098084D2340000000000001071 +:10283000090036320000801200000014090087D21F +:1028400000006B039F780180C2216EBC00005D0315 +:102850009F990164881B87BC00006C039F6801641A +:10286000885B86BA000000000000006408000032A7 +:1028700000000000001600A402C072320000000038 +:10288000003C02A4B25B2A3A00000000003A027841 +:1028900009C06E3200006D0308010004E8A575BC94 +:1028A0003F000000000000100900363210008012C6 +:1028B00000040014695D80D910008C030B01001C1A +:1028C000080036B200006B0304A10180829B84BC27 +:1028D000000068069F980180C2216EBC0000680657 +:1028E00006B10180825B87BC00008B030B01008076 +:1028F000020000B000006C0304990180C2216EBC8C +:102900000000890302D4018092FB6EBC16006806A9 +:102910000000001C08003692170068060000001C2A +:10292000080036921C0068060000001C0800369261 +:102930003F00000000000010090036321000801235 +:1029400000040014695D80D90000710304A10180B6 +:10295000829B84BC0000780306A80180825B80BC57 +:102960000000750304A9018002006EBC00008A0308 +:1029700004A10180829B84BC00008A0304010080C2 +:10298000124080BC140068060000001C080036924B +:1029900000008A039FA0017829216EBC00008A03F1 +:1029A0000201008012A097BC00006B0300000080B1 +:1029B000020000900000850304000080028082BCB9 +:1029C000000016130402018002C06EBC00007E03EA +:1029D00002000080A26080BC060068062C01001C7A +:1029E000080036B200C0820304010080A28D2FB01F +:1029F000060068060000001C0800369200008203F2 +:102A000004000080A26080BC0000810306030180F6 +:102A100012C06EBC090068060000001C0800369257 +:102A20000A0068060000001C0800369200008403BB +:102A30000603018012C06EBC070068060000001C7F +:102A400008003692080068060000001C0800369254 +:102A5000020068063801001C080036B20000880336 +:102A6000020C0280A25B80BC1F0068060000001CF4 +:102A7000080036921E0068060000001C080036920E +:102A800000008D03000000280940009200008D0323 +:102A9000000000280980009200008D03000000283B +:102AA00009C0009200008D03000000280900019277 +:102AB00030000000000000100900363200008012D3 +:102AC00000000014098092D20E00F3110000001CD7 +:102AD000080036F200006806000000800200009046 +:102AE000100016132A0000CC022015B80D000000BB +:102AF00000000010090036320000801200000014AF +:102B0000090080D200001613120100BC08C021B2D7 +:102B100000006A100000003C030038F21D00990319 +:102B20008001007809E000B800001613040100805D +:102B3000328097BC1D0068060000001C0800369219 +:102B40000000161304010080228097BC150068065F +:102B50000000001C08003692000000000000001C6D +:102B6000A8052830000016130400008002C02CBC09 +:102B700000001613120100BC08C021B20000161399 +:102B800080000080A2802FB660001613040100F8B8 +:102B9000828D2FB008000000000000F8834001394A +:102BA0003600A4030400008082CD81BC0500000033 +:102BB00000000010090036320000801200000014EE +:102BC00009C081D20000020480018080320B6AB605 +:102BD00000006A1000000038030038F22C0068067C +:102BE0000201008082CD81BC00005E0600000080F2 +:102BF0000200009000001613120100BC08C021B2B0 +:102C00000000AB031D41025CF80168B44100F3030E +:102C1000000000F8A28D2F91350000000000001088 +:102C200009003632000080120000001409C085D26D +:102C300010000000D02C0200A9DB85390000290318 +:102C40001201005402A438B20000161300000080E4 +:102C5000020000900000B40304B0008002006EBCCB +:102C60000000B40380B9008082806EB600000013BB +:102C70000078016008006EF230005E06D700001C8C +:102C8000080036920000B60380010080D2812FB682 +:102C900031005E06D700001C080036920000B80321 +:102CA0008001008042812FB635005E06D700001CEF +:102CB000080036920000C50304A8010809006EB29E +:102CC0000000000000200208899B903E00000000E8 +:102CD00000A00108899B903A0000C5039F88010865 +:102CE000899B90BC000000000034020009C06E3DCA +:102CF00000000000000C020409A46E370000C103AC +:102D00000200008012A490BC000000000000000837 +:102D1000198090370000C50302010280829B90BC9D +:102D200031005E06D700001C080036920000C50383 +:102D300004B0008002006EBC0012C50304010080D4 +:102D4000A28D2FB032005E06D700001C080036921C +:102D50000000F303000000F872812F9500000000CE +:102D6000000000F842802F3408C0AF02120100407A +:102D7000A2CD39B2000016130000008002000090BE +:102D800008000000000000F893400139080000002E +:102D9000000000100900363200008012000000140C +:102DA00009C081D2000016130400008002C02CBCB0 +:102DB0000000161380000080A2802FB6600016135A +:102DC000040100F8828D2FB0000002048001808091 +:102DD000320B6AB600000000000000140840903278 +:102DE00000006A1000000038030038F22C0068066A +:102DF0000201008082CD81BC00005E0600000080E0 +:102E00000200009008000000000000F89340013923 +:102E10000800000000000010090036321000801287 +:102E200000000014894D81D70000161304000080B3 +:102E300002C02CBC0000161380000080A2802FB6B8 +:102E400060001613040100F8828D2FB00000020408 +:102E500080018080320B6AB600006A1000000038E2 +:102E6000030038F20000DF030420018052206EBC12 +:102E70000000161309010080020000B02600680659 +:102E80000000001C08003692250068060000001CA7 +:102E9000080036920000E503040100D81E80EDBC56 +:102EA0000000E103B70000D80EC0EDB20000E4035B +:102EB00004010080423BEEBC00000000000000E086 +:102EC0001E00EE3A00000000A70000D00E00EE3217 +:102ED00000000000007486CC02806C32000000000C +:102EE000000000000940E7320000E9038001808013 +:102EF000320B6AB6360016131200002C82CD2EB2A9 +:102F00000000EB030401008042C52CBC0000EC0370 +:102F1000000000CC0200009200000000000000CC85 +:102F200012C02C3A0000E70304010000190090BC15 +:102F300000000000007486C806C02C32080002049D +:102F4000000000F8C34001990000F1030400008074 +:102F5000028080BC0000161304550180B2DB2FBC38 +:102F6000000054100000002C090000F20000F603DD +:102F700000000080020000900000F50304000080C3 +:102F8000028080BC0000161304550180B2DB2FBC08 +:102F9000000054100000002CF90100F40000FF03B1 +:102FA00004000028098080B200000000000000D862 +:102FB000020000320000811100000008080000D269 +:102FC0000000FF0304000080028092BC180036005D +:102FD000000000F8730A03F9000002048001008079 +:102FE000A2802FB6000002041201000009C021B225 +:102FF00018000000000000F8730A033902043600CC +:10300000000000C00200369200000204800100802F +:10301000A2802FB6000002041201000009C021B2F4 +:1030200018003600000000F8730A03F900000000E1 +:10303000000000F80200003218003600000000F81E +:10304000738A029910000000000000E40300363289 +:1030500002000001000000E0030037320000000021 +:10306000000000E40300363204000001000000E02C +:1030700003003732AA040000000000E403003632E7 +:1030800009000001000000E00300373200000000EA +:10309000000000CC0F00003200070000000000E438 +:1030A0000300363206000001000000E00300373262 +:1030B00020000000000000E4030036320800000198 +:1030C000000000E00300373200010000000000E4CF +:1030D0000300363205000001000000E00300373233 +:1030E00030000000000000E4030036320700000159 +:1030F000000000E00300373200A00000000000E400 +:103100000300363208000008000000E003003732F8 +:1031100000000000000000A00200003200000000DB +:10312000000000000B000032000016048B0100A01C +:1031300012002ABA00000000000000A802000032BD +:1031400000000000000000E0070000320000190449 +:103150000601008002802ABC000000000000009CE4 +:103160000200003200000000000000D40200003223 +:1031700000000000000000CC02000032000000004F +:10318000000000D80200003200000000000000D063 +:103190000200003200000000000000DC02000032EB +:1031A00000000000000000F80200003200000000F3 +:1031B000000000C80200003200000000000000C44F +:1031C0000200003200001C048501009C12C029BAD4 +:1031D00000000000000000E4030036320B00000491 +:1031E000000000E00300373280000000000000E42F +:1031F0000300363213000004000000E00300373201 +:1032000000200000000000E4030036320C0000043F +:10321000000000E00300373200000000000000E47E +:10322000030006320F000004000000E00300373204 +:1032300000040100000000E4030037320D00000428 +:10324000000000E00300373200040000000000E44A +:103250000300363214000004000000E0030037329F +:103260009F000000000000E4030036321500000457 +:10327000000000E00300373200000000000000E41E +:103280000300363218000004000000E0030037326B +:1032900060000000000000E4030036321D0000045E +:1032A000000000E00300373200000000000000E4EE +:1032B000030004321E000004000000E00300373267 +:1032C00070000000000000E4030036321F0000041C +:1032D000000000E00300373200000000000000E4BE +:1032E0000300003220000004000000E00300373239 +:1032F000A0030000000000E40300363217000004C1 +:10330000000000E00300373240000000000000E44D +:10331000030036321B000004000000E003003732D7 +:1033200060000000000000E4030036321C000004CE +:10333000000000E00300373200000000000000E45D +:103340000340003216000004000000E003003732A2 +:1033500000010000000000E4030036321A000004FF +:10336000000000E00300373220010000000000E40C +:103370000300363219000004000000E00300373279 +:1033800080000000000000E4030036320B00000162 +:10339000000000E00300373200010000000000E4FC +:1033A000030036320C000001000000E00300373259 +:1033B000FEFF0000000000AC0200363200000000FA +:1033C000000000000900003218000000000000F8B2 +:1033D0000364023900004F0485010000190090BA0F +:1033E00025260000000000E4030036320100000141 +:1033F000000000E003003732000000000000008001 +:103400000F00003200000000000000840F000032B6 +:1034100008000000000000F8F34001390800000037 +:10342000000000F8E340013908000000000000F847 +:10343000C340013908000000000000F8B340013922 +:1034400008000000000000F8A34001390800000057 +:10345000000000F89340013908000000000000F867 +:103460008340013908000000000000F87340013972 +:1034700008000000000000F8634001390800000067 +:10348000000000F85340013908000000000000F877 +:103490004340013908000000000000F833400139C2 +:1034A00008000000000000F813400139000000008F +:1034B000000000F80380003200000000000000C897 +:1034C0003F80FC35000000000000009C020000323C +:1034D0000000000000000000030000323E00000079 +:1034E000000000D00200363200000000000000287A +:1034F000034038320000161304010080D20130B6B8 +:1035000000006704040100D012002DBCA0040000DC +:10351000000000E40300363203000001000000E078 +:103520000300373200000000170000D00200003214 +:1035300000000000000000ACE100003400000000CA +:10354000000001E00600003200000000000801E475 +:103550000600003200000000000E01EC0600003200 +:1035600000000000001001E0060000320000000032 +:10357000000000D012002D3A3E006F0402010080CE +:10358000820D2DBC020000000000009CAE0D023236 +:1035900000000000000000A802000032300000001F +:1035A000008886CC0700363200000000008A86CCF6 +:1035B0000700003A002400000000000409803632B1 +:1035C0000000161312000064024090B200000000D8 +:1035D000000000042940903A00007B0412000078AB +:1035E00009C020B20000161380010080F28197B656 +:1035F0001D00161380010078E9E500B80000000006 +:103600000000007809459030000079040201008034 +:10361000C28297BC0000000000000084020000325B +:1036200000000000000000CC030000320000810414 +:103630008E010080024028B20000BD10000000D8BA +:10364000020000D2AA1100000000008C0E003632E9 +:1036500052000000000000740E0036321800000016 +:10366000000000E40300363209000002000000E020 +:1036700003003732FECA0000000000E403003632C7 +:103680000A000002000000E00300373200008C0452 +:1036900012010000094020B200008A0400000080EE +:1036A0000200009000008C0412000004094020B2C7 +:1036B00000008F049F010080020090B200008E0481 +:1036C00012000008094020B202008A0404010078B8 +:1036D000092417B8060000000000007809641638B5 +:1036E00000008A0404010080028197BCFE000000F3 +:1036F0000000004403003632FE003600000000489F +:10370000030036920000161312000000094020B298 +:103710000000950412000004094020B20000980443 +:103720009F010080020090B2000097041200000880 +:10373000094020B200000000000000B402009032F6 +:103740000000161300000080020000900000161315 +:1037500000000080020000900000161300000080AE +:10376000020000900000161300000080020000908C +:1037700000001613000000800200009000001613E5 +:10378000000000800200009000001613000000807E +:10379000020000900600AA040000000C09641698BC +:1037A0000000A10200000014084090920000DB021B +:1037B00000000014084090923400C9030000001C6F +:1037C000080036921200C9030000001C080036925F +:1037D0003A00C9030000001C0800369200001613CE +:1037E00000000080020000900000BA0200000014F7 +:1037F000084090920000DE0400000080020000906B +:103800000000D4030000001408409092AB040000B4 +:103810000000008882CD903A0D00CD04000000FC2D +:1038200002E416980D00DF04000000FC02E4169884 +:103830000D00E804000000FC02E416980000F60405 +:103840000000008002000090000000050000000061 +:103850000940909D000006050000008002000090D5 +:1038600000001005000000800200009000001A0512 +:10387000000000800200009000002405000000000D +:103880000940909D00002B05000000800200009080 +:1038900000003405000000000940909D00003B0539 +:1038A00000000080020000900000AA050000000057 +:1038B000090000920000AA050000000009400092E3 +:1038C0001D07AC05000000A0020036920000BA05FA +:1038D000000000800200009000001613000000802D +:1038E000020000900000DE04000000DC0F40909217 +:1038F00000007E05000000800200009000008305AB +:10390000000000D40200009210009805000000841E +:103910001F6414980000DE04000000EC0E4090923A +:103920000000A40500000080020000900000DE04FA +:10393000000000D40E4090920000A7050000008017 +:103940000200009000004E06000000DC0E40909245 +:103950000000CB0500000080020000900800D005A8 +:10396000000000501F2416980000E805000000D851 +:10397000020000920D00F305000000FC02E416981E +:103980000000F405000000D00200009200001F01BA +:10399000000000D00200009200001513000000801B +:1039A000020000900000161300000080020000904A +:1039B00008000000000000F89340013900000000FA +:1039C00000000078094590300000161306010080C1 +:1039D000228097BC3F00161304010080820D00B0C6 +:1039E0000200D104B00000A0F20B00B900000000FA +:1039F000A00000046B4190340000020480010080AC +:103A00000240B0B600000204040000800280B0BC96 +:103A100000000000000000D802000032000000009A +:103A2000000000A822C02F370000000000000000A6 +:103A3000670100340042000000080000878D2A3A28 +:103A400000001613041000000700B0B200000000D0 +:103A5000001800000700D0320000161312000048C2 +:103A6000F2C138B418000000000000F8730A0339EE +:103A700002043600000000C0020036920800020472 +:103A8000000000F8934001990000E2049F000080CC +:103A9000020090B2000000000000000809409032CF +:103AA000000000000000000409C0FD320200E20432 +:103AB000B00000A0F20B00B9000000000000000000 +:103AC0000B80903200000000000000000D4090329A +:103AD00000000000A00000043B40B0310000DE0404 +:103AE0000400008002C02FBC8411DE040000008CA2 +:103AF0000E003692000016130200008002C12FBC97 +:103B000008000000000000F8934001390200EA04B8 +:103B1000B00000A0F20B00B90000ED0480010080AD +:103B20001240B0B600000000000000043B40B0337B +:103B30000000000000000004FD4BD0350000000034 +:103B4000000000080B00003200000000A000000C84 +:103B50001BE4B032000002040B000080020000B041 +:103B60000000F30404000080024090B21F00020431 +:103B700000000080114000990000F2040400008061 +:103B8000123EF8BA00000000000000800100F83288 +:103B900000000204000000900140F892000016139B +:103BA000800000800281FCB60000FA049F000080C3 +:103BB000020090B2000000000000000809409032AE +:103BC000000000000000000409C0FD3200001613D0 +:103BD00004010080428590B000000000000000E475 +:103BE0000380903209000004000000E00300373237 +:103BF00000000000000000E4034090320A000004CE +:103C0000000000E0030037320000DE04000000C8BE +:103C10000F81FC940000161302010080724290BCD8 +:103C20000000161306010080E24290BC000016134B +:103C300004010078096490B500000000000000E471 +:103C40007300903C10000004000000E003003732D5 +:103C50000000DE0400000080020000900000090562 +:103C60009F000080020090B20000000000000008E9 +:103C700009409032000000000000000409C0FD323D +:103C80000000161304010080428590B0000000007F +:103C9000000000E40380903201000004000000E016 +:103CA0000300373200000000000000E00F80903277 +:103CB00000000000000000E4034090320200000415 +:103CC000000000E0030037320000DE04000000E4E2 +:103CD0000F409092000013059F000080020090B2F8 +:103CE00000000000000000080940903200000000C1 +:103CF0000000000409C0FD3200001613040100801A +:103D0000428590B000000000000000E40380903283 +:103D100003000004000000E0030037320000000050 +:103D2000000000A80E80903200000000000000E4B7 +:103D30000340903204000004000000E0030037322A +:103D40000000DE04000000AC0E40909200001D0553 +:103D50009F000080020090B20000000000000008F8 +:103D600009409032000000000000000409C0FD324C +:103D70000000161304010080428590B0000000008E +:103D8000000000E40380903205000004000000E021 +:103D90000300373200000000000000E403409032CE +:103DA00006000004000000E00300373200000000BD +:103DB000000000440F8090320000DE040000004844 +:103DC0000F4090920000161306010080824290BCC2 +:103DD0000000161304010078096490B5000028055E +:103DE00004010080824290BC00000000000000003E +:103DF0000900003200000000000000E403009032DF +:103E000012000004000000E0030037320000DE046E +:103E1000000000401F40909C00002E059F00008085 +:103E2000020090B20000000000000008094090323B +:103E3000000000000000000409C0FD32000016135D +:103E400004010080428590B000000000000000E402 +:103E50000380903207000004000000E003003732C6 +:103E600000000000000000E403409032080000045D +:103E7000000000E0030037320000DE040000008094 +:103E8000020000900000161306010080824290BCE0 +:103E90000000161304010078096490B5000038058D +:103EA00004010080824290BC00000000000000007D +:103EB0000900003200000000000000E4030090321E +:103EC00011000004000000E0030037320000DE04AF +:103ED000000000FC1F40909C00003E059F000080F9 +:103EE000020090B20000000000000008094090327B +:103EF000000000000000000409C0FD3203090000BA +:103F0000000000280800363200005705000000308D +:103F1000080036D20000610500000044088000D28D +:103F20000000470504010080020084B2030E000077 +:103F300000000028080036328000570500000030DD +:103F4000080036D2000061050000004408C000D21D +:103F50000000470504010080020084B200004E0505 +:103F600000000044080001928002000000000000F0 +:103F7000070036328C0501000008000007003732C8 +:103F80000000161304100000078090B2000000002B +:103F900000180000074090320000000000000048B8 +:103FA000F2C138340000161312000080020000B085 +:103FB00018003600000000F8730A03F92000000022 +:103FC000000000E40300363209000002000000E0B7 +:103FD0000300373200000000000000E40340843298 +:103FE0000A000002000000E0030037328C050100E7 +:103FF000000000A802003732A0000000000000000E +:104000000900363200000000000000E00700003226 +:104010000000540506010000190090BC0000DE04F9 +:1040200000000080020000908C050100000000C824 +:1040300002003732800200000000003C08003632E7 +:1040400000000000000000340800013200005C05A0 +:1040500002000080D2E083BC0000000000000034B9 +:1040600008C083320000720500000080020000F0EA +:1040700000000000000000A0078083320000000064 +:1040800000000030D820833A00005A050401003CAB +:10409000D8E083BC00000000000100800200005056 +:1040A0000000000000000040080000320000000096 +:1040B00000000048080000328C050100000000C824 +:1040C0000200373200020000000000C8828D2C3A46 +:1040D000800000000000003C0800363200000000B4 +:1040E00000000078098078325A5A000004010080EC +:1040F000828D975C00006A0502010048A89E84BA80 +:1041000000000000000000481880843A00006805A4 +:104110000601003C28C083BC0000000000000078BD +:10412000098584301000000000000048888D843626 +:1041300000006F0590010048E8A584BA0000000067 +:10414000000000481880843A000000000000004889 +:104150000885843000000000040100800285845C32 +:104160000000000000010040084000520000000074 +:10417000000000E40300833201000002000000E0C0 +:10418000030037320C0078050000002CD8A082F91B +:1041900005000002000000E00300373200000000CC +:1041A0000000008002000030000000000001003824 +:1041B00008403E7200000000000000E403C08232AC +:1041C00002000002000000E003003732020000029B +:1041D000000000E003003732000000000000008013 +:1041E0000200003000007A0580000080F2403EB6F8 +:1041F0000000000000010080020000700000810546 +:104200009F000080020090B2000000000000000843 +:1042100009409032000000000000000409C0FD3297 +:1042200000000000000000840E8090320000DE04D8 +:10423000000000880E40909208000000000000F886 +:1042400093400139000087059F000080020090B272 +:10425000000000000000000809409032000000004B +:104260000000000409C0FD32000000000000002032 +:104270000740F5320000000000080020070000326F +:10428000000000000010002007C0F5320000000010 +:10429000001800200740F632000000000020002037 +:1042A0000780F632000000000028002007C0F63228 +:1042B00000000000003000200700F732000000007E +:1042C000003800200780FF3200000000000000D806 +:1042D0000200003200000000000000000740093228 +:1042E000000000000008000077C02937000000002F +:1042F000001000000780903200000000001800004D +:10430000074090320000161312000048F2C138B482 +:1043100018003600000000F8730A03F900000000DE +:1043200000000008C80100340000F603000000FC93 +:104330000200009200009A0580010080F24190B6D0 +:1043400000009B05000000C82F81FC9400000000C5 +:10435000000000C82F81FC35000000000000008034 +:104360000F45903000009E0502000080027EF8BCE0 +:1043700000000000000000840F00F8320000000080 +:10438000000000001940F837000000000000008421 +:104390003F40F83700000000000000840F64F83A46 +:1043A00000000000000000001900F83700000000C5 +:1043B000000000803F00F8370000DE0400000080AD +:1043C0000F24F89A0000A60580010080F24190B603 +:1043D0000000DE04000000C83F81FC940000DE0401 +:1043E000000000C83F81FC950000A9050401008081 +:1043F000024090BC000000000000000409C0003230 +:104400000000DE04000000E41E40909C000000005C +:10441000000000A8220090370000DE04000086C0E3 +:104420000740909208000000000000F89340013916 +:104430000D000000000000FC02E41638000000003F +:1044400000000000090002320000B40504000080F2 +:104450000200B0B200000000000000000B000032BB +:1044600020000000000000A0820D2A3A0000AF05E5 +:1044700004010000190090BC0000B60500000028EF +:104480007901009400000000000000C83F80FC3467 +:1044900040800000000000280980363200008111B1 +:1044A000000000D8020000D20000020404000080D6 +:1044B000028092BC18000000000000F8730A033963 +:1044C00002043600000000C002003692EA05C00572 +:1044D00004010080824D90BC00000000000000EC50 +:1044E0000F00153200FE1F00000000F00F003732F1 +:1044F000F0FF0000000000E80F00363298050000D1 +:10450000000000F40F0036320000C605000000C8AD +:104510004F80FC953623161304010080824D90BC19 +:1045200000000000000000EC0F80143200F81F00B3 +:10453000000000F00F003732C0FF0000000000E86C +:104540000F00363298270000000000F40F003632CA +:1045500000000000000000C84F80FC340400000090 +:10456000000000608F4D903A00001613600100803B +:10457000020000B0000016137A010080020000B0B3 +:104580000000421100000080020000D00000DE04A4 +:1045900000000080020000900000CD058001008036 +:1045A000024090B600000000000000C86F80FC349C +:1045B0000000CF0580010080124090B6000000008E +:1045C000000000C85F80FC340000DE0400000080B2 +:1045D000020000900000D20504010080B24190B0BA +:1045E0008007DE04000000C88F8DFC910000D40518 +:1045F00080000080124090B60000D505000000C881 +:104600007F80FC9500000000000000C87F80FC3423 +:104610000000D70580000080024090B60000D80559 +:10462000000000C88F80FC9500000000000000C85A +:104630008F80FC340000DA0580000080424090B694 +:104640000000DB05000000C89F80FC950000000012 +:10465000000000C89F80FC340000DD058000008061 +:10466000324090B60000DE05000000C8AF80FC9527 +:1046700000000000000000C8AF80FC340000E1052D +:1046800080000080224090B6841100000000008C61 +:104690000E0036320000E305000000C81F81FC95C3 +:1046A000AA1100000000008C0E003632000000004D +:1046B000000000C81F81FC340000161306010080B2 +:1046C0008202F5BC00001613030000780900F5BD56 +:1046D0000000161304010080E225F5B5100000006B +:1046E0000000004C1F2416380000DE0400000050BB +:1046F0001F00F59C8007161304000080828DFCB01B +:104700000000EC059F000080020090B20000000055 +:104710000000000809409032000000000000000482 +:1047200009C0FD3200000000000000001700F53A4B +:104730008C04010000080000070037320000161347 +:1047400004100000078090B2000000000018000074 +:10475000074090320000161312000040F2C138B436 +:1047600018003600000000F8730A03F90000DE04A8 +:1047700000000080020000900000DE04000000EC59 +:10478000034090920000161304000080024090BC89 +:104790000000F505B20000D8020000B200000000E1 +:1047A000000201EC16E46E3A08000000000000F878 +:1047B0009340013900001F06171001F802006EB285 +:1047C0000600000604010080828D2FB00300000067 +:1047D000000000F8828D2F3200C061100000002818 +:1047E000098036D200000000000201EC16C06E3CC9 +:1047F00000000000001886C80600003218003600CD +:10480000000000F8730A03F900000106000000D060 +:1048100002000092000007060419868002806CBC2A +:10482000000016138001008012802FB600000000E7 +:104830000000000009006E3200000000C108000402 +:1048400009006E3200000000C01586780FC06C327F +:1048500000000D068001008022802FB600000D06AA +:10486000001886C8064000920000161380010080E0 +:1048700022802FB6000000000040000009006E32C8 +:1048800000000000C248000409006E320000000071 +:10489000C01686780FC06C3200000D0680010080C3 +:1048A00012802FB600000000001886C806000032F3 +:1048B0000040000000000028098036320000150684 +:1048C0000402018002C06EBC00006110000201EC15 +:1048D00016C06EDC000013068000008002802FB638 +:1048E00000001506810000F822802FB40000150694 +:1048F000001886C80640009200001506820000F8E5 +:1049000012802FB400000000001886C80600003294 +:10491000000016130401008002002DBC00001613D5 +:104920000401008002802DBC00000000001086C839 +:1049300006000032000000000000000007C00A323C +:10494000003800000008000007003632000016138F +:1049500004100000070090B20000000000180000E2 +:10496000074090320000161312000040F2C138B424 +:1049700018003600000000F8730A03F90000000078 +:10498000170100F8A2802F34000016130210868051 +:1049900072826CBC00000000001086A842806C3758 +:1049A00000002A061200703802007EB200001613C2 +:1049B0001200703C02007EB200001613120070302C +:1049C00002007EB2000016131200703402007EB2A4 +:1049D0000000210602010080B2822ABC0000000013 +:1049E000170000D00200003206000006040100801B +:1049F000828D2FB00000FA050403018002C06EBC56 +:104A000000003506000000800200009000002C0627 +:104A10000403018002C06EBC00003506001086C889 +:104A200046802A9600000000001086C846802A367C +:104A3000000030068000008012802FB6030032068E +:104A4000220000F8828D2FB200003206001886C8BE +:104A500006000092000035068000008022802FB6FC +:104A600000000000C20100F802802F3500C0611074 +:104A700000000028098036D200000000000201EC8E +:104A800016C06E3C18003600000000F8730A03F9E7 +:104A900000000000001001E006802F32000000003E +:104AA000000000A8E100003400000000A20000FCAB +:104AB000020000320000F60380010080A2802FB6C1 +:104AC00000003B06B90100D8028001B20000F603E5 +:104AD000000000F802000092000000000000003812 +:104AE0001880F73A0000000000000038F8BF83305B +:104AF00000003F0604010080F2BD83BC0000F60305 +:104B0000A90000F80200009200C046061801000C3F +:104B1000A8CD3EB200004206840000741F40F7BAE0 +:104B20000000F603A90000F8020000920000000057 +:104B3000000000740F00003200C046061801000C8F +:104B4000A8CD3EB218003600000000F8738A03F9C1 +:104B500000004306000000B00200009200000000C8 +:104B60000000007C0F80833200000000002800005D +:104B70000700003200000000003000000700003293 +:104B800000010080003800000700373200000000FC +:104B9000003C000C0780833200001613120000480E +:104BA00002C080B20000161380010080A2802FB6E0 +:104BB0000000F603A9000008E80100940000540674 +:104BC00004010080A2C0EDBC52000000000000748F +:104BD0000E00363200000000000000C00E4001321E +:104BE000407E0500000000B40E00373200000000D7 +:104BF000000000C40E80073264005A06000000CC9A +:104C00000E003692640016130401008082CDEDBCC4 +:104C100029000000000000740E0036320000000081 +:104C2000000000C00E400032A08C0000000000B464 +:104C30000E00363200000000000000C40EC000323A +:104C400000000000000000CC0E80023210000000C6 +:104C5000000000E4337BEC391E000001000000E09E +:104C60000300373200000000000000C86EC0EC37BF +:104C70000000DE04000000D80EC0ED920000161304 +:104C800004310280A2DB2CBC00001613040100805A +:104C9000028080B200001613021C018052C06EBC5C +:104CA0002C0016130201008082CD81BC3F00161338 +:104CB0000200008082CD81BC3600670604000080BF +:104CC00082CD81BC0F0000000000001009003632C8 +:104CD0002C0000000000001489CD813C10008012DF +:104CE000001C011459E46ED96F0600000000008812 +:104CF00082CD813A0000161304010080028080B248 +:104D00000000161304310280A2DB2CBC0000161335 +:104D10000218018092C06EBC2C00161302000080A5 +:104D200082CD81BC10000000000000100900363266 +:104D3000100080120018011479E06ED96F0600008F +:104D40000000008882CD813AAE060000001801887C +:104D500082CD6E3AB70600000018018882CD6E3A07 +:104D6000C00600000018018882CD6E3AC906000016 +:104D70000018018882CD6E3AD20600000018018822 +:104D800082CD6E3ADB0600000018018882CD6E3AB3 +:104D9000E40600000018018882CD6E3AED0600009E +:104DA0000018018882CD6E3AF606000000180188CE +:104DB00082CD6E3AFF0600000018018882CD6E3A5F +:104DC000080700000018018882CD6E3A1107000024 +:104DD0000018018882CD6E3A1A0700000018018879 +:104DE00082CD6E3A230700000018018882CD6E3A0A +:104DF0002C0700000018018882CD6E3A35070000AC +:104E00000018018882CD6E3A3E0700000018018824 +:104E100082CD6E3A470700000018018882CD6E3AB5 +:104E2000500700000018018882CD6E3A5907000033 +:104E30000018018882CD6E3A6207000000180188D0 +:104E400082CD6E3A6B0700000018018882CD6E3A61 +:104E5000740700000018018882CD6E3A7D070000BB +:104E60000018018882CD6E3A86070000001801887C +:104E700082CD6E3A8F0700000018018882CD6E3A0D +:104E8000980700000018018882CD6E3AA107000043 +:104E90000018018882CD6E3AAA0700000018018828 +:104EA00082CD6E3AB30700000018018882CD6E3AB9 +:104EB000BC0700000018018882CD6E3AC5070000CB +:104EC0000018018882CD6E3ACE07000000180188D4 +:104ED00082CD6E3AD70700000018018882CD6E3A65 +:104EE000E00700000018018882CD6E3AE907000053 +:104EF0000018018882CD6E3AF20700000018018880 +:104F000082CD6E3AFB0700000018018882CD6E3A10 +:104F1000040800000018018882CD6E3A0D080000D8 +:104F20000018018882CD6E3A16080000001801882A +:104F300082CD6E3A1F0800000018018882CD6E3ABB +:104F40000000A803000000D4020000920000EC0260 +:104F5000000000800200009028080000001C01886A +:104F600082CD6E3A2D080000001C018882CD6E3A79 +:104F700032080000001C018882CD6E3A370800001C +:104F8000001C018882CD6E3A3C080000001C01889C +:104F900082CD6E3A41080000001C018882CD6E3A35 +:104FA00046080000001C018882CD6E3A4B080000C4 +:104FB000001C018882CD6E3A50080000001C018858 +:104FC00082CD6E3A55080000001C018882CD6E3AF1 +:104FD0005A080000001C018882CD6E3A5F0800006C +:104FE000001C018882CD6E3A64080000001C018814 +:104FF00082CD6E3A69080000001C018882CD6E3AAD +:105000006E080000001C018882CD6E3A7308000013 +:10501000001C018882CD6E3A78080000001C0188CF +:1050200082CD6E3A0000B003000000D4020000926E +:105030000000C603000000D4020000920000710AC4 +:10504000000000100880019200001613000000808C +:105050000200009000001613000000800200009083 +:1050600000001613000000800200009000001613DC +:105070000000008002000090000016130000008075 +:105080000200009000001613000000800200009053 +:1050900000001613000000800200009000001613AC +:1050A0000000008002000090000016130000008045 +:1050B000020000900000B10A000000100880009279 +:1050C000000016130000008002000090000016137C +:1050D0000000008002000090000016130000008015 +:1050E00002000090000016130000008002000090F3 +:1050F000000016130000008002000090000016134C +:1051000000000080020000900000161300000080E4 +:1051100002000090000016130000008002000090C2 +:105120000000161300000080020000900000C00A7A +:10513000000000100880009200001613000000809C +:105140000200009000001613000000800200009092 +:105150000000130B0000001008400192000016131D +:105160000000008002000090000016130000008084 +:105170000200009000001613000000800200009062 +:1051800000001613000000800200009000001613BB +:10519000000000800200009000001B0B00000010C7 +:1051A00008C000920000161300000080020000906A +:1051B00000001B0B0000001008C000920000220E2F +:1051C000000000100840019200001613000000804B +:1051D0000200009000001B0B0000001008C00092AD +:1051E000000016130000008002000090000016135B +:1051F00000000080020000900000161300000080F4 +:105200000200009000002E0B0000001008C0009269 +:1052100000001613000000800200009000002E0B1A +:105220000000001008C000920000220E00000010D4 +:105230000840019200001613000000800200009058 +:1052400000002E0B0000001008C000920000161392 +:105250000000008002000090000016130000008093 +:105260000200009000001613000000800200009071 +:1052700000002C0B0000001008C000920000161364 +:10528000000000800200009000002C0B00000010C5 +:1052900008C000920000220E000000100840019299 +:1052A00000001613000000800200009000002C0B8C +:1052B0000000001008C000920000161300000080DB +:1052C0000200009000001613000000800200009011 +:1052D000000016130000008002000090000016136A +:1052E00000000080020000900000F50B000000109C +:1052F00008C000920000180B000000100800019286 +:105300000000130B0000001008400192000016136B +:1053100000000080020000900000161300000080D2 +:1053200002000090000016130000008002000090B0 +:105330000000161300000080020000900000161309 +:1053400000000080020000900000161300000080A2 +:10535000020000900000EB0B00000010088000929B +:105360000000180B00000010080001920000130B51 +:105370000000001008400192000016130000008099 +:105380000200009000001613000000800200009050 +:1053900000001613000000800200009000001613A9 +:1053A0000000008002000090000016130000008042 +:1053B0000200009000001613000000800200009020 +:1053C0000000EB0B00000010080001920000180B19 +:1053D00000000010080001920000130B00000010F4 +:1053E00008400192000016130000008002000090A7 +:1053F0000000161300000080020000900000161349 +:1054000000000080020000900000161300000080E1 +:1054100002000090000016130000008002000090BF +:105420000000161300000080020000900000790CBC +:1054300000000010088000920000180B000000100F +:10544000080001920000130B0000001008400192B8 +:1054500000001613000000800200009000001613E8 +:105460000000008002000090000016130000008081 +:10547000020000900000161300000080020000905F +:1054800000001613000000800200009000001613B8 +:1054900000000080020000900000790C0000001065 +:1054A000080001920000180B000000100800019293 +:1054B0000000130B000000100840019200001613BA +:1054C0000000008002000090000016130000008021 +:1054D00002000090000016130000008002000090FF +:1054E0000000161300000080020000900000161358 +:1054F000000000800200009000002D0B0000001052 +:105500000880009200001613000000800200009046 +:1055100000002D0B00000010088000920000220EF9 +:1055200000000010084001920000161300000080E7 +:10553000020000900000161300000080020000909E +:1055400000001613000000800200009000001613F7 +:105550000000008002000090000016130000008090 +:105560000200009000002D0B0000001008000192C6 +:1055700000001613000000800200009000002D0BB8 +:1055800000000010080001920000220E0000001030 +:1055900008400192000016130000008002000090F5 +:1055A0000000161300000080020000900000161397 +:1055B0000000008002000090000016130000008030 +:1055C000020000900000161300000080020000900E +:1055D00000001613000000800200009000007D080B +:1055E0000000001008000192000016130000008067 +:1055F0000200009000007D080000001008400192A9 +:105600000000161300000080020000900000161336 +:1056100000000080020000900000161300000080CF +:1056200002000090000016130000008002000090AD +:105630000000161300000080020000900000430EDE +:1056400000000010084001920000390E0000001018 +:10565000084001920000430E000000100840019233 +:105660000000130B00000010084001920000161308 +:1056700000000080020000900000430E00000010B7 +:105680000840019200001613000000800200009004 +:105690000000161300000080020000900000B90A0C +:1056A00000000010084000920000B90A000000103D +:1056B000088000920000B90A0000001008C00092A3 +:1056C0000000B90A00000010080001920000BE0AA4 +:1056D00000000010084001920000B90A000000100C +:1056E000088001920000B90A0000001008C0019271 +:1056F0000000161300000080020000900000161346 +:1057000000000080020000900000161300000080DE +:10571000020000900000F60C0000001008800092CB +:105720000000F60C0000001008C000920000F60C0B +:1057300000000010080001920000130B0000001090 +:105740000840019200001613000000800200009043 +:105750000000F60C0000001008C0019200001613B3 +:10576000000000800200009000001613000000807E +:10577000020000900000161300000080020000905C +:1057800000001613000000800200009000001613B5 +:10579000000000800200009000001613000000804E +:1057A0000200009000004D0E000000100840019221 +:1057B0000000161300000080020000900000161385 +:1057C000000000800200009000001613000000801E +:1057D00002000090000016130000008002000090FC +:1057E0000000CB0E00000010084001920000CF0E18 +:1057F00000000010084001920000310E000000106F +:10580000084001920000CF0E0000001008400192F5 +:1058100000007D08000000100840019200001613EF +:1058200000000080020000900000CF0E0000001079 +:105830000840019200007E0800000010080002925B +:1058400000001613000000800200009000001613F4 +:1058500000000080020000900000D00E0000001048 +:10586000084001920000310E000000100840019233 +:105870000000D00E000000100840019200007D08DA +:105880000000001008400192000016130000008084 +:10589000020000900000D00E0000001008400192AD +:1058A0000000161300000080020000900000161394 +:1058B000000000800200009000001613000000802D +:1058C000020000900000D50E000000100880009239 +:1058D0000000D50E0000001008C000920000D50E98 +:1058E00000000010080001920000130B00000010DF +:1058F0000840019200001613000000800200009092 +:105900000000D50E0000001008C001920000161320 +:1059100000000080020000900000161300000080CC +:1059200002000090000016130000008002000090AA +:105930000000161300000080020000900000161303 +:10594000000000800200009000001613000000809C +:10595000020000900000161300000080020000907A +:105960000000A00A0000001008400092000016137A +:10597000000000800200009000001613000000806C +:10598000020000900000161300000080020000904A +:105990000000161300000080020000900000EA0ED4 +:1059A00000000010088000920000EA0E00000010C5 +:1059B00008C000920000EA0E0000001008000192EA +:1059C0000000130B000000100840019200001613A5 +:1059D00000000080020000900000EA0E00000010AD +:1059E00008C0019200001613000000800200009021 +:1059F0000000161300000080020000900000161343 +:105A000000000080020000900000030F0000001062 +:105A1000088000920000030F0000001008C00092F0 +:105A20000000030F00000010080001920000130B9B +:105A300000000010084001920000161300000080D2 +:105A4000020000900000030F0000001008C0019247 +:105A500000001613000000800200009000007D0886 +:105A600000000010080000920000161300000080E3 +:105A70000200009000007D080000001008800092E5 +:105A80000000150F0000001008C0009200007D0803 +:105A9000000000100800019200007D0800000010C6 +:105AA00008400192000016130000008002000090E0 +:105AB0000000161300000080020000900000161382 +:105AC000000000800200009000001613000000801B +:105AD00002000090000016130000008002000090F9 +:105AE00000007D0800000010088000920000260FD2 +:105AF000000000100880009200007D0800000010E7 +:105B00000800019200007D0800000010084001928A +:105B10000000161300000080020000900000161321 +:105B200000000080020000900000161300000080BA +:105B30000200009000001613000000800200009098 +:105B400000001613000000800200009000007D0895 +:105B500000000010088000920000260F00000010D6 +:105B60000800019200007D0800000010080001926A +:105B700000007D080000001008400192000016138C +:105B8000000000800200009000001613000000805A +:105B90000200009000001613000000800200009038 +:105BA0000000161300000080020000900000161391 +:105BB000000000800200009000001613000000802A +:105BC0000200009000007D08000000100880009294 +:105BD00000001613000000800200009000007D0805 +:105BE0000000001008400192000016130000008021 +:105BF00002000090000016130000008002000090D8 +:105C00000000161300000080020000900000161330 +:105C100000000080020000900000161300000080C9 +:105C2000020000900000FA0E0000001008800092B0 +:105C30000000FA0E0000001008C000920000FA0EEA +:105C400000000010080001920000130B000000107B +:105C5000084001920000161300000080020000902E +:105C60000000FA0E0000001008C001920000161398 +:105C70000000008002000090000016130000008069 +:105C80000200009000001613000000800200009047 +:105C900000001613000000800200009000001613A0 +:105CA0000000008002000090000016130000008039 +:105CB000020000900000390F00000010080002925E +:105CC0000000161300000080020000900000161370 +:105CD0000000008002000090000016130000008009 +:105CE00002000090000016130000008002000090E7 +:105CF0000000161300000080020000900000C00A9F +:105D00000000001008C0019200001613000000807F +:105D100002000090000016130000008002000090B6 +:105D20000000130B00000010084001920000161341 +:105D300000000080020000900000010B0000001035 +:105D400008C00192000016130000008002000090BD +:105D500000001613000000800200009000001613DF +:105D600000000080020000900000C00A0000001047 +:105D700008800092000016130000008002000090CE +:105D80000000161300000080020000900000130BBA +:105D9000000000100840019200001613000000806F +:105DA000020000900000010B0000001008C00192EA +:105DB000000016130000008002000090000016137F +:105DC0000000008002000090000016130000008018 +:105DD000020000900000260D0000001008800092D4 +:105DE0000000161300000080020000900000260D45 +:105DF00000000010088000920000220E0000001039 +:105E0000084001920000161300000080020000907C +:105E10000000260D000000100880009200001613FC +:105E200000000080020000900000161300000080B7 +:105E30000200009000001613000000800200009095 +:105E40000000260D0000001008000192000016134B +:105E500000000080020000900000260D00000010ED +:105E6000080001920000220E00000010084001927C +:105E70000000161300000080020000900000260DB4 +:105E800000000010080001920000161300000080BE +:105E90000200009000001613000000800200009035 +:105EA0000000161300000080020000900000260D84 +:105EB000000000100800019200001613000000808E +:105EC000020000900000260D000000100800019262 +:105ED0000000220E0000001008400192000016137E +:105EE00000000080020000900000260D000000105D +:105EF00008000192000016130000008002000090CC +:105F0000000016130000008002000090000016132D +:105F100000000080020000900000260D000000102C +:105F2000088000920000161300000080020000901C +:105F30000000260D00000010088000920000220ED4 +:105F400000000010084001920000161300000080BD +:105F5000020000900000260D000000100880009252 +:105F600000001613000000800200009000001613CD +:105F70000000008002000090000016130000008066 +:105F80000200009000001613000000800200009044 +:105F90000000161300000080020000900000260D93 +:105FA0000000001008C001920000220E0000001046 +:105FB00008400192000016130000008002000090CB +:105FC0000000260D0000001008C00192000016130A +:105FD0000000008002000090000016130000008006 +:105FE00002000090000016130000008002000090E4 +:105FF0000000AB0D00000010088000920000161396 +:1060000000000080020000900000161300000080D5 +:106010000200009000007D0800000010084001927E +:106020000000161300000080020000900000AB0D7D +:10603000000000100880009200001613000000808D +:106040000200009000001613000000800200009083 +:106050000000161300000080020000900000AB0D4D +:10606000000000100880009200001613000000805D +:106070000200009000001613000000800200009053 +:1060800000007D0800000010084001920000161377 +:1060900000000080020000900000AB0D0000001026 +:1060A00008C001920000161300000080020000905A +:1060B000000016130000008002000090000016137C +:1060C0000000008002000090000016130000008015 +:1060D00002000090000016130000008002000090F3 +:1060E00000001613000000800200009000007D08F0 +:1060F000000000100840019200001613000000800C +:10610000020000900000B50D0000001008C00192D0 +:10611000000016130000008002000090000016131B +:1061200000000080020000900000161300000080B4 +:106130000200009000001613000000800200009092 +:1061400000001613000000800200009000001613EB +:10615000000000800200009000007D080000001098 +:106160000840019200001613000000800200009019 +:106170000000B50D0000001008800092000016130A +:106180000000008002000090000016130000008054 +:106190000200009000001613000000800200009032 +:1061A000000016130000008002000090000016138B +:1061B0000000008002000090000016130000008024 +:1061C000020000900000B30E000000100840019291 +:1061D000000016130000008002000090000016135B +:1061E00000000080020000900000161300000080F4 +:1061F0000200009000008608000000100840009295 +:10620000000016130000008002000090000016132A +:1062100000000080020000900000161300000080C3 +:1062200002000090000016130000008002000090A1 +:106230000000161300000080020000900000DD083E +:10624000000000100880009200001613000000807B +:106250000200009000001613000000800200009071 +:106260000000C6090000001008000192000016138B +:10627000000000800200009000008508000000106F +:10628000080001920000D0090000001008000192EF +:106290000000D00900000010080001920000D009A1 +:1062A000000000100800019200001613000000809A +:1062B0000200009000001613000000800200009011 +:1062C0000000EF0800000010088000920000161384 +:1062D000000000800200009000008508000000100F +:1062E00008000192000016130000008002000090D8 +:1062F000000016130000008002000090000000095A +:1063000000000010088000920000C4090000001086 +:10631000088000920000850800000010080001922B +:106320000000161300000080020000900000E60943 +:1063300000000010084000920000E6090000001074 +:10634000088000920000E6090000001008C00092DA +:1063500000008508000000100800019200001613DC +:106360000000008002000090000016130000008072 +:106370000200009000000C0A0000001008C000920B +:106380000000161300000080020000900000850845 +:1063900000000010080001920000161300000080A9 +:1063A0000200009000001613000000800200009020 +:1063B00000000F0A000000100800019200000F0A00 +:1063C0000000001008000192000085080000001085 +:1063D00008000192000016130000008002000090E7 +:1063E0000000161300000080020000900000110A57 +:1063F00000000010088000920000110A0000001048 +:1064000008C00092000085080000001008000192FA +:1064100000001613000000800200009000008508B4 +:1064200000000010084000920000DC09000000108D +:10643000088000920000DC090000001008C00092F3 +:106440000000850800000010080001920000850887 +:1064500000000010080000920000850800000010F5 +:10646000084000920000250A0000001008800092F9 +:106470000000250A0000001008C0009200008508F6 +:1064800000000010080001920000161300000080B8 +:10649000020000900000161300000080020000902F +:1064A0000000600A000000100880009200008508CB +:1064B0000000001008C000920000850800000010D5 +:1064C00008000192000016130000008002000090F6 +:1064D00000001613000000800200009000003F0A38 +:1064E00000000010088000920000161300000080D9 +:1064F00002000090000085080000001008000192D2 +:106500000000161300000080020000900000161327 +:1065100000000080020000900000EC080000001065 +:106520000880009200001613000000800200009016 +:1065300000008508000000100800019200001613FA +:106540000000008002000090000016130000008090 +:10655000020000900000540A000000100880009221 +:106560000000540A0000001008C0009200008508D6 +:1065700000000010080001920000161300000080C7 +:10658000020000900000161300000080020000903E +:1065900000001C0A000000100880009200001C0A85 +:1065A0000000001008C000920000850800000010E4 +:1065B0000800019200001613000000800200009005 +:1065C00000001613000000800200009000006D0A19 +:1065D000000000100880009200006D0A000000100A +:1065E00008C0009200008508000000100800019219 +:1065F0000800F303001801E8762081990800EF03F2 +:10660000001801E87620819900004B1200000080FC +:10661000020000F0080082081D1901E8762081B907 +:106620000000F303000000F862812F950000F303DF +:106630008000008002812FB62A0016131200002C61 +:1066400082CD2EB20000F303000000F802812F94E7 +:106650000800F303001C01E876208199000016135E +:10666000800F018002C06EB600000000000000D85C +:106670000200003200000000000E01EC06C06E3582 +:106680005400000000000000070036320000000047 +:10669000000000BCA8002D37B40401000008000071 +:1066A000C7CD8B3A000000000000007899C02C375D +:1066B000B400000000000078898D973A000016139E +:1066C0000210000087BF97BA000000000018000009 +:1066D0000740FE320000161312000040F2C138B429 +:1066E000000000000090007809006E3200001613D0 +:1066F00004A0000009806EB20000950804A5000403 +:1067000009806EB200000000000000040900903211 +:106710000000161302010080026490BC000098087B +:1067200004010004096490BC0000000000000004A3 +:1067300009400032080000006E3402E81624903947 +:1067400000009908B71002E0068097B200009C088C +:1067500080000080F280FCB600009D08000000C8A8 +:10676000FF80FC9400009E089F990080821BEEBC75 +:1067700000000000009800E00E006E3200000000F3 +:10678000A70000800200003018003600000000F86A +:10679000730A03F9000000000010021C09006E32A9 +:1067A0004000A3080601008082CD91BC00C0A4086F +:1067B000001802E00680369200E00000001802E0B7 +:1067C00006803632000000000000002009800332FD +:1067D0000000A70880D7018032C06EB6000000001C +:1067E000000000204900923A0000000000980118C3 +:1067F00009006E3200000000000A022409C06E3257 +:106800000000000000C0012809806E320000B508B9 +:10681000800E018012C06EB602000000003C02EC47 +:106820000600363200000000000000004901923AE4 +:106830000000B10880D6018042C06EB60082000020 +:10684000001002E0A6CD913200A00000002C02E86A +:10685000060036322800BF08003A02EC06003692E5 +:1068600000000000D301001CD9C191340082000057 +:10687000001002E0A6CD913200A00000002C02E83A +:10688000060036323400BF08003A02EC06003692A9 +:1068900004000000003C02EC060036322800000034 +:1068A00000000000890D923A0000BB0880D60180EC +:1068B00042C06EB600860000001002E0A6CD913204 +:1068C00004A00000002C02E8060036321400BF08C5 +:1068D000003A02EC0600369200000000D301001CD2 +:1068E000D9C1913400860000001002E0A6CD91329B +:1068F00004A00000002C02E8060036322000BF0889 +:10690000003A02EC0600369212000000003802EC59 +:1069100086CD913A08000000002802E886249039CC +:1069200000000000002002E0962414370000000060 +:10693000004001E0068091320000C508040100809B +:10694000028092BC0000000000C001E0060000329E +:1069500000000000003000E00600003200000000EF +:1069600000B000E00600003220000000000000003F +:10697000070036320000000000000078A9002D3723 +:106980000005010000080000C78D973A00000000D4 +:106990000000007899C02C3700010000000000784A +:1069A000898D973A000016130210000087BF97BA2E +:1069B00000000000001800000740FE32000016131F +:1069C00012000048F2C138B40000D20880D7012C70 +:1069D00009C06EB200000000DAD701EC06C06E35C7 +:1069E00000000000005A01EC0640ED32AE0000004D +:1069F000000000781900363AAF0016130401008039 +:106A0000828D97BC00000000005C01E806808B329C +:106A10000000D7088001008062C092B6000000002C +:106A2000000000F882812F3418003600000000F8C2 +:106A3000730A03F9000000000004013808C06E3238 +:106A40000000161304C9018002806EBC0000000023 +:106A5000006201EC06808332010085081201002CDF +:106A600082CD2EB2000016130000008002000090BC +:106A700000000000005401FC02C06E320000000063 +:106A8000000000D80280013200C0E3081801000CA9 +:106A9000A8CD3EB2208000000000000808803632F9 +:106AA0002D00EF031201002C82CD2EB20000161330 +:106AB0000000008002000090000000000062013829 +:106AC00008C06E320008008000000028090037323C +:106AD0000060EB1100000008088036F20000161379 +:106AE000870601EC16C06EBC000085080B00008014 +:106AF000020000B0000085088000008072812FB67F +:106B000000000000000000F872812F343D0085086D +:106B10001201002C82CD2EB200001613000000805E +:106B200002000090000016130407018012C06EBC22 +:106B30000000161380000080B2812FB60000EF081D +:106B4000000000F8B2812F940000161304A0001872 +:106B500008006EB2000016130406018002C06EBC6D +:106B600000009E1200000080020000F000000013F0 +:106B70000078016008006EF20000F508120100C8FC +:106B8000020020B20000F80800000080020000901F +:106B9000000005091201005C088020B20000F8081E +:106BA0001201006002802CB2000016130000008069 +:106BB000020000900000FA0804000080024080BC3F +:106BC00000000000000000F81F80FF3A0000FD08F0 +:106BD00080010080A2802FB618003600CA0000F89D +:106BE000730A03F9000016130401008002802DBC13 +:106BF000000085088000008072812FB63D001613CA +:106C00001200002C82CD2EB200008508000000F892 +:106C100072812F94000016130406018002C06EBC1E +:106C20000000000000BC001408806E320000F8086C +:106C3000120000C8020020B20000F6081200005C3A +:106C4000088020B20000161304A0001808006EB2DD +:106C5000000000000000007879613832000016134F +:106C60001218024CE2256EB20000161304010080D7 +:106C700002402DBC080000000010020078E16E39CF +:106C8000000000000018002007000032070000008C +:106C90000000003878CAE939000016130400003CEF +:106CA000084080B2000000000090006C08006E32C6 +:106CB000000000000098004C08006E32000016131F +:106CC0000400008032E186B200000000510000D8CC +:106CD00002000032000000004D00000067E0833E2B +:106CE00000000000000800000700803200000000E3 +:106CF0000010000007C086320000000000180000ED +:106D000007C084320000000000000018D8A0813CB9 +:106D10000000840904B000E0D6206EBC0000161309 +:106D200009010080020000B0000043090400003C9B +:106D3000D8E083BC0000161304010080028081BCEF +:106D4000000024098000008092802FB600001C09FA +:106D50001201000009C021B218003600000000F83E +:106D6000730A03F91D0000000000007809A4173819 +:106D70000000210904010080128097BC0000161356 +:106D800080010080A2802FB600001B09670000F878 +:106D9000A2802FB500001C090000000009C021924C +:106DA0000000230904000080228097BC0000161315 +:106DB00004010080328097BC00000000C90100D8A7 +:106DC00002408432000027090400008072802DBC3C +:106DD0000000161312000044E2E038B2000034094B +:106DE000510000D812802D9A0000000000000078A9 +:106DF000F98183340000161312000044E2E538B232 +:106E000000002C098000008082802FB60000F7115E +:106E100000A0015008006EF20000000000F801E040 +:106E20000600853200002E09120100E802C021B2DE +:106E300018003600000000F8730A03F90000320958 +:106E40000401008002802DBC000016138001008028 +:106E5000A2802FB600002D09670000F8A2802FB590 +:106E600000001613120000E802C021B20000161341 +:106E70000401008072802DBC00000000510000D889 +:106E800002000032000039092A010000D82080BA2F +:106E9000000038091201000009C021B218003600B4 +:106EA000000000F8730A03F900000000000000D899 +:106EB000024084321D0016130400008002A417B89B +:106EC00000000000CAE0006C08006E320000000004 +:106ED00000E8004C08006E320000161304F00018A1 +:106EE00008006EB2000000000000003818818335F1 +:106EF0000000100904B00080829B81BC00001613C2 +:106F00000D010080020000B0000016139F00001465 +:106F1000184081BC00000000CA0100F842802F35F3 +:106F200008A0100912010040A2CD39B200001613CA +:106F3000000000800200009000004E09293402B8D1 +:106F400008806EB2000046091201000009C021B29B +:106F500018003600000000F8730A03F91D00000055 +:106F60000000007809A4173800004B0904010080D4 +:106F7000128097BC0000161380010080A2802FB6FB +:106F800000004509670000F8A2802FB500004609FF +:106F90000000000009C0219200004D09040000809B +:106FA000228097BC0000161304010080328097BC39 +:106FB00000000000C90100D8024084320000000037 +:106FC00000000078F9818334000016131200004499 +:106FD000E2E538B2000056092800006CD8E086BA15 +:106FE0000000F61100A0015008006EF200005609E2 +:106FF0001DF801E0060085B20000560980000080FF +:1070000002812FB62A0016131200002C82CD2EB258 +:1070100000000000000000F802812F3400005C092D +:1070200004A000E0068081B20000000000BC00E87F +:107030000640813200000000009000E006C0863269 +:1070400000000000009800E006C084320000161323 +:107050000400008032E186B2000070090000008068 +:10706000020000900000620980010080A2802FB61B +:1070700000005F091201000009C021B218003600AB +:10708000000000F8730A03F91D0062090401008082 +:1070900002A417B80000161380000080E2802FB60B +:1070A00000005E09000000F8E2802F94000000005C +:1070B00000E0006C08006E3200000000CAE8004CDE +:1070C00008006E32000016130400008032E186B220 +:1070D0000000161304F0001808006EB200006B09DF +:1070E00004B00080829B81BC000016130D0100805B +:1070F000020000B0000016139F000014184081BC6D +:1071000000000000CA0100F842802F3508A01613C5 +:1071100012000040A2CD39B20000000000A000E043 +:107120000680813200000000009800E006C0843232 +:1071300000000000009000E006C086320000161338 +:107140000400008032E186B20000000000BC00E8CC +:1071500006408132000076092A5D01E806808BB284 +:10716000000073091201000009C021B218003600A6 +:10717000000000F8730A03F91D007609040100807D +:1071800002A417B80000161380000080E2802FB61A +:1071900000007209000000F8E2802F9410247909A1 +:1071A000370000F8A28D2FB13D0016131200002CFD +:1071B00082CD2EB200000000000000F872812F3452 +:1071C00008000000CA1C01E8762081390000541034 +:1071D0000000002CF90100F400007F09800000800D +:1071E000E2802FB600007E091201000009C021B222 +:1071F00018003600000000F8730A03F91D0016138A +:107200000401008002A417B800001613800100805A +:1072100082802FB60000161304010080C20003BC58 +:10722000100000000018008067A173393000F603D9 +:107230001201005CA28D2CB2000016130000008029 +:107240000200009000008A098000008092802FB622 +:1072500018003600000000F8730A03F91D00161329 +:107260000400007809A417B8000089090400008010 +:10727000228097BC0000161304010080328097BC66 +:1072800000000000C90100D802408432000016133B +:1072900004010080D2E083BC000016132A000078AD +:1072A000F98183B40000161312000044E2E538B2FD +:1072B0000000641100000030030038F20000920961 +:1072C0001D000038188183B50000920980000080FD +:1072D00002812FB62A0016131200002C82CD2EB286 +:1072E00000000000000000F802812F340000161397 +:1072F000870601EC16C06EBC000096090B000080EA +:10730000020000B000000000CA0100F842802F34E3 +:1073100008C0161312000040A2CD39B2000099092E +:107320008000008082802FB60000F71100A001507D +:1073300008006EF20000000000F801E0060085324F +:1073400000009B091201000009C021B2180036009C +:10735000000000F8730A03F90000BD092A3502B8DD +:1073600008806EB200009E091201000009C021B21F +:1073700018003600000000F8730A03F9000000004E +:10738000000000F8A2802F350000B509040000803D +:10739000026180BC0000AD0980B8000009C06EB277 +:1073A0004000A50904000080820D90BC80001613E7 +:1073B00004010080820D90BC0000A50902B000808D +:1073C000821B84BC0000AD09000000F8B2812F943C +:1073D000000016130407018012C06EBC00001613D3 +:1073E00080000080B2812FB60000161380D6018085 +:1073F00052C06EB60000000000D601EC56C06E34DC +:1074000000000000000000601800863A0000000044 +:1074100000000080B701783400000000007801E02F +:10742000060086324000BD0904000080820D90BC39 +:107430000000161304A0001808006EB200009E128F +:1074400000000000D82080FA000016130600003C5F +:10745000182084BC0000161304B0003C88DB83BEF7 +:107460000000161380010080C20178B60000000001 +:1074700000000080F720783A00000000587801E012 +:10748000F620863A00000C0900000004F860809A9B +:107490000000B80980B9000009C06EB22F00BD0914 +:1074A0001201002C82CD2EB20000161300000080C5 +:1074B000020000904000BA0904010080820D90BCD7 +:1074C0003800BC09000000780900369280001613CD +:1074D00004010080820D90BC39000000000000789B +:1074E00009003632000016131200002CE2E52EB21D +:1074F000000016138001008082802FB60000161352 +:1075000004010080C20003BC1000000000180080CD +:1075100067A1733900000000005C01E806808B322F +:1075200010240000000000F8A28D2F3130008508E3 +:107530001201005CA28D2CB2000016130000008026 +:10754000020000900000161380010080C2812FB657 +:1075500000000009000000F8C2812F950000000023 +:10756000005401FC02C06E3200000000000000D890 +:107570000280013200C0CC091801000CA8CD3EB237 +:107580002080000000000008088036322D00EF0344 +:107590001201002C82CD2EB20000161300000080D4 +:1075A00002000090000000000062013808C06E3246 +:1075B0000008008000000028090037320060EB114D +:1075C00000000008088036F20000DA0900000080A0 +:1075D000020000900000D20980000080C2812FB616 +:1075E0000000D50900D001E806000092000000006C +:1075F000000000F8C2812F350000D50904D10180B8 +:1076000002806EBC0000000000D601EC26C06E3483 +:107610000000D7098000008092812FB60000DA09AF +:1076200000C801E80600009200000000000000F819 +:1076300092812F350000DA0904C9018002806EBCF6 +:107640000000000000D601EC16C06E341100850861 +:107650001201002C82CD2EB2000016130000008013 +:1076600002000090000085089A0100F842812FB5C1 +:107670000000E309120100C8020020B2000000006F +:10768000005C01EC0640003200008508370000F87D +:1076900042812FB400000000000000F872812F34F6 +:1076A0003D0085081201002C82CD2EB20000161379 +:1076B00000000080020000900000EE091201005C52 +:1076C000088020B20000DE091201006002802CB2A6 +:1076D0000000161300000080020000900000EB097B +:1076E000120100C8020020B200008508370000F82F +:1076F000D2812FB400000000000000F872812F3406 +:107700003D0085081201002C82CD2EB20000161318 +:1077100000000080020000900000EE091201005CF1 +:10772000088020B20000E7091201006002802CB23C +:10773000000016130000008002000090000000000E +:107740000000007879613832000016131218024CDC +:10775000E2256EB200000000003402B808806E32EC +:107760000000000000A0015008006E320000000080 +:107770000078016008006E320000F5099D110234A6 +:1077800009006EB20000000000F0018808006E32AF +:107790000000121200A8010809006EF200000000AB +:1077A000D4F801E00600853200000000DA5C01E850 +:1077B00006808B3200006411DD000030030038F2D7 +:1077C0000000FB092329020409806EB23E00161353 +:1077D0001200002C82CD2EB20800FF091D1C01E80A +:1077E000762081B90000FF098000008002812FB659 +:1077F0002A0016131200002C82CD2EB200000000C9 +:10780000000000F802812F34000054100000002C0A +:10781000F90100F40000030A9D010080074093B2C3 +:107820000000000000300080078088320000000067 +:10783000003800800700EE320000000000080080E1 +:1078400007C0853200000000001000800740903221 +:107850001000000000180080878D853700000000B0 +:107860000020008007008632000000000028008011 +:107870000700853200000A0A1201000009C021B287 +:1078800018003600000000F8730A03F93000F60310 +:107890001201005CA28D2CB20000161300000080C3 +:1078A000020000900012161304010080A28D2FB078 +:1078B0000000000000CC017809806E3200008508CD +:1078C000DCD101E806809792130085081201002C94 +:1078D00082CD2EB20000161300000080020000903E +:1078E0000000E30F00000018094081F20000C70FFC +:1078F00000A8012009006EF20000850880010080C8 +:10790000F2802FB60000190A120100C8020020B24E +:10791000000085088000008072812FB60000000002 +:10792000000000F872812F343D0085081201002C00 +:1079300082CD2EB2000016130000008002000090DD +:107940000000EE091201005C088020B20000150A58 +:107950001201006002802CB20000161300000080AB +:107960000200009000008508350100F812812FB553 +:1079700000000000000000D802800132000000007A +:10798000005401FC02C06E3200C0230A1801000C32 +:10799000A8CD3EB220800000D10100080880363218 +:1079A0003B00F3031201002C82CD2EB2000016130F +:1079B00000000080020000900000E2110098012801 +:1079C00009006EF2000085080000008002000090AF +:1079D00000002F0A80010080A2812FB600002F0A2C +:1079E0008000008042812FB61F00000000000010C0 +:1079F00009003632000080120000001409802FD2E6 +:107A00003C00000000000010090036320000801227 +:107A10000000001409803CD200002F0A085B01EC32 +:107A200006FB6EBC00000000005A01EC06000032AC +:107A300000002F0A370000F842812FB43D000000FB +:107A4000D701002C82CD2E320000360A8001008042 +:107A500092812FB60000161380000080C2812FB6DD +:107A600000003D0A08C901E806BB6EBC000000002A +:107A700000C801E806000032330016131200002C83 +:107A800082CD2EB20000F31100000028098001F21F +:107A900000008508000000800200009000003D0A00 +:107AA00080010080C2812FB6000016138000008084 +:107AB00092812FB600003D0A08D101E806BB6EBCDA +:107AC0000000000000D001E8060000323300161369 +:107AD0001200002C82CD2EB20000F311000000280D +:107AE00009C001F20000850800000080020000903B +:107AF0000000850880010080F2812FB618008508FB +:107B00000000002C82CD2E92000016130407018085 +:107B100012C06EBC0000430A120000C8020020B26E +:107B20000000460A1201005C088020B20000161313 +:107B30001200006002802CB200000000000000F87B +:107B40001F80FF3A0000F3031201002C72E02EB2F6 +:107B500000001613000000800200009000000000EA +:107B60000000007879613832000016131218024CB8 +:107B7000E2256EB200000000003402B808806E32C8 +:107B800000000000D4A0015008006E320000000088 +:107B9000DB79016008006E320000F711DD0000049F +:107BA000080000F21000000000180080878D853763 +:107BB0000000000000F801E0060085320000500AD5 +:107BC0001201000009C021B218003600000000F8C0 +:107BD000730A03F9300016131200005CA28D2CB258 +:107BE00000001613040701EC16C06EBC0000000074 +:107BF00000B000E00600003200008508DA5C01E811 +:107C000006808B92000085089F41018052206EBC47 +:107C100000005F0A9F98018052206EBC00000000A7 +:107C2000000000D80280013200000000005401FC76 +:107C300002C06E3200C05D0A1801000CA8CD3EB231 +:107C40002080850831000008088036B2000000005E +:107C5000000000F812812F343B0085081201002C2F +:107C600082CD2EB2000016130000008002000090AA +:107C70000000E2110098012809006EF2000085085A +:107C8000000000800200009000008508D54101E05E +:107C9000064081920000850804B0008002006EBC9E +:107CA000000000000090010008006E320000001388 +:107CB0000078016008006EF2000085080000008076 +:107CC0000200009000000000000C027809806E3273 +:107CD0000000670A04D4018012C06EBC00000000DE +:107CE000000000781980973700000000009001E044 +:107CF000E6256E3A0000001300000080020000F04C +:107D000000006B0A0000008002000090000085085F +:107D1000009001E00600809200000000009001E069 +:107D20000600803200000009000000800200009080 +:107D30000000161380000080F2802FB60000C70FED +:107D400000A8012009006EF20000140A80000080E3 +:107D5000F2802FB60000850800000080020000902D +:107D600000000000000000D8028001320000000086 +:107D70000000007809006E320200760A04B9008023 +:107D800082CD6EBC0000780A800000807280FCB654 +:107D900000007B0A000000FC020000920000780A4C +:107DA000800000808280FCB600007B0A000000FC9E +:107DB0000200009200001613040000800200F5BCCF +:107DC00000000000000000A842BD97300000000045 +:107DD000541809FEF2C07C3000C0810A1801000C62 +:107DE000A8CD3EB200000000000E01EC06000034F9 +:107DF00000000000005401EC06C02F32208000007B +:107E000000000008088036320000F3031201002C45 +:107E100082CD2EB2000016130000008002000090F8 +:107E2000000000000062013808C06E3200080080C7 +:107E300000000028090037320000EB1100000008A4 +:107E4000E80100F400001613040701EC16C06EBC34 +:107E500000000000000000A8A2002D370A0000006A +:107E6000000000780900363200000000001809E226 +:107E7000070000320000870A04010078198097BCCF +:107E80000200920A04B9008082CD6EBC0000004856 +:107E9000D6010078C9CD2C3200008B0AB6000080D4 +:107EA000020000B00000161312000064028097B2B6 +:107EB00000008D0A1208006402006EB200008E0AF3 +:107EC0001218006402006EB200008F0A12100064E3 +:107ED00002006EB200000000A65401EC06C02F3272 +:107EE00000007D08000E01EC060000940020004C0C +:107EF000D6010078C9CD2C320000930AB60000806C +:107F0000020000B00000161312000064028097B255 +:107F10000000950A1208006402006EB20000960A82 +:107F20001230006402006EB20000970A123800643A +:107F300002006EB20000980A1240006402006EB2A5 +:107F40000000990A1248006402006EB200009A0A0A +:107F50001210006402006EB200009B0A1218006446 +:107F600002006EB200009C0A1220006402006EB291 +:107F700000009D0A1228006402006EB2000000009A +:107F8000A65401EC06C02F3203007D08000E01EC60 +:107F90000600369200000000000000FC02000132E2 +:107FA0000000A30A0000001408803D9200000000B9 +:107FB000000000FC020001320000A60A040000DC00 +:107FC00053603DB318000000000000F8738A0339C5 +:107FD000A20A3600000000C0020036920000000035 +:107FE000005401FC02C06E3200000000000000D806 +:107FF0000280013200C0AC0A1801000CA8CD3EB2CC +:108000002080000000000008088036321500EF03D1 +:108010001201002C82CD2EB2000016130000008049 +:10802000020000900000000000280000070000325D +:10803000000000000030000007C02C320010008259 +:108040000038000007003732000016131200004805 +:1080500002C080B200007D08CA010008E801009457 +:10806000000016138001008062812FB62D001613C8 +:108070001200002C82CD2EB20000B50A1D01008036 +:10808000020000B000007D08000000F862812F951A +:10809000000016138000008002812FB6000000004F +:1080A000000000F802812F342A007D081201002C04 +:1080B00082CD2EB200001613000000800200009056 +:1080C0000000D7110000002C09C085D20000641107 +:1080D00000000030030038F20000F303230100F831 +:1080E00022812FB43E00F3031201002C82CD2EB268 +:1080F0000000161300000080020000900000D7115D +:108100000000002C09C085D20000F303000000F835 +:1081100022812F940000C50A380100D8028001B2E4 +:108120000000C30A1E000080020000B00000C50A63 +:108130001A010080020000B0000038120000006840 +:108140001F80F6FA0000F303000000800200009098 +:108150000000C90A12010060084023B2008200003A +:108160000000000808803632000038120000006469 +:108170001F40F6FA0000F3030000008002000090A8 +:108180000000161312000024080023B2000016138A +:108190001200002008C023B20000161312000018BD +:1081A000088023B200C0D40A1801000CA8CD3EB24A +:1081B0000000CC0A12000038028081B200001613C1 +:1081C0001200003C020082B20000161312000030C0 +:1081D000024082B20000161312000034020086B280 +:1081E00020800000000000080880363200003812AD +:1081F0000000005C1FC0F5FA0000F30300000080DF +:108200000200009000000000450000D8020000328B +:108210000000000000000000074080320000000065 +:10822000001000000740823200000000001800002B +:10823000070086320000161312000050F2C138B455 +:1082400000007A0F003001E016206EFA0000DD0A0F +:108250003801002CF8010BB40000DD0A020D028089 +:10826000A25B80BC000000000000002CC8C182346A +:108270000000DF0A8000008042812FB60000B40FAA +:1082800000000080020000F0000016139FA801E02B +:1082900016206EBC0000D40F00000080020000F029 +:1082A0000000E50A270100D8028001B200000000AA +:1082B000C700002CE8C08234000000000000000865 +:1082C000D801003400000000D54001E006008732EC +:1082D00008004B12001801E8762081F900006411B3 +:1082E00000000030030038F20000E90A2319000002 +:1082F000078081B23E0016131200002C82CD2EB2F0 +:108300000000EB0A1D210000070082B20000EE0A07 +:10831000000000F862812F950000EE0A80000080C6 +:1083200002812FB62A0016131200002C82CD2EB225 +:1083300000000000000000F802812F340000161336 +:1083400080000080A2802FB6000054100000002C96 +:10835000F90100F4000016130401008062802DBCB6 +:108360001000F40A2C30000017E02CB90000F60AC7 +:108370008E39000007C082B20000F60A0008000033 +:10838000070087920000F60A8E390000B7C182B458 +:108390000000000000080000070087320000F80A13 +:1083A000120100E802C021B218003600000000F8F7 +:1083B000730A03F90000F60A9F010014184081BCFB +:1083C0000000FE0A0400008002C085BC00001613F5 +:1083D0001200006802C585B00000000000000078AF +:1083E00009C58530000016130201008082BA97BCCF +:1083F000000016130601008092BA97BC0000161305 +:108400001200004802C080B2000016130401008070 +:10841000D28180B50000F603CA010008E88180948B +:10842000000016138001008082812FB60000040B2B +:108430001E000080020000B00000060B1A01008040 +:10844000020000B000003812000000681F80F6FA39 +:108450000000F303000000800200009000001613EB +:108460009FA801E016206EBC00007A0F00000014E7 +:10847000080000F200000A0B8000008042812FB645 +:108480000000B40F00000080020000F00000D40FD4 +:1084900000000080020000F000007F08040000805F +:1084A000024081BC00000E0B120100E802C021B2A4 +:1084B00018003600000000F8730A03F900000000FD +:1084C0000000007809C58530000016130201008005 +:1084D00082BA97BC000016130601008092BA97BCBE +:1084E00000007F081201006802C585B00000161365 +:1084F000000000800200009000007D0880000080E5 +:10850000F2C185B60000170B1C41028006C085B27F +:10851000000000000000006802C585300000000077 +:10852000000000701F00F73A00007D08000000F80E +:1085300022812F9400007D0880000080F2C185B662 +:108540000000D7110000002C09C085D20000F30301 +:10855000D20100941E40E99A00001613042000186E +:1085600008006EB20000161380000080F2812FB662 +:1085700000008C1200000080020000F000001613C2 +:1085800004010080028080BC0000161304510180A9 +:1085900002806EBC000016130421018002006EBC34 +:1085A00000000000003C00E8064081320000250B7E +:1085B0001F000080020000B00000220B9E400278E5 +:1085C000094068B20000161300000080020000900D +:1085D0000000290B8001008082812FB600007F08F7 +:1085E0002A3101E0060000B218000000CA0000F8BD +:1085F000730A03397F083600000000C0020036927B +:1086000000007F0880010080A2802FB618000000C3 +:10861000CA0000F8730A03397F083600000000C062 +:10862000020036920D002F0B000000580800369211 +:1086300000002F0B00000058080000921B000000F3 +:1086400000000058080036320000161304200018FD +:1086500008006EB20000161380000080F2812FB671 +:1086600000008C1200000080020000F000000000FA +:108670000030002808006E3200000000545401FC55 +:1086800002C06E320000940B380000A4088082B251 +:108690000000940B0428010408006EB200001613B9 +:1086A0009F500104A85B80BC00000000005001E85E +:1086B0000600003200005E0B0801007819A082BCA1 +:1086C00000000000002801E0A660803C00003C0B98 +:1086D0002A010014080000B200000000CA000014C3 +:1086E0001840813A0000C70F00A80120A9206EFAA7 +:1086F0000000161306010280821B92BC00000000DD +:10870000002001E0A6206E3C00000000003000E0E8 +:10871000060000320000000000A801E006009232CE +:1087200000000000000000D80280013200C0500BA1 +:108730001801000CA8CD3EB20000470B04000080D9 +:10874000024081BC0000000000000014080000325C +:1087500018000000000000F8730A0339410B3600CE +:10876000000000C0020036922080000000000028B7 +:108770000980363200008111000000D8020000D2CA +:1087800000004B0B04000080028092BC18003600F1 +:10879000000000F8730A03F900000000000000D890 +:1087A0000280013200C0500B1801000CA8CD3EB26F +:1087B00018000000000000F8738A03394B0B00001A +:1087C000000000C0020036320000360000000080C9 +:1087D0000200009000000000DE000008E801003404 +:1087E00000000000DF00013808C06E320000000009 +:1087F0000010000007000032000000000018000018 +:1088000007808232000000000030000007C02C32D8 +:108810000020008000380000070037320000000010 +:10882000CA3D000C078083320000000000000014E5 +:108830001840813A00005C0B040201EC16C06EBCCB +:1088400000000000C00100141840813A0000000040 +:10885000000000F892802F3400C016131200004070 +:10886000A28D39B20000D70B1201004802C080B2BD +:1088700000001613000000800200009000000000BD +:10888000000000280880973200000000000000A4CB +:1088900008808232000000000010006C18206E3A40 +:1088A000000000000018004C08006E320000C70FE6 +:1088B00000A8012019206EFA00001613060102809C +:1088C000821B92BC00000000002001E016206E3CDC +:1088D0000000000000A801E0060092320000690BD1 +:1088E000003801E006408092000000000060006C4B +:1088F00018206E3A000000000068004C08006E323C +:1089000000006B0B9F010004686080BC0000740BCA +:10891000000000181820009C000016138001008041 +:10892000A2802FB600006E0B120100E802C021B237 +:1089300018003600000000F8730A03F90000000078 +:10894000CA70001808006E320000670B0201008038 +:10895000626080BC000016139F000014184081BCA8 +:1089600000000000CA0100F802802F3500A0690B4A +:1089700012010040A28D39B20000161300000080E1 +:10898000020000900000790B80000080A2802FB6CA +:1089900000007C0B04000080A2A081BC0000161324 +:1089A0009F000014184081BC00000000CA0100F8BC +:1089B00002802F3500A0161312000040A28D39B29C +:1089C00000000000000000F8A2802F3500007C0BA2 +:1089D000120100E802C021B218003600000000F8C1 +:1089E000730A03F900000000002801E006000032CD +:1089F00000000000003C00E806408132000000005A +:108A0000003000E00680823200000000002000E01C +:108A10000680813200000000001000E006C08632AF +:108A200000000000001800E006C0843200001613A9 +:108A30000400008032E186B20000860B1F010008AE +:108A4000090000B20000970B0420018002006EBCF8 +:108A500000001613000000800200009010000000CB +:108A600000000010790B1638080000000000000C10 +:108A7000790B16380000000000000004A9002D3713 +:108A80000004010000000004C94D903A02000000FB +:108A9000000000A8820D913700000000000000A82F +:108AA00012A42A3A00008F0B80400280E2017CB6BB +:108AB0000000161304400278B93F7CB000000000AB +:108AC00000000008E9A5903A0000910B9F010010FA +:108AD000190091BC9F000000000000100900363210 +:108AE00000008A0B0401008042E490BC00001613D1 +:108AF00004210180829B90BC0000970B0000008045 +:108B000002000090000000000010006C08006E32AF +:108B1000000000000018004C08006E320000161320 +:108B20000400008032E186B200003210510000D80B +:108B3000020000F200009A0B0050013CA85B809CF0 +:108B400000007F08003001E00600009200009F0B4B +:108B50003E510100A81B80BA00000000DE0000F8B2 +:108B6000F2812F3400000000005801EC06C0EE3204 +:108B700000009F0B80010080328087B6000000005B +:108B8000000000F8E2802F340000E310603001E0C4 +:108B9000060000F20000E90B0000008002000090D7 +:108BA0000000000000000014080000320000A90BC3 +:108BB000040201EC16C06EBC00000000C9010014E4 +:108BC0001840813A00000000C001013808C06E3230 +:108BD00000000000DF0000A4A8608A3C000016131B +:108BE0000F000080020000B000C0AD0B1201004079 +:108BF000A28D39B200001613000000800200009020 +:108C000000000000003000E006000032000000001C +:108C1000DF0000A4A8608A3C000016130F0000804B +:108C2000020000B0000000000000013808C06E32F1 +:108C300000000000DEA8012099226E3A0000161301 +:108C400006010280821B92BC000016139F2001E0E7 +:108C500096226EBC0000B20B80000080F2802FB61E +:108C60000000C70F00000080020000F00000B90BF8 +:108C70001F5001E8060000B20000B50B04000080A0 +:108C800002C083BC0000B90B005001E8F660809C74 +:108C90000800000000400278399AFE3800001613E0 +:108CA0000201008082BA97BC000016130601008002 +:108CB00092BA97BC0800000000400268129AFE3881 +:108CC0000000BE0B2AA901E0060092B2180036008F +:108CD000CA0000F8730A03F91D00BE0B04000080EF +:108CE00002A417B80000BA0B04000014184081BC9D +:108CF00000001613000000800200009000006411C4 +:108D000000000030030038F20000C10B8001008039 +:108D100032802FB63E0016131200002C82CD2EB2E8 +:108D200000000000000000D80280013200C0D20B19 +:108D30001801000CA8CD3EB220800000C30000281E +:108D40000980363200008111000000D8020000D2F4 +:108D50000000C70B04000080028092BC00000000ED +:108D6000000000141840813A0000CC0B0400008081 +:108D7000024081BC18003600000000F8730A03F9B5 +:108D80000000D00B04000014184081BC0000C80B88 +:108D90001200000009C021B20000C90B00000080D1 +:108DA0000200009018003600000000F8738A03F9F2 +:108DB0000000641100000030030038F20000D00B06 +:108DC0008001008032802FB63E0016131200002C66 +:108DD00082CD2EB200000000C30000D80280013214 +:108DE00000C0CC0B1800000CA8CD3EB2000016133A +:108DF0008000008072802FB60020008000000028D4 +:108E0000090037320000661200000008E80100F493 +:108E1000000016131200004802C080B200000000DB +:108E2000000000141840813A0000161380010080F1 +:108E3000A2802FB618003600CA0000F8730A03F9A2 +:108E40001D0016130400008002A417B800001613BA +:108E50009F000014184081BC0000D80B0B0100805B +:108E6000020000B000004B1200000080020000F081 +:108E70000000E00B8001008092802FB62B00E60BF3 +:108E80001201002C82CD2EB20000161300000080CB +:108E9000020000900000E30B1D010080020000B002 +:108EA0000000E60B8001008062812FB600001613DF +:108EB00000000080020000900000E60B80000080AF +:108EC00002812FB62A0016131200002C82CD2EB27A +:108ED00000000000000000F802812F3400007D082F +:108EE00004000080028085BC00005D12000000804C +:108EF000020000F0000069060000001C0880859256 +:108F000000007F0880010080A2802FB600001613A9 +:108F10000000008002000090000016138000008016 +:108F2000E2802FB60000EE0B8001008082812FB618 +:108F3000000016130431018002006EBC00001613FD +:108F400004310080829B82BC000016130201008065 +:108F500012A082BC00000000CE0100D802800132C5 +:108F600000C0F50B1801000CA8CD3EB22080000017 +:108F70000000000808803632000038120000005C53 +:108F80001FC0F5FA0000F30300000080020000900B +:108F90000000161380000080A2802FB60000161378 +:108FA0008000008082802FB600001613040000802D +:108FB000028082BC00000000600000D80200003285 +:108FC0000000FD0B3F00003C084080B20000FD0B9C +:108FD00080010080E2812FB600000000DE0000F872 +:108FE000F2812F3400000000005801EC06C0EE3280 +:108FF000000000004D00000067E0833E000000001C +:10900000000800000700803200000000001000008F +:1090100007C08632000000000018000007C084323C +:109020000000490C04000028D8A082BC00001613E0 +:1090300009010080020000B00000000000000018DC +:10904000D8A0813C00001F0C0400003CD8E083BC89 +:109050000000161304010080028081BC0000090C8E +:109060000400008072802DBC000016131200005016 +:1090700002C038B200001D0C510000D812802D9A99 +:109080000000161312000050F2C138B40000160C94 +:10909000280000D8020000B20000130C80010080FC +:1090A000F2C185B600000F0C1F400284E60100B437 +:1090B0000000130C1D0100F822812FB40000130CD6 +:1090C000000000F862812F950000110C1D01008046 +:1090D000020000B000000000000000F862812F359F +:1090E00000000000004002800240683200001613B9 +:1090F0001F010080020000B00000150C343000E0B9 +:1091000016206EBC0000B40F00000080020000F0CA +:109110000000D50FDA5B01EC0640EDF218003600D6 +:10912000000000F8730A03F900001B0C0400008023 +:1091300072802DBC0000161380010080A2802FB623 +:109140000000160C670000F8A2802FB5000016136F +:10915000120000E802C021B20000161304010080D2 +:1091600072802DBC00000000510000D802000032C7 +:1091700000003E1000000000D82080FA0000FE0B26 +:109180004D00000067E0839E00001613120000509F +:10919000F2C138B400002C0C28000080084000B256 +:1091A0000000290C80010080F2C185B60000250C6A +:1091B0001F400284E60100B40000290C1D0100F8E4 +:1091C00022812FB40000290C000000F862812F9545 +:1091D0000000270C1D010080020000B0000000000C +:1091E000000000F862812F3500000000004002807E +:1091F00002406832000016131F010080020000B018 +:1092000000002B0C343000E016206EBC0000B40FC0 +:1092100000000080020000F00000D50FDA5B01ECD6 +:109220000640EDF200004F0C80000080E2802FB677 +:109230000000300C042100E0068081B200003E10E6 +:1092400000000034080000F200000000002000E0F0 +:109250000680813200000000003C00E806408132B8 +:109260000000360C2A1100E0D6E086BA180036005D +:10927000CA0000F8730A03F91D00360C04010080CF +:1092800002A417B80000320C9F010080180088BCAF +:1092900000001613000000800200009000004B1236 +:1092A00000000080020000F00000641100000030A7 +:1092B000030038F208003A0C231901E8762081B93E +:1092C0003E0016131200002C82CD2EB200003E0C80 +:1092D0001D1800E006C084B200003E0C8000008033 +:1092E00002812FB62A0016131200002C82CD2EB256 +:1092F00000000000000000F802812F34000054102C +:109300000000002CF90100F40000430C0400008070 +:10931000020088BC0000420C1201000009C021B20A +:1093200018003600000000F8730A03F91D00161338 +:109330000401008002A417B8000016130401008085 +:10934000028080BC000000000000007809C5853064 +:10935000000016130201008082BA97BC00001613A9 +:109360000601008092BA97BC0000F6031201006863 +:1093700002C585B0000016130000008002000090B6 +:10938000000000000030007819206E3C0000161329 +:1093900004010080E2A582BC00001613800000805A +:1093A000A2802FB60000161304010080020088BCC2 +:1093B0000000161304010080028080BC0000161318 +:1093C00012000050F2C138B400000000C0010138A2 +:1093D00008C06E320000530C040201EC16C06EBCD3 +:1093E00000C0161312000040A28D39B20000540CC8 +:1093F000C90100140800009200000000453000E0A0 +:10940000060000320000600C28000008E80100B4EB +:1094100000005D0C80010080F2C185B60000590C8F +:109420001F400284E60100B400005D0C1D0100F83D +:1094300022812FB400005D0C000000F862812F959E +:1094400000005B0C1D010080020000B00000000065 +:10945000000000F862812F3500000000004002800B +:1094600002406832000016131F010080020000B0A5 +:1094700000005F0C8000008042812FB60000B40F16 +:1094800000000080020000F00000D50FDA5B01EC64 +:109490000640EDF200200080DF000028090037328E +:1094A00000006612DE0000D8028001F208004B12B4 +:1094B000001801E8762081F90000641100000030F6 +:1094C000030038F20000660C8001008032802FB665 +:1094D0003E0016131200002C82CD2EB200006B0C41 +:1094E000290801E406C02DB20000700C1D000080A8 +:1094F000020000B00000700C8000008002812FB6D6 +:109500002A0016131200002C82CD2EB20000700C1F +:10951000000000F802812F9400006D0C1201000081 +:1095200009C021B218003600000000F8730A03F9E0 +:109530001D006F0C0401008002A417B800006C0C21 +:10954000000000141840819C2B0016131200002C00 +:1095500082CD2EB2000055100000002CF90100F45D +:109560000000730C04010080024081BC180036002A +:10957000000000F8730A03F90000161312000048F7 +:1095800002C080B2000000000000007809C58530EC +:10959000000016130201008082BA97BC0000161367 +:1095A0000601008092BA97BC0000F6031201006821 +:1095B00002C585B000001613000000800200009074 +:1095C000000016138000008082802FB60000161362 +:1095D00004310080829B82BC0000161302000080D0 +:1095E00012A082BC0000161304000080028082BC1E +:1095F0002500000000000010090036321000801223 +:1096000000000014A96080D900000000000000D80C +:109610000280013200C0840C1801000CA8CD3EB2BB +:109620002080000000000008088036320000381258 +:109630000000005C1FC0F5FA0000F303000000808A +:109640000200009000C00000000000F8A28D2F3141 +:1096500000000000000000D80200003200000000FE +:1096600000000000078081320000000000080000B8 +:1096700007008032000000000010000007C08632A2 +:10968000000000000018000007C08432000016131C +:1096900012000050F2C138B40000900C800000802D +:1096A00082802FB60000000000000068A860803CA7 +:1096B000000000000000003C084080320000D40F91 +:1096C00000000004088082F20000910C12010000EA +:1096D00009C021B218003600000000F8730A03F92F +:1096E0001D00940C0400008002A417B8000016139B +:1096F00080010080A2802FB60000900C000000F8CE +:10970000A2802F9500000000000000006820803A31 +:1097100000009A0C0400002868A082BC0000161308 +:109720000C000080020000B00000161380000080D2 +:10973000E2802FB600003E1000000080020000F022 +:109740000000860C000000D80200009200001613F2 +:1097500080000080A2802FB600000000000000D82A +:10976000028001320020008000000028090037320A +:109770000000621200000008E80100F41800360042 +:10978000CA0000F8730A03F90000A50C040201ECFA +:1097900016C06EBC00000000C00100F892802F349B +:1097A00000C0A30C12010040A28D39B200001613B4 +:1097B00000000080020000902B00A50C1201002C7C +:1097C00082CD2EB20000161300000080020000902F +:1097D000000016131F010080020000B00000A80C5A +:1097E0008001008082812FB60000161304310180B1 +:1097F00002006EBC00000000000000D802800132B0 +:109800000000AB0C12010060084023B20082B40CCF +:1098100000000008A88D809200001613120000249A +:10982000080023B2000016131200002008C023B263 +:109830000000161312000018088023B200C0C90CE3 +:109840001801000CA8CD3EB20000AE0C120000388A +:10985000028081B2000016131200003C020082B2A6 +:109860000000161312000030024082B200001613EE +:1098700012000034020086B22080000000000008C0 +:10988000A88D80320000BC0C80010080F2C185B63A +:109890000000B80C1F400284E60100B40000BC0CBC +:1098A0001D0100F822812FB40000BC0C000000F85C +:1098B00062812F950000BA0C1D010080020000B0EB +:1098C00000000000000000F862812F350000000059 +:1098D0000040028002406832000016131F01008021 +:1098E000020000B032000000000000100900363213 +:1098F0000000801200000014090080D2000016133E +:109900001200006802C585B0000000000000007869 +:1099100009C58530000016130201008082BA97BC89 +:10992000000016130601008092BA97BC0000C40C18 +:109930003400005C1FC0F5BA0000B40F00000080C6 +:10994000020000F00000C60C8000008092802FB65C +:1099500000007F08003000E00600009200007F0851 +:10996000120100E802C021B218000000000000F857 +:10997000730A03397F083600000000C002003692E7 +:1099800000000000450000D8024000320000000046 +:10999000410000000780863200000000000800003F +:1099A00007008032000000000010000007408232F3 +:1099B00000000000001800000700863200001613A7 +:1099C00012000050F2C138B400000000000000781E +:1099D000388087350000161380000080728087B6BB +:1099E0000000000000A001E016206E3A0000000018 +:1099F0000000007809C585300000000000A801E0E3 +:109A000016206E3C08000000D2010078E9E5833999 +:109A1000180016131F410284E6A197B90000D90C63 +:109A2000365101E816E083BC0000D90C1D0100800E +:109A3000020000B000000000000000F862812F3535 +:109A4000000016139F2001E0064080B20000DC0CED +:109A50008001008082812FB600000000003001E00C +:109A60000640803200000000000000D80280013271 +:109A70000000DF0C34180000078081B20000B40F32 +:109A800000000080020000F010004B1200300000C7 +:109A900017E02CF900100080003800000700373272 +:109AA0000000641100000030030038F20000E40CF4 +:109AB0008001008032802FB63E0016131200002C69 +:109AC00082CD2EB20000E90C29210000070082B2ED +:109AD0000000E70C1201000009C021B21800360096 +:109AE000000000F8730A03F91D00EF0C0401008068 +:109AF00002A417B80000E50C000000140800009252 +:109B00000000EC0C1D3100E0060000B20000EF0C7C +:109B10008001008062812FB60000161300000080D3 +:109B2000020000900000EF0C8000008002812FB640 +:109B30002A0016131200002C82CD2EB20000000065 +:109B4000000000F802812F3400005D120000002C9C +:109B5000F90100F400005410000000F8A2802FF476 +:109B60000000F40C04000080024081BC0000F40CF2 +:109B7000120100E802C021B218003600000000F80F +:109B8000730A03F90000F6031201004802C080B214 +:109B90000000161300000080020000900000FE0C80 +:109BA00080010080F2C185B60000FA0C1F400284DB +:109BB000E60100B40000FE0C1D0100F822812FB464 +:109BC0000000FE0C000000F862812F950000FC0CE4 +:109BD0001D010080020000B000000000000000F83D +:109BE00062812F3500000000004002800240683290 +:109BF000000016131F010080020000B00000000DDD +:109C000004000080024086BC0000AB1200900108F6 +:109C100009006EF20000DF1200000080020000F078 +:109C20000000070D330100D8028001B20000070DCB +:109C300080010080B20172B60000070D9FF0018024 +:109C400082DB87BC0000070D9FF8018022216EBCDB +:109C50000000000000E801E00600EE320000000015 +:109C600000F001E006C0873208000000001801E89B +:109C70007620813900000D0D80010080D2802FB642 +:109C800000000D0D04B0008002006EBC000000005A +:109C9000CD0000F872812F343D000D0D1201002C13 +:109CA00082CD2EB20000161300000080020000904A +:109CB00000001C0D270901E406C02DB200C0140DE0 +:109CC0001801000CA8CD3EB2000000000000007892 +:109CD00009C58530000016130201008082BA97BCC6 +:109CE000000016130601008092BA97BC00001613FC +:109CF0001200006802C585B020807F0800000008BF +:109D0000088036922C000000000000100900363256 +:109D1000000080120098011409006ED200000000BB +:109D2000004001E00640883200000000D508000035 +:109D300007408832000000000030000007C02C32CD +:109D400000400080CA3900000700373200001613B7 +:109D50001200004802C080B200600000000000084D +:109D6000088036320000200D1D000080020000B087 +:109D70000000200D8000008002812FB62A001613FB +:109D80001200002C82CD2EB200000000000000F86E +:109D900002812F34000055100000002CF90100F45E +:109DA000000000000000007809C58530000016138F +:109DB0000201008082BA97BC0000161306010080E1 +:109DC00092BA97BC0000F6031201006802C585B084 +:109DD0000000161300000080020000900000000048 +:109DE000545401FC02C06E3200000000000000D894 +:109DF0000280013200C02C0D1801000CA8CD3EB22B +:109E00002080000000000008088036320000F303C4 +:109E10001201002C72E02EB2000016130000008028 +:109E200002000090000016138001008082812FB68E +:109E300000008C120020001808006EF200001613BB +:109E40001F30002808006EB200000000000000A4CF +:109E500008808232000000000010006C08006E32A2 +:109E6000000000000018004C08006E3200001613BD +:109E70000400008032E186B2000032100000008051 +:109E8000020000F00000360D0050013CA85B809CF1 +:109E90000000161300000080020000900000000087 +:109EA00000500100A81B803A000000000000008064 +:109EB0000800003200000000510000D8020000320B +:109EC000000000004D00000067E0833E000000003D +:109ED00000080000070080320000000000100000B1 +:109EE00007C08632000000000018000007C084325E +:109EF00000006D0D04000028D8A082BC00001613DD +:109F000009010080020000B00000000000000018FD +:109F1000D8A0813C0000540D0400003CD8E083BC74 +:109F20000000161304010080028081BC0000450D72 +:109F30000400008072802DBC000016131200005037 +:109F400002C038B200004D0D510000D812802D9A89 +:109F50000000161312000050F2C138B41800360089 +:109F6000000000F8730A03F900004B0D04000080A4 +:109F700072802DBC0000161380010080A2802FB6D5 +:109F80000000460D670000F8A2802FB500001613F0 +:109F9000120000E802C021B2000016130401008084 +:109FA00072802DBC00000000510000D80200003279 +:109FB0000000520D2A010000D82080BA0000510D87 +:109FC0001201000009C021B218003600000000F89C +:109FD000730A03F900000000000000D80240843238 +:109FE0001D0016130400008002A417B800004610DC +:109FF0000060006C08006EF200003A0D4D00000099 +:10A0000067E0839E0000161312000050F2C138B4BE +:10A0100018003600000000F8730A03F91D005B0DFC +:10A020000400008002A417B800001613800100800D +:10A03000A2802FB60000550D670000F8A2802FB552 +:10A04000000016131200000009C021B21D001613F3 +:10A050000401008002A417B8080000000040027844 +:10A06000399AFE38000016130201008082BA97BCAC +:10A07000000016130601008092BA97BC0800161360 +:10A0800012400268129AFEB8000016130B000080FE +:10A09000020000B00000641100000030030038F23C +:10A0A000000016131F00006CD8E086BA00003210C2 +:10A0B000510000D8020000F20000650D0000003CD5 +:10A0C00008408092000016130000008002000090FB +:10A0D0000000390D04010080028081BC00006B0D7E +:10A0E00080010080A2802FB600006A0D12010000DE +:10A0F00009C021B218003600000000F8730A03F905 +:10A1000000000000000000D8024084321D00161339 +:10A110000400008002A417B8000046100060006C24 +:10A1200008006EF200003A0D4D00000067E0839ECB +:10A130000000161380000080A2802FB600000000EF +:10A14000C001013808C06E3200000000453000E058 +:10A15000060000320000161312000050F2C138B49D +:10A160000000750D040201EC16C06EBC000000007A +:10A17000C90100141840813A00C0750D1201004059 +:10A18000A28D39B20000161300000080020000907A +:10A1900000C00000000000F8A28D2F310000000078 +:10A1A00000A8012099226E3A0000161306010280D1 +:10A1B000821B92BC000016139F2001E096226EBC09 +:10A1C00000007B0D80000080F2802FB60000C70FDA +:10A1D00000000080020000F000007F0D0400003C41 +:10A1E000D8E083BC00007E0D9F3101E096226EBC5A +:10A1F00000000000003001E0060000320000860D83 +:10A20000005001E8F660809C0800000000400278E1 +:10A21000399AFE38000016130201008082BA97BCFA +:10A22000000016130601008092BA97BC08000000D7 +:10A2300000400268129AFE380000850D9F3101E04F +:10A2400096226EBC00000000003001E006000032E3 +:10A2500000000000005001E806000032000000008D +:10A2600000A801E00600923218003600000000F855 +:10A27000730A03F91D008B0D0400008002A417B8B7 +:10A280000000870D04000014184081BC0000161364 +:10A290000000008002000090000016138000008083 +:10A2A00072802FB600000000000000D8028001324A +:10A2B00000200080000000280900373200006612EC +:10A2C00000000008E80100F4000016131200004826 +:10A2D00002C080B20000641100000030030038F2B8 +:10A2E0000000930D23010014184081BA3E0016139C +:10A2F0001200002C82CD2EB20000161380010080C7 +:10A30000A2802FB618003600CA0000F8730A03F9BD +:10A310001D0016130400008002A417B800001613D5 +:10A320009F000014184081BC0000940D0B010080B8 +:10A33000020000B000004B1200000080020000F09C +:10A3400000009C0D2931010C09006EB22B007D0824 +:10A350001201002C82CD2EB20000161300000080E6 +:10A36000020000900000BE0F000C020009806EF297 +:10A370000000A50D000000800200009000005D12AA +:10A3800000000080020000F0000000000000001C3F +:10A39000080090320000A40D04000028098080B25B +:10A3A00000008111000000D8020000D20000A40DBE +:10A3B00004000080028092BC18003600000000F803 +:10A3C000730A03F900006806000000080800009204 +:10A3D0000000A80D1D010080020000B000007D08F3 +:10A3E0008001008062812FB60000161300000080FB +:10A3F0000200009000007D088000008002812FB6DE +:10A400002A0016131200002C82CD2EB200007D0807 +:10A41000000000F802812F940000161380010080D4 +:10A4200082812FB60000161304000018094081B283 +:10A430000000E30F00000080020000F00000C70FE2 +:10A4400000A8012009006EF2000000000030010C9D +:10A4500009006E320000BE0F000C020009806EF28F +:10A4600000007F08000000800200009000004B12F6 +:10A4700000000080020000F000005D12000000807B +:10A48000020000F0000068060000001C0800909226 +:10A4900000000000545401FC02C06E32000016138C +:10A4A0008001008082812FB6000016131F000080FB +:10A4B000020000B010000000000000A8780B163861 +:10A4C00008000000000000AC780B16380000000007 +:10A4D000000000B0A8002D3700040100000000B00B +:10A4E000C80D8B3A00000000005001B408806E32A5 +:10A4F0000000C70D0431019008006EB20200000098 +:10A50000000000C8828D8A3700000000000000C8EB +:10A51000C2A22C3A1800C50D86410278880D78B683 +:10A520000000161304000080A2E28ABC000016138B +:10A5300004410280B23F78B00000BE0D9F0100A828 +:10A5400018808ABC9F00BE0D000000A8080036924B +:10A550000000000000400204B83F78300000DA0D2F +:10A5600000000004D862809C00001613020C0280D8 +:10A57000A21B89BC000016138000008082802FB6C9 +:10A5800002000000000000C8828D8A370000000031 +:10A59000000000C8C2A22C3A1800D00D86410278F3 +:10A5A000880D78B60000161304000080A2E28ABC71 +:10A5B0000000161304410280B23F78B00000C90DBC +:10A5C0009F0100A818808ABC9F00C90D000000A848 +:10A5D000080036920000D30D28400204B83F78B03E +:10A5E00000000000C8010004D862803C000016137F +:10A5F0009F000080024080B20000D70D0201009051 +:10A60000182089BC00000000000000B408000032DF +:10A610000000C90D9F0100A818808ABC9F00C90DC9 +:10A62000000000A8080036920000DA0D0400009037 +:10A63000182089BA000016139F000004486280BCED +:10A6400000001613900000B448628BBA0300161382 +:10A6500004400200081EFFB80000E20D00000000E8 +:10A66000D822809A0000090E04000080A2E28ABC71 +:10A6700002000000000000C8828D8A370000000040 +:10A68000000000C8C2A22C3A1800070E86400278CB +:10A69000880D78B60000161304400204B83F78B065 +:10A6A0000300161304400200081EFFB83800000023 +:10A6B0000000001009003632000080120000001473 +:10A6C000090080D20000E80D12010060084023B2AA +:10A6D0000082000000000008088036320000F3030A +:10A6E0001201002C72E02EB2000016130000008050 +:10A6F000020000900000161312000024080023B28C +:10A70000000016131200002008C023B20000161328 +:10A7100012000018088023B200000000000000D8DA +:10A720000280013200C0F20D1801000CA8CD3EB22B +:10A730000000EC0D12000038028081B200001613F8 +:10A740001200003C020082B200001613120000301A +:10A75000024082B20000161312000034020086B2DA +:10A760002080E60D000000080880369200000000FE +:10A77000000000D802000032000000000038020093 +:10A78000B81B803A00000000643001E016206E3AE9 +:10A7900000000000000000000740803200000000C0 +:10A7A00000080000070080320000000000100000D8 +:10A7B00007408232000000000018000007008632C7 +:10A7C0000000161312000050F2C138B4000000005F +:10A7D000000000D8028001320000000000180000D4 +:10A7E0000780813200000000002000000700823254 +:10A7F000100000000030000017E02C3900000000BD +:10A8000000380000F7010B340000010E80010080C9 +:10A81000328087B60000000000380000B7017034B5 +:10A820000000000000000008E80100340000130EE2 +:10A83000020C0280A21B89BC18003600000000F840 +:10A84000730A03F90000641100000030030038F2BD +:10A85000000016131200004802C080B21800360033 +:10A86000000000F8730A03F90000DC0D9F0100A846 +:10A8700018808ABC9F00DC0D000000A808003692FA +:10A8800028000C0E0401008082CD81BC0000000075 +:10A890000020017809006E320000161304010080C8 +:10A8A00042A297BC00000E0E8001008032802FB6BD +:10A8B0003E0016131200002C82CD2EB20000100EA6 +:10A8C0001D010080020000B000007D08000000F8BB +:10A8D00062812F9500007D088000008002812FB6E4 +:10A8E0002A0016131200002C82CD2EB200007D0823 +:10A8F000000000F802812F940000000000380000E2 +:10A90000C70170340000641100000030030038F209 +:10A910000800170E231901E8762081B93E001613AE +:10A920001200002C82CD2EB20000190E1D010080F5 +:10A93000020000B000001C0E000000F862812F959C +:10A9400000001C0E8000008002812FB62A00161322 +:10A950001200002C82CD2EB200000000000000F892 +:10A9600002812F340000161380000080A2802FB6D1 +:10A97000000054100000002CF90100F40000200E2B +:10A98000120100E802C021B218003600000000F8F1 +:10A99000730A03F9000016131200004802C080B2C7 +:10A9A0000000F603000000F8A2802F9400000000D1 +:10A9B000000000D8028001320000000000300028B2 +:10A9C00008006E3200000000545401FC02C06E32D8 +:10A9D00000C02E0E1801000CA8CD3EB22080000051 +:10A9E000000000280980363200008111000000D8E4 +:10A9F000020000D200002B0E04000080028092BCF6 +:10AA000018000000000000F8730A03392C0E36000D +:10AA1000000000C00200369218003600000000F866 +:10AA2000738A03F900000000000000D802800132A0 +:10AA300000C02B0E1800000CA8CD3EB200200084F0 +:10AA400000000028090037320000621200000008F0 +:10AA5000E80100F400007D08000000800200009082 +:10AA600000000000000000D8028001320000000059 +:10AA7000545401FC02C06E3200C0370E1801000CA5 +:10AA8000A8CD3EB2208000000000000808803632C9 +:10AA90000000EF031201002C72E02EB2000016132A +:10AAA00000000080020000900000F3110000002868 +:10AAB000090002F200003F0E0000005C0800009256 +:10AAC00000000000000000D80280013200000000F9 +:10AAD000545401FC02C06E3200C03F0E1801000C3D +:10AAE000A8CD3EB220800000000000080880363269 +:10AAF000000038120000005C1FC0F5FA0000F303EC +:10AB000000000080020000900000000000300028DB +:10AB100008006E320020008400000028090037324F +:10AB20000000621200000008E80100F40000440E7A +:10AB300000000080020000900000000000000008FB +:10AB40000800003200004A0E0400008002C085B2F6 +:10AB500000004A0E80000080F2C185B60000490E58 +:10AB60001C41028006C085B20000000000000068A1 +:10AB700002C5853000000000000000701F00F73A99 +:10AB800000000000000000F822812F340000D00EE9 +:10AB900080010080A2802FB618000000000000F89D +:10ABA000730A0339D00E3600CA0000C00200369284 +:10ABB0000000990E8001008082812FB60000A10E56 +:10ABC0001F20010809006EB20000990E0430010830 +:10ABD000899B90BC0000560E0431018002006EBCBF +:10ABE0000000321000000080020000F00000540E4F +:10ABF0000050014808806E9200001613000000808B +:10AC00000200009000000000000000042861803C69 +:10AC100000006B0E000000002821809A000016132F +:10AC20009F000080028090B2000032100030014886 +:10AC300008006EF200005A0E00500104A85B809CD0 +:10AC400000001613000000800200009000000000C9 +:10AC500000500100A81B803A0000680E0700004861 +:10AC600018A084BC0800000000400200189AFE38BA +:10AC70000000161302010080823A80BC0000161307 +:10AC800006010080923A80BC0000000000000068CD +:10AC9000020080320000321000000080020000F04C +:10ACA0000000630E000000800200009000001613F8 +:10ACB00000000080020000900000680E07000048BD +:10ACC00018A084BC0800000000400200189AFE385A +:10ACD0000000161302010080823A80BC00001613A7 +:10ACE00006010080923A80BC0000600E00000068FF +:10ACF0000200809200006B0E0400004818A084BA85 +:10AD0000000016139F000004286180BC00000000B2 +:10AD1000000000002821803A00000000005401FCDF +:10AD200002C06E320000740E12010060084023B2AF +:10AD300000820000D6010008088036320300161396 +:10AD400004400200381AFFB8030000000000007839 +:10AD50000960803918000000D241028CE6A19739C1 +:10AD600000000000005001E8068084322900F3034F +:10AD70001201002C82CD2EB20000161300000080BC +:10AD8000020000900000161312000024080023B2F5 +:10AD9000000016131200002008C023B20000161392 +:10ADA00012000018088023B200000000000000D844 +:10ADB0000280013200C07F0E1801000CA8CD3EB207 +:10ADC00020800000D6010008088036320000790E8D +:10ADD00012000038028081B2000016131200003CFD +:10ADE000020082B20000161312000030024082B24C +:10ADF00000006E0E12010034020086B2000016132D +:10AE00000000008002000090080000000040025C8A +:10AE1000189AFE38000000000000004808000032C8 +:10AE200000000000000000D8020000320000000016 +:10AE30000000000007408032000000000008000011 +:10AE4000070080320000000000100000074082323E +:10AE500000000000001800000700863200001613F2 +:10AE600012000050F2C138B400000000D60100D832 +:10AE700002800132000000000018000007808132CB +:10AE800000000000002000000700823210000000D7 +:10AE90000030000017E02C3900008E0E800000808A +:10AEA000328087B60010008000380000070037327B +:10AEB00000008F0E0000008002000090001000884B +:10AEC000003800000700373218003600000000F894 +:10AED000730A03F9000000000000006802C0853218 +:10AEE000000016130201008082FA85BC00001613D0 +:10AEF0000601008092FA85BC0000000000000008F6 +:10AF0000E8010034000016131200004802C080B2AD +:10AF100018003600000000F8730A03F90000321030 +:10AF200000000080020000F000006B0E00000080B6 +:10AF3000020000900000A10E0000008002000090BE +:10AF40000000321000000080020000F000009C0EA3 +:10AF500000380200B81B809C0000A10E0000008099 +:10AF600002000090050000000000006802A0FE380A +:10AF7000050000000000007809A0FE38000016134C +:10AF80000201008082BA97BC0000161306010080FF +:10AF900092BA97BC0000990E00400280024068926D +:10AFA00000000000CA0100D8020000320000A50E17 +:10AFB00004B8018002006EBC000016139FB801782F +:10AFC000891BEEBC0000000000B801E0861BEE3CCF +:10AFD0004C000000000000000700363200000000B6 +:10AFE00000000078A9002D37B4040100000800001B +:10AFF000C78D973A000000000000007899C02C37F8 +:10B00000B400000000000078898D973A0000161304 +:10B010000210000087BF97BA00000000001800006F +:10B020000740FE320000161312000048F2C138B487 +:10B030000000AD0EB6000080020000B00020161324 +:10B0400012000064A2CD2CB200000000A600008017 +:10B05000020000300000B20E80010080A2802FB6F6 +:10B0600018003600CA0000F8730A03F900007D08D2 +:10B07000005401FC02C06E92000016138001008093 +:10B0800062812FB6000016138001008082812FB6E6 +:10B09000000016131F000080020000B00000000036 +:10B0A000005401FC02C06E320000BB0E12010060B1 +:10B0B000084023B2008200000000000808803632F9 +:10B0C0002900F3031201002C82CD2EB200001613CA +:10B0D00000000080020000900000161312000024FF +:10B0E000080023B2000016131200002008C023B28B +:10B0F0000000161312000018088023B200000000A0 +:10B10000000000D80280013200C0C60E1801000CF9 +:10B11000A8CD3EB220800000000000080880363232 +:10B120000000C00E12000038028081B20000161329 +:10B130001200003C020082B2000016131200003020 +:10B14000024082B20000B90E12010034020086B241 +:10B150000000161300000080020000900000321072 +:10B1600000000048080000F20800C90E0040025C20 +:10B17000189AFE980000161300000080020000904C +:10B180000000000000500100A81B803A0000810E62 +:10B190000000004808000092000016131F01008004 +:10B1A000020000B000000000005401FC02C06E323A +:10B1B0000000F31100000028098002F20000AD0E2B +:10B1C00000000080020000900000F3110000002841 +:10B1D000090002F20000D30E9A0100F862812FB438 +:10B1E00010240000000000F8A28D2F3100000000A4 +:10B1F00000D601EC06C06E342E007D081201002C32 +:10B2000082CD2EB2000016130000008002000090D4 +:10B210000000161304A9018002006EB20000DE0EC9 +:10B2200080010080F2C185B60000DA0E1F40028462 +:10B23000E60100B40000DE0E1D0100F822812FB4EB +:10B240000000DE0E000000F862812F950000DC0E89 +:10B250001D010080020000B000000000000000F8A6 +:10B2600062812F35000000000040028002406832F9 +:10B27000000016131F010080020000B00000E00E65 +:10B2800004980164881B87BC0000AB120090010881 +:10B2900009006EF20000DF1200000080020000F0E2 +:10B2A000000000000000007809C58530000016137A +:10B2B0000201008082BA97BC0000161306010080CC +:10B2C00092BA97BC000016131200006802C585B040 +:10B2D00000000000000000F8D2802F3500007F0839 +:10B2E000370000F8D2812FB400000000000000F801 +:10B2F00072812F343D007F081201002C82CD2EB2C6 +:10B300000000161300000080020000900000F20E02 +:10B3100080010080F2C185B60000EE0E1F4002845D +:10B32000E60100B40000F20E1D0100F822812FB4E6 +:10B330000000F20E000000F862812F950000F00E70 +:10B340001D010080020000B000000000000000F8B5 +:10B3500062812F3500000000004002800240683208 +:10B36000000016131F010080020000B00000000062 +:10B3700000D401EC16C06E3A000000000000007816 +:10B3800009C58530000016130201008082BA97BCFF +:10B39000000016130601008092BA97BC0000161335 +:10B3A0001200006802C585B000007F0804B000806C +:10B3B00002006EBC37007F081201002C82CD2EB235 +:10B3C0000000161300000080020000900000020F31 +:10B3D00080010080F2C185B60000FE0E1F4002848D +:10B3E000E60100B40000020F1D0100F822812FB415 +:10B3F0000000020F000000F862812F950000000F8E +:10B400001D010080020000B000000000000000F8F4 +:10B4100062812F3500000000004002800240683247 +:10B42000000016131F010080020000B000000F0F83 +:10B43000000000800200009000000B0F80010080DF +:10B44000F2C185B60000070F1F400284E60100B478 +:10B4500000000B0F1D0100F822812FB400000B0F1C +:10B46000000000F862812F950000090F1D01008087 +:10B47000020000B000000000000000F862812F35DB +:10B4800000000000004002800240683200001613F5 +:10B490001F010080020000B000000F0F370000F80D +:10B4A000D2812FB400000000000000F872812F3418 +:10B4B0003D000F0F1201002C82CD2EB2000016139A +:10B4C00000000080020000900000000000D401ECA9 +:10B4D00006000032000000000000007809C5853039 +:10B4E000000016130201008082BA97BC00001613F8 +:10B4F0000601008092BA97BC00007F081201006824 +:10B5000002C585B000001613000000800200009004 +:10B5100000007D0880010080F2812FB600007D08C8 +:10B5200080000080E2812FB60000190F80000080AB +:10B5300002812FB6000016131D010080020000B02A +:10B54000000016130458018002C06EBC00007D0884 +:10B55000085901EC06FB6EBC00000000000000D89A +:10B560000280013200000000545401FC02C06E321F +:10B5700000C0220F1801000CA8CD3EB20000000050 +:10B58000005801EC06FB6E3A208000000000000825 +:10B59000088036320000EF031201002C72E02EB258 +:10B5A00000001613000000800200009000005D12F1 +:10B5B000000000F8E2812FF40000250F060301804F +:10B5C00012C06EBC190068060000001C080036920C +:10B5D0001A0068060000001C0800369200001613CE +:10B5E00080010080F2812FB60000161380010080D8 +:10B5F000E2812FB60000161304550180B2DB2FBC88 +:10B6000000C00000000000F8A28D2F3100000000F3 +:10B61000000000D802800132002000C00000002895 +:10B6200009003732000000000030002808006E32A8 +:10B6300000000000453000E0060000320000621209 +:10B6400000000008E80100F40000340F040201ECDF +:10B6500016C06EBC00000000C90100141840813AF9 +:10B6600000000000000000F802802F3400C0340FFA +:10B6700012010040A28D39B20000161300000080B4 +:10B680000200009018003600CA0000F8730A03F99F +:10B690000000340F9F010014184081BC00007F0897 +:10B6A0008001008092802FB62B007F081201002CB1 +:10B6B00082CD2EB200001613000000800200009020 +:10B6C000000016131F0100D8028001B20000000024 +:10B6D000005401FC02C06E3200C0440F1801000C7F +:10B6E000A8CD3EB22080000000000028098036323C +:10B6F00000008111000000D8020000D20000410FBC +:10B7000004000080028092BC18000000000000F8D5 +:10B71000730A0339420F3600000000C0020036925F +:10B7200018003600000000F8738A03F900000000DA +:10B73000000000D80280013200C0410F1800000C48 +:10B74000A8CD3EB200005D12000000D8024000F219 +:10B7500000F04C0F1D400200A80D68B10000161348 +:10B760000B000080020000B0000016131E4002848F +:10B77000060000B200004A0F12000028020580B047 +:10B780000800450F000000F8234001990000450F14 +:10B7900012010068020580B000001613000000804E +:10B7A0000200009000004C0FB5000080020000B0C5 +:10B7B00000000000A50080A0360B6A3500000000E4 +:10B7C0000000005009C02932000000000056012886 +:10B7D00008C06E320000000000000078390B2E32E5 +:10B7E0000000000000000020F38197340000560F95 +:10B7F00004000078D90130B600001613040100805F +:10B80000328097BC0000000000000000B905303015 +:10B8100018000000000000F803A403390000000035 +:10B8200000000034330B2F3200006F0F040000784B +:10B83000D90130B60000161304010080328097BC95 +:10B840000000000000000078B905303000005D0FF6 +:10B850000400008042E529BC00000000000000F860 +:10B860000200003218000000000000F8738A02395C +:10B87000000000000000009C028097320A000000D7 +:10B880000000001009003632000080120000001491 +:10B8900009C029D20000690F25010008080000B284 +:10B8A0000000161380000080F20180B60000000046 +:10B8B0000000002C090580300000161302010080F2 +:10B8C00082FA92BC000016130601008092FA92BC24 +:10B8D0000000670F12000028020580B00800690F01 +:10B8E000000000F8234001990000690F1201006870 +:10B8F000020580B0000016130000008002000090D6 +:10B9000000006D0F0400008002402FBC000000000A +:10B910000000007809002C32210316130400008077 +:10B92000828D97BC9603161304000080828D97BC0D +:10B930000000161380000080A2802FB60000560F72 +:10B94000000000F4020000920000730F0400008069 +:10B9500042E529BC00000000000000F802000032AF +:10B9600018000000000000F8738A0239000000008F +:10B970000000009C0200953200000000CA0100D8BF +:10B9800002800132000000000030000007C02C32AD +:10B99000001000A00038000007003732000000004F +:10B9A000002000000700EE32000000000038000C0C +:10B9B00007808232000016131200004802C080B2D5 +:10B9C0000000F60300000008E80100940000930F57 +:10B9D00002000080A24280BC0000930F8000008023 +:10B9E000F2C185B60000930F1F400208B9BF68B0CE +:10B9F0000000830F80410280E28168B608000000E9 +:10BA00000000001079618039000016139F2001E0CA +:10BA100016206EBA00000000000000F822812F34CA +:10BA20001800000000400288E62191390000000063 +:10BA30000001005C08000072000000000000000C23 +:10BA400019A0903A0000930F06010080D2FF90BC2D +:10BA50000000870F2C410278F98168B400000000D3 +:10BA600000000078B9819734010000000000001048 +:10BA700009003632000080120000001459C085D73A +:10BA80000300000000400200291AFF3800000000F7 +:10BA900000380200B91B903A00000000D241028831 +:10BAA00016A0973A00000000450000D8024000327E +:10BAB000000016139F2001E016206EBA000000005F +:10BAC0000000000007408032000000000008000075 +:10BAD0002724903A000000000010000007008A327E +:10BAE0000000000012010058F2C138740000161363 +:10BAF00000000080020000900800A20F1A0000342D +:10BB0000796180B90000AE0F1E010080020000B014 +:10BB10000000AE0F1F400200094068B20000950F00 +:10BB200080000080E20190B6000016133800005437 +:10BB30001F40F5BA0000000000000008B93F903037 +:10BB400000000000002801E026246E3A08001613C9 +:10BB50001E00000009A4FEB83D0000000000001017 +:10BB6000090036320000801200000014090090D253 +:10BB70000000000000000078090590300000161356 +:10BB80000201008082BA97BC0000161306010080F3 +:10BB900092BA97BC0000AE0F12010068020590B087 +:10BBA0000000161300000080020000900000AE0F9D +:10BBB0008000008082812FB60000AC0F1F41020080 +:10BBC000094068B200000000002801E016206E3A2B +:10BBD0000000A80F80010080F2C185B600000000BF +:10BBE00000400284E60100340000000000000080F4 +:10BBF0000200003000000000004002800240683275 +:10BC000000001613380000541F40F5BA0000161348 +:10BC10009F2001E016206EBA0000000000010080A5 +:10BC2000020000700000A30F80000080E20190B6C7 +:10BC30000000970F000000541F40F59A000000001C +:10BC40000000005C08000032000016139F2001E095 +:10BC500016206EBA00000000000000F822812F3488 +:10BC6000180000001E410284E6619379000016135B +:10BC700000000080020000900000FFFF0000008034 +:10BC8000020000900000B90F1D5D01EC16C06EBCF3 +:10BC9000000000000F010080020000700000161379 +:10BCA000045D018002C06EBC00001613800000809D +:10BCB00042812FB600000000000100F8B2802F740E +:10BCC000000000000F010080020000700000B70FAC +:10BCD000045E01EC16C06EBC00000000005C01ECCC +:10BCE00006400032000000000001008002000070E9 +:10BCF0000000FFFF00000080020000900000000034 +:10BD00000420018082DB907C000016130420018057 +:10BD100002006EBC000016131F000080020000B07D +:10BD200000000000020C0280A2DB907C0000C40F27 +:10BD300006210180821B90BC2700C50F0000000077 +:10BD40000900369228000000000000000900363289 +:10BD5000000000000000008812002C3A0000FFFFE5 +:10BD600000000080020000900600000000000010AB +:10BD7000090036320000801200000014090092D23F +:10BD80000000161304000080020092BC00000000B6 +:10BD90002FA00178891B927A0000000006880178A4 +:10BDA000899B977C000000000034020409C06E3DAE +:10BDB00000000000000C020019A46E370000D20F32 +:10BDC0000200008002A497BC0000D20F0200008095 +:10BDD000020000B00100000000000078898D973754 +:10BDE0000000000002010280829B977C000000009E +:10BDF000000100F8F2802F740000FFFF00000080B7 +:10BE00000200009000000000DA5B01EC0640ED3219 +:10BE10002D000000000000100900363200008012E2 +:10BE2000005C011409806ED20000DA0F040100806A +:10BE3000024086BC0000000000A001E016206E3A1F +:10BE40000000DC0F00D401EC060000920000AB12F1 +:10BE50000090010809006EF20000000000A001E05F +:10BE600016206E3A0000DF12330100F882802FB4F2 +:10BE70000000DF129FF0018082DB87BC0000DF1230 +:10BE80009FF8018022216EBC0000000000E801E064 +:10BE90000600EE320000000000F001E006C087322C +:10BEA0000000DF1200000080020000900000FFFF91 +:10BEB00000000080020000900000161308000080BF +:10BEC000028091BC11000000000000100900363211 +:10BED0001000801200500114A99B91D91500000098 +:10BEE000000000100900363210000000002001148C +:10BEF000890D6E370000801200300114895B91D2E9 +:10BF00001A00000000000010090036320000801204 +:10BF10000000001409C02DD2000016130621018074 +:10BF2000829B91BC0000000000A8017809006E32DD +:10BF30000000161306010280829B97BC00000110CE +:10BF40000421013069246EBC000000000050010093 +:10BF5000A99B913A0000F90F1F400224094068B2E2 +:10BF60000000F00F80000080E24192B60000000067 +:10BF700000000008B97F92300000000000000000BF +:10BF80002924903C080000000000007899A4FE38A5 +:10BF9000000016130201008082BA97BC000016133D +:10BFA0000601008092BA97BC0800F00F12010068E9 +:10BFB00092A4FEB80000161300000080020000905A +:10BFC0000000161304290180821B90BC00000000B1 +:10BFD00000A801E066246E3A000016139F2001E0DD +:10BFE000060093B20000FE0F8000008082812FB611 +:10BFF0000000FF0F002801E0060000920000000092 +:10C00000003001E00600003200000000005001E8AE +:10C0100006000032000000000001008002000070F5 +:10C020000000071038510100A99B91BA00000510CB +:10C0300004410208B9FF68B0000016138041028075 +:10C04000E2C168B60000021000400280024068921F +:10C05000000014109F3101E066246EBC0000141033 +:10C06000003001E0060000920000111004280104D5 +:10C0700009006EB20000161306500180A25B90BC4E +:10C0800000000F109F010000192490BC0000000068 +:10C0900000A801E066246E3A00000000002801E0DC +:10C0A0000624003C00000000005001E806000032B9 +:10C0B000000016139F2001E0060093B2000000006C +:10C0C000000100800200007000000000002801E074 +:10C0D0000600003200001D1004000080020090BC29 +:10C0E0000000141004410208B9FF68B000001613E4 +:10C0F00080410280E2C168B6000011100040028059 +:10C10000024068920000181002000080222490BCB7 +:10C1100000001D1080400280F2C168B600000000DF +:10C120000040028CB6C1683500001D10000000F808 +:10C1300022812F940800000000400278399AFE38CE +:10C14000000016130201008082BA97BC000016138B +:10C150000601008092BA97BC0800161312400268CC +:10C16000129AFEB80000111004010000292490BCAE +:10C17000000000000000000809000032100000006C +:10C1800000000010790B1638080000000000000CB9 +:10C19000790B1638000016130400008042E490BCAE +:10C1A0000000000000000004A9002D370004010079 +:10C1B00000000004C94D903A02000000000000A8F1 +:10C1C000820D913700000000000000A812A42A3A56 +:10C1D0000000281080400280E2017CB600001613A7 +:10C1E00004400278B93F7CB0000000000000000865 +:10C1F000E9A5903A00002A109F010010190091BC97 +:10C200009F000000000000100900363200002310DB +:10C210000401008042E490BC0000000000000078AF +:10C22000C924903A000016130401008022A497BC90 +:10C230000000000000A801E066246E3A0000000043 +:10C24000005001E806009032000016139F2001E024 +:10C25000060093B2000000000001008002000070A0 +:10C260000000FFFF00000080020000901800341062 +:10C270001F41027888CD68B60000000000000088E9 +:10C2800012002C3A0000371080010080628087B6CF +:10C290000000161304410280B2FF68B000003210A3 +:10C2A000004002800240689203001613044002001E +:10C2B000381AFFB8000016131F400204B8FF68B018 +:10C2C0000000000000380200B81B803A2E00000079 +:10C2D0000000001009003632000080120000001437 +:10C2E000090080D200000000000100800200007000 +:10C2F0000000FFFF000000800200009000004510D9 +:10C3000080010080A2802FB60000421012010000C0 +:10C3100009C021B218003600000000F8730A03F9C2 +:10C3200000000000000000D8024084321D004510CB +:10C330000401008002A417B800003F109F01008094 +:10C34000180088BC00001613000000800200009056 +:10C35000000000000060006C08006E320000000069 +:10C36000CA68004C08006E320000161304700018F2 +:10C3700008006EB2200000000000001009003632F4 +:10C380001000801200000014A96081D90000000094 +:10C3900004000080A2A0817C000016130D01008023 +:10C3A000020000B000004F1080010080E2802FB634 +:10C3B00000004F101B000080020000B000000000D1 +:10C3C0000600008062E0837C000016139F000014CA +:10C3D000184081BC00000000CA0100F802802F351F +:10C3E00000A0000012010040A28D39720000161357 +:10C3F00000000080020000900000FFFF00000080AD +:10C400000200009000000000000801E406C02D3288 +:10C41000EEFF0000001001E0868D2F3100000000CB +:10C420000000001CB3E4393200005B100400007807 +:10C43000D90130B60000161304010080328097BC89 +:10C440000000000000000078B9053030180000003E +:10C45000000000F8E3A503390000000000000034EC +:10C46000330B2F320000000004000078D901307631 +:10C470000000161304010080328097BC0000000009 +:10C4800000000078B905303018000000000100F805 +:10C49000E3A503790000FFFF000000800200009088 +:10C4A000000016130401008002002DBC00001613CA +:10C4B0000401008002802DBC00000000000000CCC0 +:10C4C00002000032000066102000012C09C06EB28C +:10C4D00000006710001686CC06C092920000000093 +:10C4E000001486CC06C09232000000001201004009 +:10C4F000628E92520000161300000080020000902D +:10C500000000FFFF000000800200009000006D109E +:10C5100004000078D90130B6000016130401008031 +:10C52000428097BC6D103600000000C002003692B9 +:10C530006000161304010080828D2FB100000000FE +:10C54000000000140300383200000000000000E08A +:10C55000020030320000B91004000024D80130B6C7 +:10C560007210000000000088824D823A000016130D +:10C570000000008002000090000016130000008000 +:10C5800002000090000016130000008002000090DE +:10C590000000161300000080020000906D103600AD +:10C5A000000000C00200369200009E1000000080D3 +:10C5B0000200009000007A10000000204805309032 +:10C5C000000016130000008002000090000086109A +:10C5D000921101BC08006EB200000000000801DCEE +:10C5E00002406E3200007E101F1101E026C18BB5A3 +:10C5F000000086101D000080020000B00000000056 +:10C60000000000D80200003280020000000000009C +:10C61000070036320000000000000078A9002D3726 +:10C620002005010000080000C78D973A0A000000AD +:10C6300000000078890D8237000000000010000023 +:10C64000A7BA973A000000000018000007C0EA32BD +:10C65000000016131200004802C038B200008A1011 +:10C66000800E01BC08C06EB2000000000000000097 +:10C67000190E823200E0921012010048A20D90B211 +:10C68000000016130000008002000090000000006F +:10C69000000000D802400032B4000000000000009A +:10C6A000070036320000000000000078A9002D3796 +:10C6B0000004010000080000C78D973A0000000048 +:10C6C0000000007899008237000016130210000065 +:10C6D00087BF97BA00000000001800000740FE3234 +:10C6E0000000161312000048F2C138B418003600DA +:10C6F000000000F8730A03F90000000000000004C5 +:10C70000896038321D0000000000007809A4173845 +:10C71000000098108000008002C08BB600009910C5 +:10C7200004000080328097BC0000161300000080D7 +:10C73000020000900000161304010080028097BCE4 +:10C740000000000000000018F341903400009E102B +:10C7500004000078D90130B60000161304010080EF +:10C76000328097BC0000000000000000B9053030A6 +:10C7700018000000000000F803A4033900000000C6 +:10C780000000000019CE2C32006016131200004089 +:10C79000A20D90B200000000000000D8020000329C +:10C7A00060000000000000000700363200000000BA +:10C7B000000000BCA8002D37A00701000008000001 +:10C7C000C7CD8B3A0A0000000000007889CD2C37D5 +:10C7D0008002000000000078898D973A0000000078 +:10C7E00000100000A7BA973A0000000000180000EF +:10C7F00007C0EA320000161312000040F2C138B43C +:10C8000018003600000000F8730A03F90000000069 +:10C81000000801DC02406E321D00000000000078BC +:10C8200009A417380000161304010080028097BC89 +:10C83000000016138010018022016EB60A00B010AD +:10C840001F01007889CD2CB70000B7101D1001F82A +:10C8500002006EB2800200000000000007003632C5 +:10C860002005010000080000C7CD8B3A0000000041 +:10C8700000100000A7BA973A00000000001800005E +:10C8800007C0EA320000161312000040F2C138B4AB +:10C8900018003600000000F8730A03F900000000D9 +:10C8A000001001F802006E32EEFF16130401008042 +:10C8B000828D2FB000000000000100800200007097 +:10C8C000EEFF161304110180820D6EB0000000000F +:10C8D000001001F802006E3200000000000901DCC7 +:10C8E00002406E720000FFFF000000800200009016 +:10C8F0000000000000000000090000320E000000EF +:10C9000000000004894D0D3600000000000000000A +:10C9100007800B3200000000000800000700903282 +:10C920000000000000100000070036320000C210B6 +:10C930001200004CF2C138B400000000000000807A +:10C94000020000300000C3101200008002C021B2BB +:10C950000000000000000000E902903A0000BF1053 +:10C9600004010004194090BC000000000001008098 +:10C97000020000500000FFFF000000800200009055 +:10C980000000D21080010080A2802FB60000CC10E1 +:10C99000120100E802C021B218003600000000F8C1 +:10C9A000730A03F90000D1100400008002802DBC3E +:10C9B000000016130401008022802DBC0000161315 +:10C9C0009F000080180088BC0000CC10120100E815 +:10C9D00002C021B20000CB100000008002000090D5 +:10C9E00000000000CA0000D8024084320000161384 +:10C9F0000401008002402DBC0000161304000080DA +:10CA000002802DBC000000000040006C881C833AAE +:10CA1000000000000048004C0800723200001613AD +:10CA200008500018C82072BC0000000004000080FC +:10CA30000240817C00000000000000141840813C8E +:10CA40000000161302000020880182BA00000000D6 +:10CA5000000000D8020000320000000000000000CA +:10CA6000070006320000161304010080020036BCE5 +:10CA70000700000000080000774A093900000000A4 +:10CA8000001000000700823200000000CA190000F8 +:10CA9000074082320000161312000040F2C138B481 +:10CAA00000000000000100D8024084720000FFFF77 +:10CAB0000000008002000090000000004D00000017 +:10CAC00067E0833E0000000000080000070080329D +:10CAD000000000000010000007C0863200000000C7 +:10CAE0000018000007C0843200003C110400002838 +:10CAF000D8A082BC0000161309010080020000B01B +:10CB00000000000000000018D8A0813C0000FE10CA +:10CB10000400003CD8E083BC000016130401008030 +:10CB2000028081BC0000EF100400008072802DBCE8 +:10CB3000000016131200005002C038B20000F710B7 +:10CB4000510000D812802D9A0000161312000050D8 +:10CB5000F2C138B418003600000000F8730A03F977 +:10CB60000000F5100400008072802DBC0000161338 +:10CB700080010080A2802FB60000F010670000F84E +:10CB8000A2802FB500001613120000E802C021B2E7 +:10CB9000000016130401008072802DBC000000000C +:10CBA000510000D8020000320000FC102A010000F1 +:10CBB000D82080BA0000FB101201000009C021B289 +:10CBC00018003600000000F8730A03F900000000A6 +:10CBD000000000D8024084321D00161304000080BB +:10CBE00002A417B8000046100060006C08006EF246 +:10CBF0000000E4104D00000067E0839E0000161363 +:10CC000012000050F2C138B418003600000000F8DD +:10CC1000730A03F91D0005110400008002A417B86F +:10CC20000000161380010080A2802FB60000FF10C4 +:10CC3000670000F8A2802FB5000016131200000054 +:10CC400009C021B21D0016130401008002A417B808 +:10CC50000800000000400278399AFE3800001613E0 +:10CC60000201008082BA97BC000016130601008002 +:10CC700092BA97BC0800161312400268129AFEB8C6 +:10CC8000000016130B000080020000B000006411C9 +:10CC900000000030030038F200001B111F00006C80 +:10CCA000D8E086BA00003210510000D8020000F22D +:10CCB00000000F110000003C0840809200001B1192 +:10CCC000000000800200009000001311800100802D +:10CCD000F2812FB60000131180000080E2802FB691 +:10CCE0000000131180010080328087B60000000030 +:10CCF000000000F8E2802F340000E31004010080FF +:10CD0000028081BC0000191180010080A2802FB632 +:10CD1000000018111201000009C021B218003600ED +:10CD2000000000F8730A03F900000000000000D8BA +:10CD3000024084321D0016130400008002A417B8BC +:10CD4000000046100060006C08006EF20000E41065 +:10CD50004D00000067E0839E0000201180010080EC +:10CD6000E2802FB60000401180010080A2802FB623 +:10CD700018003600CA0000F8730A03F91D004011BC +:10CD80000401008002A417B8000016130000008000 +:10CD90000200009000000000000000A4A8608A3C8F +:10CDA0000000161304210180825B8ABC000024115C +:10CDB0002FA8012099226EBA0000C70F0000008042 +:10CDC000020000F00000161306010280821B92BCD4 +:10CDD0000000000000A801E0060092320000000000 +:10CDE000005001E80600003200002911232101E073 +:10CDF000060000B23E0016131200002C82CD2EB2A7 +:10CE000000001613043000E0068082B200003311E7 +:10CE1000042100E0068081B200001613800000802B +:10CE2000E2802FB60000311180010080A2802FB671 +:10CE3000000030111201000009C021B218003600B4 +:10CE4000000000F8730A03F900000000000000D899 +:10CE5000024084321D0016130400008002A417B89B +:10CE6000000046100060006C08006EF20000000038 +:10CE7000002000E00680813200000000003C00E855 +:10CE80000640813200000000001000E006C086323B +:10CE900000000000001800E006C0843200001613F5 +:10CEA0000400008032E186B2000000002A01008008 +:10CEB0000200007000003A111201000009C021B206 +:10CEC00018003600000000F8730A03F91D0016135D +:10CED0000400008002A417B800000000000100F860 +:10CEE000A2802F75000000000000003CD8E0833CC9 +:10CEF0000000161312000050F2C138B400001613DF +:10CF000080000080A2802FB600000000000000F822 +:10CF1000A2802F34000000000000008812002C3A8C +:10CF20000000FFFF000000800200009000000000F1 +:10CF3000000000000900003200000000000000783E +:10CF40000900003200000000000000A802000032CA +:10CF5000EE05481104010080820DF6BC00060000B9 +:10CF6000000000080900363200004A1100000004E9 +:10CF700009C00992002800000000000809003632AC +:10CF80000000000000000004098009321E000000BB +:10CF9000000060C087CD003700000000000860C0BE +:10CFA000078097320030000000000078898D2A3A0F +:10CFB000000016131200005C528197B400000000BC +:10CFC000000000002924903A0800000000000078CA +:10CFD000890D903600000000000000041940903CCC +:10CFE00000000000000000A852822A3A00084A11FE +:10CFF00002010080828D2ABC00005B1106000080C7 +:10D00000024090BC00001613120000A8020020B2DB +:10D010001E000000000000C087CD003700000000A7 +:10D02000000800C007809732000016131200005C51 +:10D0300052812AB400000000000000002924903A28 +:10D040000800000000000078890D9036000054119F +:10D0500004010004194090BC0500000000000078A5 +:10D06000890D903600000000000000A00E8097326D +:10D070000000161312000068028097B20000000042 +:10D08000000000A40E8097320000000000000000A5 +:10D090002924903A000000000000007859009036E2 +:10D0A00000005D1195010080222490BA000000006C +:10D0B00000010080020000500000FFFF000000801F +:10D0C0000200009000007E1104010078D90130B602 +:10D0D000000000000000002809C029320000000004 +:10D0E0000000009CB2452830000070118601000845 +:10D0F00009802FB2000000000000002C094081329E +:10D1000000000000000000F80200003200000000F3 +:10D11000000000F40200003218000000000000F8D7 +:10D12000738A0239000000000000009C02809232E5 +:10D1300000006F110407018002C06EBC000079116D +:10D14000C30701ECB6E46E9A00007911000601EC09 +:10D15000B6E46E9A0000161380010080528090B6EB +:10D16000000000000000002C0905803000000000D5 +:10D17000000000F80200003200000000000000F48F +:10D180000200003218000000000000F8738A023923 +:10D19000000000000000009C028092320000161384 +:10D1A0000201008082FA92BC000016130601008082 +:10D1B00092FA92BC0000D71100000080020000D05B +:10D1C000210000000000001009003632000080122B +:10D1D0000000001409C092D20000000000000030DE +:10D1E0000300383200007E1104010078D90130B606 +:10D1F000000067110000009CB2452890000000006C +:10D20000040000802280977C00001613000000803C +:10D21000020000900000FFFF00000080020000906C +:10D22000000016130400008002C0E8BC00001613C2 +:10D230000200008002C12FBC000000000000008836 +:10D2400002C0E83202008411B00000A0F20B00B965 +:10D25000000000000000000CABE4B03200008911B7 +:10D2600080010080F24BD0B600000000A000002832 +:10D2700009000032000000000001008002000050A0 +:10D2800000008B1104010080123EF8BA00009611D4 +:10D29000A0000004FD4BD09400009211800100809A +:10D2A000D28192B600009211800100802281FCB6EA +:10D2B00000000000A0000004FD4BD034000000007E +:10D2C0000000008401C02F32000000000000008038 +:10D2D000F1010034000000000000009401C02F3272 +:10D2E0000000961100000090F10100940000000081 +:10D2F000A000008401C02F32000000000000008068 +:10D30000F101F83400000000000000900140F83204 +:10D310000000000000010028090000520000161360 +:10D3200080010080F24BD0B600009C11040100285F +:10D330000934B0BA0000161380010080F24BD0B659 +:10D3400000009911B0000080020000B00000000051 +:10D35000A0000004FD4BD0350000000000010028B3 +:10D360000900005200009C11B00000A822C02FB795 +:10D3700000001613040084C037ACB0B200000000F7 +:10D38000A000000C0B000032FFFF0000000000783E +:10D39000A94DB0300000A411800000800240B0B65A +:10D3A00000001613800000801240B0B6000000009C +:10D3B00000000078698197350000000000008408B3 +:10D3C0000B007C320000000000000000E725013265 +:10D3D0000042000000080000878D2A3A000000008B +:10D3E000001000000700B03200000000001800002C +:10D3F0000700D0320000000012010048F2C138548A +:10D400000000161300000080020000900000AA1126 +:10D41000B00000A0020000B2000000000000000CFC +:10D42000ABE4B0320000AF11800100800240D0B602 +:10D4300000000000A00000280900003200000000E9 +:10D4400000010080020000500000B11104010080C2 +:10D45000123EF8BA0000C211A00000040D40D094A2 +:10D460000000BB1180010080D28192B60000BB1188 +:10D47000800100802281FCB600000000A0000004B2 +:10D480000D40D034000000000000007809C02F32A9 +:10D4900000000000000000FC02000032000000005C +:10D4A0000000008401C02F32000000000000008056 +:10D4B000F1010034000000000000009401C02F3290 +:10D4C0000000000000000090F10100340000C211D3 +:10D4D000000000FC0280979200000000A00000788D +:10D4E00009C02F3200000000000000FC02000032E2 +:10D4F000000000000000008401C02F320000000086 +:10D5000000000080F101F8340000000000000090ED +:10D510000140F83200000000000000FC0280973259 +:10D52000000000000001002809000052000016134E +:10D53000800100800240D0B60000C811040100281C +:10D540000934B0BA00001613800100800240D0B642 +:10D550000000C511B0000080020000B00000000013 +:10D56000A00000040D40D03500000000000100289C +:10D57000090000520000C811B00000A8020000B26B +:10D5800000001613040084C037ACB0B200000000E5 +:10D59000A000000C0B000032FFFF0000000000782C +:10D5A000A94DB0300000D011800000800240B0B61C +:10D5B00000001613800000801240B0B6000000008A +:10D5C00000000078698197350000000000008408A1 +:10D5D0000B007C320000000000000000E725013253 +:10D5E0000042000000080000878D2A3A0000000079 +:10D5F000001000000700B03200000000001800001A +:10D600000700D0320000000012010048F2C1385477 +:10D610000000161300000080020000900000FFFFD1 +:10D6200000000080020000900000D9111C40028020 +:10D6300006C092B244000000000100F8A28D2F52F3 +:10D64000000000000000007809C5923000001613A9 +:10D650000201008082BA97BC000016130601008008 +:10D6600092BA97BC000016131200006802C592B06F +:10D67000000016130B000080020000B02400000020 +:10D680000000001009003632000080120000001473 +:10D6900009C092D200000000000100701F00F75A7C +:10D6A0000000FFFF00000080020000902C0000003E +:10D6B0000000001009003632000080120000001443 +:10D6C000098092D200000000D50800000780923245 +:10D6D000000000000030000007C02C320040008035 +:10D6E000003800000700373200000000CA4101E0A6 +:10D6F00006809232000016131200004802C080B269 +:10D700000060000000010008088036720000FFFF82 +:10D7100000000080020000900000161380000080CE +:10D72000A2802FB6000016130401008062802DBC79 +:10D730000000000000380000078092320000000066 +:10D740000030000007C02C3200000000CA3D000C71 +:10D7500007808332000000001201004802C080727E +:10D760000000161300000080020000900000FFFF80 +:10D7700000000080020000900000000004570180BB +:10D7800002C06E7C00000000005701EC068092721F +:10D790000000FFFF00000080020000900000641104 +:10D7A00000000030030038F23300000000000010D9 +:10D7B00009003632100080120000001419A02CD984 +:10D7C0000000FB119D11020C09006EB20000FC115B +:10D7D00000F0011C09006E920000000000B8011C5E +:10D7E00009006E320000FE112CCD011809806EB2C6 +:10D7F000000000000000000CC9C1903400000212BB +:10D800003B29020409806EB20000161380D6018005 +:10D8100052C06EB60000000000D601EC56C06E3457 +:10D82000000000000000000CB9C19034000012128A +:10D8300000A8010809006EF2000006129D01008098 +:10D8400017E090BA000000000030008007C091325D +:10D8500000000912003800800700EE920000091253 +:10D860000401008002C091BC0000000000B801E08B +:10D870000600EE3200000000007001E00600863273 +:10D8800000000C123908008007C085B20000161392 +:10D8900080000080C2812FB600000000D9C901E8D5 +:10D8A0000680913200000000C811008007409032CD +:10D8B00000000F123B210080070086B2000000002C +:10D8C000DB0000601800863A00000000587801E094 +:10D8D0001620863A000000000029008007008572AB +:10D8E0000000FFFF00000080020000900000161200 +:10D8F000020C0280A29B90BC000000000000027895 +:10D9000029006E360000161202000080E2A590BCCD +:10D91000000000000000000809000032000018129A +:10D920009F89017849216EBC00000000000000784A +:10D93000090000320000000000000008E9A5903F47 +:10D9400000001E1204200208899B90BE0000000007 +:10D95000000A0258B89B90360000000000000078D2 +:10D9600049A1903A000000009F880180829B977C2B +:10D9700000000000008901E00680977200000000AE +:10D98000000B0258B89B90760000FFFF000000805B +:10D99000020000900000271280010080A2802FB6B4 +:10D9A000000025121201007809C021B218003600CB +:10D9B000000000F8730A03F9000016130401008048 +:10D9C00002802DBC00002712CA0000D802408492B9 +:10D9D0001500161304010078E96517B8000000006F +:10D9E000000000F8A2802F3500001613040100800B +:10D9F00002402DBC000016130400008002802DBCE4 +:10DA0000000000000040006C881C833A0000000009 +:10DA10000048004C0800723200001613085000182D +:10DA2000C82072BC000000000600008062A0827C5A +:10DA3000000016139F000014184081BC000016134C +:10DA400002000020880182BA00000000000000D817 +:10DA50000200003200000000000000000700063253 +:10DA60000000161304010080020036BC070000000D +:10DA700000080000774A093900000000001000008B +:10DA80000700823200000000CA19000007408232FD +:10DA90000000161312000040F2C138B4000000006C +:10DAA000000100D8024084720000FFFF00000080E7 +:10DAB000020000902B000000000000100900363228 +:10DAC000000080120000001409C085D2000042123C +:10DAD00080010080F2C185B600003E121F40028422 +:10DAE000E60100B4000042121D0100F822812FB4AB +:10DAF00000004212000000F862812F9500004012E1 +:10DB00001D010080020000B000000000000000F8CD +:10DB100062812F3500000000004002800240683220 +:10DB2000000016131F010080020000B00000161351 +:10DB30001200006802C585B00000000000000078F7 +:10DB400009C58530000016130201008082BA97BC17 +:10DB5000000016130601008092BA97BC0000000076 +:10DB60001D00008002000070010000000401008020 +:10DB7000A28D2F702A0016131200002C82CD2EB217 +:10DB800000000000000100F802812F740000FFFF78 +:10DB9000000000800200009080A8000004000080C7 +:10DBA000828D2F700000521280010080D2802FB62B +:10DBB000000016138000008072812FB60000521200 +:10DBC00004B0008002006EBC00000000000000F8FD +:10DBD00072812F343D0055121201002C82CD2EB2DD +:10DBE0000000161300000080020000900000551293 +:10DBF00080010080F2802FB63C0058121201002CE8 +:10DC000082CD2EB2000016130000008002000090AA +:10DC10000000581280010080B2802FB63500161324 +:10DC20001200002C82CD2EB200000000000000F88F +:10DC300042812F348000000004000080828D2F700C +:10DC40000200000004010080A28D2F703B0016131B +:10DC50001200002C82CD2EB200000000000100F85E +:10DC600012812F740000FFFF00000080020000906E +:10DC70000000161380000080A2802FB6000016134B +:10DC800004310280A2DB2CBC08000000001801E86F +:10DC900076208139EEFF0000000100F8828D2F719F +:10DCA0000000FFFF000000800200009000006612EC +:10DCB0000000013808C06EF20000000012010048A8 +:10DCC00002C0807200001613000000800200009065 +:10DCD0000000FFFF00000080020000900E00000026 +:10DCE00000000010090036320000801200380114D4 +:10DCF00009006ED200006A120438017809006EB281 +:10DD000000000000003801E0060000320000161399 +:10DD100080000080A2802FB600000000CA11000021 +:10DD20000780823200006E122E190000078097B221 +:10DD30000000000000000028E98192340000731206 +:10DD40002731000007C02CB200000000D5080000F9 +:10DD50000700873200000000C7000028E9809234E5 +:10DD600000000000004001E00600873200000000D3 +:10DD700000000008D8818034100000000039000045 +:10DD8000E7A092790000FFFF0000008002000090F1 +:10DD9000140000000000001009003632000080125C +:10DDA00000000014094090D2000016131200004435 +:10DDB00012E438B218003600000000F8730A03F9C4 +:10DDC00000007D120401008002802DBC00001613AB +:10DDD00080010080A2802FB600007812670000F852 +:10DDE000A2802FB500001613120000E802C021B275 +:10DDF000000016130401008072802DBC000000009A +:10DE0000000100D8024000720000FFFF0000008007 +:10DE1000020000901B00000000000010790A9139F8 +:10DE20000F00000000000010390B91390C000000B9 +:10DE300000000010590A913909008312F101001005 +:10DE4000690B91B903000000002486A8828D6C370D +:10DE500000000000000088E0070091320000000090 +:10DE6000000088E00740913200C089120201008062 +:10DE7000828D2ABC00008A12E12486C80600009226 +:10DE800003000000E12486C8868D2A3600000000C9 +:10DE900000010080020000500000FFFF0000008031 +:10DEA000020000900000921204300080829B81BC2E +:10DEB000000016130D010080020000B000001613D0 +:10DEC0009F3C001428806EBC000016138000008068 +:10DED000A2802FB600000000CA0100F802802F3592 +:10DEE00000A0161312000040A28D39B20000941257 +:10DEF00080390080E2806EB6000016138038008002 +:10DF0000F2806EB600C0161304010080A28D2FB0FF +:10DF100000C09A1204380078898D6EB010009A12F1 +:10DF20009F0100F8E2A52FB900001613040000803D +:10DF300002C0EEBC00000000005801EC06C0EE324A +:10DF4000000000000000008002000030000000001F +:10DF50000428001809006E720000E30F0000008022 +:10DF6000020000F00000C70F00A8012009006E9217 +:10DF70000000FFFF00000080020000900000A712D8 +:10DF800004B00080829B81BC000016130D0100804C +:10DF9000020000B0000016139FBC001428806EBC65 +:10DFA0000000161380000080A2802FB60000161318 +:10DFB00080B8008082806EB60000000000B800E8E3 +:10DFC00086806E3400000000CA0100F842802F35C0 +:10DFD00008A0000012010040A2CD39720000161303 +:10DFE00000000080020000900000161380B800803E +:10DFF00082806EB60000000000B800E886806E34B3 +:10E000000000000000010080020000700000FFFF1F +:10E0100000000080020000902800000000000010B6 +:10E02000090036320000801200000014098090D2EE +:10E030000000B01233CD01BC08806EB20000EE12B9 +:10E04000000000282922EEDC0000B512000000804C +:10E05000020000900000B51204B8012809006EB259 +:10E060000000B5129F710180C2216EBC0000161322 +:10E070009F000028A924EEBC0000EE12000000283A +:10E08000198092DF000000000000008002000030D4 +:10E090000000C91202810180829B90BC000016130F +:10E0A00004000080028090BCEE05C112060C0280C4 +:10E0B000828D6EBC00904C0000000084020037325C +:10E0C0000000BB12B8010080020000B00000B912CD +:10E0D000000000800200009000000000000000C46A +:10E0E000038090320000000000B001E096216E3CF9 +:10E0F00000000000619801E0060087320000000087 +:10E1000000D401EC0600003200000000A8000078F6 +:10E1100049403C370000CE1200000008E9A5909A63 +:10E120006089200000000084020037320000C41221 +:10E13000B8010080020000B00000C21200000080A0 +:10E140000200009000000000000000C40380903234 +:10E150000000000000B001E096216E3C00000000CD +:10E16000619801E0060087320000000000D401EC55 +:10E17000060000320000CE12A8000008198F909A05 +:10E18000000000000000007899A1893E0000000016 +:10E1900000000008E9A5903A0000000000B001E08E +:10E1A00096216E3C00000000619801E00600873275 +:10E1B0000000000000D401EC060000320000D11283 +:10E1C0000600008072A290BC00C0FF3F008001E00A +:10E1D00006003732000000000000000809C0893244 +:10E1E0000000D61204790180821B87BC0000D41283 +:10E1F00004B0008002006EBC0000D912D99001E08A +:10E20000068090920000DC128000008052812FB6C0 +:10E210000000DC12D54101E0060087920000D9120F +:10E220003C9001E0068090B200001613800100804F +:10E2300092812FB60000000000C801E806C08B32B2 +:10E24000000000009501008002802F720000DD12A6 +:10E250009F410180821B87BC0000000000010080FC +:10E260000200007000000000D99001E006809032AA +:10E2700000000000000100F872802F740000FFFF12 +:10E280000000008002000090270000000000001045 +:10E29000090036320000801200000014094087D2C5 +:10E2A0000000E7129FD8018022216EBC0000000010 +:10E2B0000B010080020000700000E7129FE0018067 +:10E2C000C2216EBC000000000B0100800200007043 +:10E2D0000000E7129FB00180D2216EBC0000000058 +:10E2E00000010080020000700000E9120668018051 +:10E2F000825B87BC00000000006801E006408732B6 +:10E300000000EB1237B001E0064087B200000000C9 +:10E31000000000F8D2802F340000000000D801E097 +:10E32000068084320000000000E101E006008772F0 +:10E330000000FFFF000000800200009000001613A4 +:10E3400008000080028092BC0000FB1204C101841E +:10E3500002006EB20500000000C001E8868D923711 +:10E360000300000000C401E8868D92370000000021 +:10E3700000000080020000300300000000C0012CFB +:10E38000898D6E360000000000C4012CA9DB923A92 +:10E39000000000000000002C29C0923600000000A0 +:10E3A0000000002C19FB923F000000000000002834 +:10E3B0002980923A000000000000002CA9E4923F5E +:10E3C000000000006FCC01E826FB923E0000000038 +:10E3D00000B901E0060000520000000000000094B7 +:10E3E000028092320000000000C001E006402832A6 +:10E3F000100000006FCC01E886CD2A360000000036 +:10E4000000B901E0060000520000FFFF000000809C +:10E41000020000900000161304B0008002006EB2EB +:10E4200000000000009001BC08006E3200000000F7 +:10E4300000B001BC88DB8B3E00000000009801BCEE +:10E4400088DB8B3A00000C139F0000BC88E18BBC7A +:10E4500000000C13040C0240A8DB8BBE000000007F +:10E4600000B00004881B843E0000091304B1008042 +:10E47000825B80BC00000000000100F8C2802F74A5 +:10E4800000000000040C0280A25B807C00000C13E2 +:10E490000468017819006EB60000000002000080D8 +:10E4A000E265807C2900000000000010090036327F +:10E4B000000080120000001409C08BD20000000090 +:10E4C0000000008812002C3A0000FFFF00000080CE +:10E4D000020000900000161304310280A2DB2CBC65 +:10E4E0000000161380000080A2802FB608000000F4 +:10E4F000001C01E876208139EEFF0000000100F8E1 +:10E50000828D2F710000FFFF00000080020000904C +:10E5100000001613000000B40F40FB940000000040 +:10E52000000000880F402B32000000000000009027 +:10E530000F00283200000000000000940F00293274 +:10E5400010000000000000B85F461839FF0000000E +:10E550000000009C0F003632000000000000009C0C +:10E560005FCAF935000000000000004403C0F93222 +:10E5700000000000000000E4030000324100001031 +:10E58000000000E00300373200000000000000E45B +:10E590000300003240000010000000E003003732AA +:10E5A00000002513670000980F802AB200000000C9 +:10E5B000000000A8020000320000231312C186E010 +:10E5C00007C021B20000000000B886C006802A32D1 +:10E5D0004C420000000000A8020036322713381415 +:10E5E000000000B00F003692000000000000009C08 +:10E5F0000200003200012414000000AC0F0036D2EB +:10E6000000000000000000AC0F802A320020000053 +:10E61000000000A802003632000000000000009C4C +:10E620000F007E3200000000000000A00F007E32CC +:10E6300000000000000000A40F007E320000000077 +:10E64000000000A80F007E3200000000000000A8BB +:10E6500002C0FA3200000000000000E007C0F932FA +:10E6600000000000000000E00700FA320000000097 +:10E67000000000E00740FA3200003B13000000E019 +:10E680000780FAD200000000000000E00780FB32A3 +:10E6900001006213040100B48F4DFBB002000000C2 +:10E6A000000000A002000039408000000000000CC3 +:10E6B000ABCDB032100000000000000C5BCAB039D6 +:10E6C000000000000000000C2BFEB03200006114BE +:10E6D000000000800200009000000000000000F830 +:10E6E0000300013200000000000100E007803F52FB +:10E6F00018000000000000F8738A023900000000D2 +:10E7000000000044530A1635000000000000009C81 +:10E710000F80963200000000000000A00FC096326B +:10E7200000000000000000A40F009732A260030068 +:10E730000000005803003732481300000000005C5E +:10E74000030036320000000000000050830D00344A +:10E750000000000000000048830D003400000000AD +:10E7600000000044530A003400003600000000801E +:10E7700002000090000000000000006809C0F932AB +:10E78000000000000000006C0900FA3200000000E8 +:10E79000000000700940FA3200005A1300000080A7 +:10E7A0000200009002000000000000A0F20B0039FF +:10E7B00000004F13800100801240B0B6000000003E +:10E7C000000000043B40B0330000000000000004E3 +:10E7D000FD4BD035000053130000000C0B00979246 +:10E7E00002000000000000A0F20B003900005313EB +:10E7F000000000046B01979400005313120000689E +:10E80000094020B2000054131200006C094020B2ED +:10E810000D000000000000FCA2E5163800005913AE +:10E820009F000080028096B200000000000000708F +:10E8300009C0963200005A130000006C09C0FD9216 +:10E840000000591312000070094020B200000000BF +:10E850000000009C0200003200000000000000D810 +:10E860000200003202005313040100BCAF2517B8A8 +:10E8700006005113040000BCAF6516B800004C132D +:10E880000400008022C0FBBC00006A13040000806A +:10E8900012C1FBBC200053130401008082CDFBBCDD +:10E8A00002000000000000A0F20B003900006B1312 +:10E8B00000000080020000D0641300000000008807 +:10E8C00082CDF93A00005A14000000800200009046 +:10E8D00000009313000000800200009000009413D9 +:10E8E00000000080020000900000981300000080EB +:10E8F000020000900000A0130000008002000090C1 +:10E900000000F91300000080020000900000531383 +:10E91000000000DC0F0097920000000000000000E3 +:10E920000700033240420000000000A80200363217 +:10E93000000000000008000007802A3200000000EC +:10E9400000100000070097320000000000180000CF +:10E9500007C096320880701312000040028036B261 +:10E960000000000000000080020000300000721370 +:10E970001200009C0FC021B21D007513040000801E +:10E9800072BE17B800007213000000F81E80EF9AE4 +:10E99000130000000000009C7FBE173800007813B1 +:10E9A0000400008012C0F9BC00007213000000F8DF +:10E9B0001E80EF9A000000000000009C0F007E32D5 +:10E9C00000000000000000A00F007E3200000000E8 +:10E9D000000000A40F007E320000000000010000D3 +:10E9E0000700FA52000000000000009C0200003204 +:10E9F0004C420000000000A8020036320000000077 +:10EA00000008000007802A3200004E140000008039 +:10EA1000020000D00000521400000080020000D06C +:10EA2000000000000000000CCBC1B034000000006A +:10EA30000000009C0200003200000000000000D82E +:10EA400002000032000081110000002809C0B0D28D +:10EA50000000821304000080028092B2000086133E +:10EA60001200009C0FC021B21D0089130400008019 +:10EA700072BE17B800008613000000F81E80EF9ADF +:10EA8000130000000000009C7FBE173800008C13AC +:10EA90000400008012C0F9BC00008613000000F8DA +:10EAA0001E80EF9A02008E13040100B48F4DFBB05C +:10EAB00000005313000000800200009008000000D6 +:10EAC000000000F89340013900000000000000B48D +:10EAD0001F40FB35FE0000000000004803003632F6 +:10EAE0000000000000000044030000340000821316 +:10EAF0000000000C8BC1B09400005E140008000000 +:10EB00000740FA9200004E14000800000740FAD2B5 +:10EB10000880951312000050028036B20000531492 +:10EB200000000080020000D000006014000000809F +:10EB300002000090000800000000009C0F00363228 +:10EB400000040100000000A80200373200000000AD +:10EB5000000000A00200003200000000000000E001 +:10EB60000700B03200000000000000A012002A3AA6 +:10EB700000009B130401009C1FC0F9BC00040100AD +:10EB8000000000A80200373202005D14000000A05F +:10EB9000F20B00990000A813040100800240FAB2B1 +:10EBA00000040100000000A8020037320000AA1390 +:10EBB00000000080020000D00000B71300000084B5 +:10EBC000020000D200000000000000E007C03C325C +:10EBD0000000A4138E010080024028B2000401004E +:10EBE000000000A40F0037320000931300000080E3 +:10EBF0000200009000040100000000A4CF4DFA3A8A +:10EC0000000093130000008002000090000000004C +:10EC10000000009C0F00003210000001000000AC5A +:10EC20000F0037320000BC1300000080020000D04B +:10EC30000800AC130401008082CDF9BC0000000084 +:10EC40000000009C0F0000320E000001000000AC2C +:10EC50000F0037320000BC1300000080020000D01B +:10EC60000B00B0130401008082CDF9BC200000002D +:10EC70000000009C0F0036320F000001000000ACC5 +:10EC80000F0037320000BC1300000080020000D0EB +:10EC90002700B4130401008082CDF9BC00000000FD +:10ECA0000001008002000050000000000000009CF5 +:10ECB0000F0000320F000001000000AC0F003732DF +:10ECC0000000BC1300000080020000D02000B91337 +:10ECD0000401008082CDF9BC00000000000100802A +:10ECE0000200005000000000000000E403C0F93200 +:10ECF0000D000001000000E00300373200000000BA +:10ED0000000000E003C0FA3200000000000000E054 +:10ED100007403E32000000000001009C1FC0F95A6D +:10ED200000000000000000E003C0F9320000000015 +:10ED3000000000E007403E32000000000000009CA0 +:10ED40001FC0F93AFF000000000100AC8FCDF95060 +:10ED5000000000000000009C0FC02F3200000000E7 +:10ED6000000000FC0200003200000000000000E093 +:10ED700007803E3200000000000000FC12C02F3A65 +:10ED80000F00C7130401008082CD2FBC00000000DB +:10ED9000000000E007803E3200000000000100FC9F +:10EDA00002C0F95200000000000000E007003A3203 +:10EDB00000000000000000E007403A3200000000C0 +:10EDC000000000E007803A3200000000000000E090 +:10EDD00007C03A32000000000000009C0FC02F3234 +:10EDE00000000000000000FC0200003200000000F3 +:10EDF000000000E007003D3200000000000000E0DD +:10EE000007403D320000D213830100FC12C02FBA2C +:10EE100000000000000100FC02C0F95200000000E8 +:10EE20000000009C0F0000320C00000000000008F1 +:10EE3000733E003900000000000000E0070030329F +:10EE4000000000000000009C1FC0F93A7000D713BA +:10EE50000401008082CDF9BC000000000000000C1D +:10EE60000300003200000000000000E00700303224 +:10EE7000000000000000001003000032000000004D +:10EE8000000000E007003032000000000000009C9D +:10EE90000F00003200000000000000A00FC0293267 +:10EEA000000000000000009C02C0F93200000000D9 +:10EEB000000000A40FC02C32000000000000009CE5 +:10EEC0000200FA32180000000000002C737EFA39AC +:10EED00000000000000000E0070030320000E013F6 +:10EEE0008501009C1FC0F9BA0000000000010080ED +:10EEF00002000050010000010000009C0F003732AA +:10EF00000000C11300000080020000D00E00EF13CB +:10EF10000401008082CDFABC00000000000000E087 +:10EF20000700003200000000000000E0070000328F +:10EF300000000000000000E0070000320000E913BC +:10EF40000000009C3FC0F99A1C00E91304010080F6 +:10EF500082CDFABC0200C1130000009C8FCDF9DA0B +:10EF600000000000000100800200005001000002CB +:10EF70000000009C0F0037320000C1130000008029 +:10EF8000020000D00E00F7130401008082CDFABC0D +:10EF900000000000000000E0070000320000F31352 +:10EFA0000000009C1FC0F99A2600F31304010080A2 +:10EFB00082CDFABC00000000000100800200005079 +:10EFC00000000000000000A80F40293200040100EA +:10EFD000000000A8020037320000E81300000080A3 +:10EFE000020000D00000F21300000080020000D0F8 +:10EFF0000000C51300000080020000D000000000E7 +:10F00000000000E00780183200000000000000E06F +:10F0100007401A3200000000000000E007001A322A +:10F0200000000000000000E007801A32000000002D +:10F03000000000E007C01A3200000000000000A03D +:10F040000F000032A26003000000005803003732B6 +:10F050000B1400000000005C0300363200000000CA +:10F060000000009C0F802A3200000B140400008076 +:10F07000024029B20000000000000050833E00342E +:10F080000000000000000048833E00340000000043 +:10F0900000000044530A003400000C1400000088F3 +:10F0A0000F402B9200000000000000900F0028325B +:10F0B00000000000000000940F0029320000000052 +:10F0C000000000980F802A3200000000000000A815 +:10F0D00002C0F93211143814000000B00F0036924B +:10F0E0000700141404000080824D29BC00000000B9 +:10F0F000000000A01F00FA3A000008140000009C65 +:10F100000F802A92C0010000000000AC0F003632D0 +:10F11000010000000000009C0200363200002414B0 +:10F1200000000080020000D01F001A1404000080BC +:10F1300082CD29BCC0000000000000AC8FCDFA3A9F +:10F14000000016140000009C12C0299A0000D6137B +:10F1500000000080020000D00000CC1300000080FE +:10F16000020000D00000221404000080528AFABC81 +:10F17000A260030000000058030037322214000090 +:10F180000000005C03003632000000000000005068 +:10F19000A33E00340000000000000048A33E0034FD +:10F1A0000000000000000044530A00340004010085 +:10F1B000000000A40F00373200009313000000800D +:10F1C0000200009000000000000000C402C0FA32FB +:10F1D000030000000000009C0F0036320000000019 +:10F1E000000000BC0F402F3200002B140400009CD4 +:10F1F0001FC0F9BC00002A140400008002402FB296 +:10F2000000002714000000E007002C9200002714E3 +:10F21000000000E00700369200000000000000E05F +:10F2200007402C3200000000000000E007802C3274 +:10F2300000000000000000E007C02C3200000000C9 +:10F24000000000E007002D3200000000000000E098 +:10F2500007402D3200000000000000E007802D3242 +:10F2600000000000000000E007C02D320000000098 +:10F27000000000E007C0FB3200000000000000E0DA +:10F2800007802F3200000000000000E007C02F328E +:10F2900018000000000000F8730A023900000000A6 +:10F2A000000100E007803F52FF0000000000004422 +:10F2B0000300363200000000000000E00700F932D1 +:10F2C00000000000000000E00740283200000000BD +:10F2D000000000E00780F832030000000000009CFE +:10F2E0000F00363200000000000000BC0FC02B32BF +:10F2F000000041140400009C1FC0F9BC0000401431 +:10F300000400008002C02BB200003D14000000E0A9 +:10F3100007C0289200003D14000000E0070036926C +:10F3200000000000000000E00740F932000000008B +:10F33000000000E00740293200000000000000E06B +:10F340000780293200000000000000E007C02932D9 +:10F3500000000000000000E007002A32000000006A +:10F36000000000E007402A3200000000000000E03A +:10F370000780F93200000000000000E007C02A32D8 +:10F3800000000000000000E007C02F320000000075 +:10F39000000000E007402B3200000000000000E009 +:10F3A00007802B3200000000000000E007C0FB32A5 +:10F3B00000000000000000880200FB320000000096 +:10F3C0000000009C0200003200000000000000D895 +:10F3D0000200003200000000001000000700973219 +:10F3E000000000000019000007C096520880521467 +:10F3F00012000048028036B20000000000000080C9 +:10F4000002000030000054141200009C0FC021B212 +:10F410001D0057140400008072BE17B80000541479 +:10F42000000000F81E80EF9A130000000000009C0E +:10F430007FBE1738000000000400008012C0F95C95 +:10F4400000005414000000F81E80EF9A0000000035 +:10F45000000000B40F40FB35000000000000009CDD +:10F46000020000324C420000000000A802003632C8 +:10F47000000000000008000007802A3200004E143F +:10F4800000000080020000D0000052140000008044 +:10F49000020000D0000000000000000CCBC1B0341E +:10F4A000000000000000009C02000032000000008C +:10F4B000000000D80200003200006B140000002899 +:10F4C00009C0B0D20000611404000080028092B232 +:10F4D000000065141200009C0FC021B21D006814CA +:10F4E0000400008072BE17B800006514000000F828 +:10F4F0001E80EF9A130000000000009C7FBE1738AA +:10F50000000053130400008012C0F9BC0000651411 +:10F51000000000F81E80EF9A00000000000000FCD0 +:10F520000200003202000000000000A0F20B0039CF +:10F5300000006F14040100280934B0BA0000000074 +:10F54000000100280900005200000000000000A88F +:10F5500022C02F3700000000000084C037ACB0325A +:10F56000000000000000000C0B000032FFFF000054 +:10F57000000000C0AF4DB030000075148000008066 +:10F580000240B0B600000000000000C06F01FC3572 +:10F590000000000000000000073F013200420000B0 +:10F5A00000080000878D2A3A0000000000100000CB +:10F5B0000700B03200000000001800000700D03241 +:10F5C00000000000000000C03FC13834000000000F +:10F5D00012010048F201FC5400007A14000000807F +:10F5E000020000900000FFFF000000800200009079 +:0CF5F000000036000000008002000090C7 +:00000001FF diff --git a/trunk/firmware/sxg/saharadownloadB.sys.ihex b/trunk/firmware/sxg/saharadownloadB.sys.ihex new file mode 100644 index 000000000000..0309852443b6 --- /dev/null +++ b/trunk/firmware/sxg/saharadownloadB.sys.ihex @@ -0,0 +1,3385 @@ +:10000000020000005CD300000C00000000000000B3 +:10001000FF1F00000100000000000088824D293A07 +:100020000000400300000080020000900000090072 +:100030000000008002000090000009000000008025 +:100040000200009000000900000000800200009003 +:10005000000009000000008002000090000009007C +:1000600000000080020000900000090000000080F5 +:1000700002000090000009000000008002000090D3 +:10008000FEFF0000000000AC020036320000360027 +:10009000000000A80200009200003610000000805E +:1000A0000200009000003610000000800200009066 +:1000B00000003610000000800200009000003610A2 +:1000C0000000008002000090000036100000008058 +:1000D0000200009000002000000000D80F8028924D +:1000E00000002100000000D80F80289200002200AC +:1000F000000000D80F80289200002300000000D8E4 +:100100000F402B9200002400000000D80F8028929E +:1001100000002500000000D80F8028920000260073 +:10012000000000D80F80289200002700000000D8AF +:100130000F80289200002800000000D80F8028922D +:1001400000002900000000D80F80289200002A003B +:10015000000000D80F8028920000360000000098B0 +:100160001E80E99A00002C00000000D80F80289221 +:1001700000002D00000000D80F80289200002E0003 +:10018000000000D80F80289200002F00000000D847 +:100190000F80289200003000000000D40F00009271 +:1001A00000003000000000D40F400092000030003A +:1001B000000000D40F80009200003400000000D442 +:1001C0000FC0009200003000000000D40F00019228 +:1001D00000003000000000D40F4001920000300009 +:1001E000000000D40F80019200003000000000D415 +:1001F0000FC0019200003000000000D40F000292F6 +:1002000000003000000000D40F40029200003000D7 +:10021000000000D40F800292000036100000008021 +:100220000200009000003000000000D40F00039294 +:1002300000003000000000D40F40039200003000A6 +:10024000000000D40F80039200003000000000D4B2 +:100250000FC0039200000000000000D05F3F003498 +:10026000000036100400008042FFFCB000000000D7 +:10027000000000881280FD3A000036100000008067 +:10028000020000903610361002010080828DFDBC05 +:1002900000000000000000881280FD3A000000000D +:1002A000000000F803C001323800000000010084A3 +:1002B000824D281A000036000000007409400092A8 +:1002C00000004F00000000FC020000920000480007 +:1002D000000000800200009000004D00000000902F +:1002E0000E80189200008F020000000008C02092CB +:1002F00000007F00000000000800219200008D0235 +:10030000000000000840219200007C000000000076 +:10031000088521900000F202000000EC02C0229249 +:100320000000CE0300000080020000900000560094 +:10033000000000FC0240189D00005100000000D0A9 +:1003400002000092000020030000008002000090E4 +:100350000000361000000080020000900000000045 +:10036000000100800200007000004C00000000004E +:1003700009C0219200004A0012010000088522B045 +:1003800018003600000000F8738A0299000084000B +:100390006A000080020000B008008400000000F83D +:1003A0002340019900000000000100E80200907263 +:1003B0000000361080010080B200E9B600003E0364 +:1003C0000000007C1EC0E79A08000000000000F852 +:1003D000134001390000320300000008B801009406 +:1003E000000036100300007809401ABD000000002C +:1003F000000000A0E125003408000000000000F823 +:10040000B340013900003E03B20000D8020000B240 +:1004100000004005001001F802006E920000590033 +:100420000A0100CC020000B200006A00030100FCD7 +:10043000024019BD08003E03000000F8A3400199E6 +:10044000000000000000008401C02F320000000006 +:1004500000000090F1010034000000000000009452 +:1004600001C02F3202005C00B00000A0F20B00B906 +:1004700000005F000401008002C0B0BC0000680002 +:10048000A000008002000090000061008001008058 +:10049000F24BD0B600006800A0000080020000907F +:1004A00000000000A0000004FD4BD03400006600F6 +:1004B000800100801281FCB600002D0F000000D8E2 +:1004C000020000D218000000000000F8730A03398F +:1004D00068003600000000C0020036920000040FE1 +:1004E000000000D8020000D218003600000000F81A +:1004F000730A03F900005900030100FC024018BD13 +:1005000000007B00030000FC024019BD0000000059 +:100510000000009401C02F320000000000000080A5 +:10052000F1010034000000000000008401C02F32FF +:1005300002006D00B00000A0F20B00B900007000D6 +:100540000401008002C0B0BC00007900A00000805F +:10055000020000900000720080010080F24BD0B6D3 +:1005600000007900A0000080020000900000000060 +:10057000A0000004FD4BD034000077008001008013 +:100580001281FCB600002D0F000000D8020000D23E +:1005900018000000000000F8730A033979003600E3 +:1005A000000000C0020036920000040F000000D8D6 +:1005B000020000D218003600000000F8730A03F9A8 +:1005C00000006A00030100FC024019BD0000590050 +:1005D000030100FC024018BD08003E03000000F8C3 +:1005E000A340019908000000000000F873400139A1 +:1005F0000000840080010080E20180B600008100DC +:1006000000000080020000900800ED020C0000F8DD +:10061000534001B90000830080010080E20180B6F0 +:100620000000361012000068020580B0000032039E +:100630000000006C1FC0F69A0000000000000000DF +:100640000805803000000000000000FC02000132BC +:10065000000000000000001008803D320000000093 +:10066000000000D40200003202A0000000000000E0 +:10067000A90D8032000088001200005402A438B294 +:10068000000200800000002C0800373218003600FD +:10069000000000F8730A03F90000000000080004DD +:1006A00008807232000090009F00005C080072B267 +:1006B00087008F008001008082CD85B00000A100FE +:1006C0000000002CD8C182940000A1000000002C82 +:1006D00088C18294000F99000401008082CD85B00A +:1006E00000009900800000804281FCB600003610B6 +:1006F00012000068020580B0000000000000006CDD +:100700001FC0F63A00000000000000FC02000132A9 +:1007100000009700040100DC43603DB30000320399 +:10072000000000FC0200009218000000000000F829 +:10073000738A033994003600000000C0020036922C +:1007400010009F0087000078792116B801009F00F3 +:1007500004010080828D97BC8700A8008700007884 +:1007600089CD85B000009E0004010080128097BCF6 +:100770000000A1000000002CD8C182940000A1005C +:100780000000002C88C182940000A8008001008035 +:10079000F2C085B60000A8000000002C98C1829429 +:1007A0000000A70080010080D2C182B60000A8002E +:1007B000800100807280FCB600000000001800A8D4 +:1007C000423D723000000000541889FCF2C07C30B9 +:1007D0000000CB0080010080F2C185B60000A900B6 +:1007E00000000080020000900000A3008000008054 +:1007F0008280FCB600000000540000FC02000032C1 +:100800008000802000000080C2CD85300000BE0046 +:100810000B000080020000B018000000000000780B +:1008200079A116382000CB0004000080828D97BC8F +:100830000000B500800100806280FCB68700B50032 +:100840008700007889CD85B00000B10004000080E9 +:10085000128097BC0000B50004010080228097BC84 +:100860000000B5008001008072C185B61000000054 +:1008700000000078796116380000BC000401008097 +:10088000328097BC0000CB000000002CB8C18294DD +:100890000000BC00800100805280FCB60000BC005B +:1008A0008000008072C185B60000BC00800100801D +:1008B00002C185B60000BC0080010080D2C185B6AF +:1008C000180000000000007879E116380000BC0034 +:1008D00004010080328097BC0000CB000000002C97 +:1008E000C8C1829400000000000000040800043227 +:1008F0000000CB000000002CA8C18294080000007A +:1009000000000078792117380000CB000400008037 +:10091000328097BC0000CB0004010080228097BC8D +:100920001F0000000012000889CD72300500000091 +:1009300000120000B9DC173800000000000000A819 +:10094000220090370000CB008000868022247CB6F5 +:100950000000361012000068020580B000000000A0 +:10096000000000FC020001320000C900040100DCAC +:1009700043603DB300003203000000FC020000921F +:1009800018000000000000F8738A0339C600360022 +:10099000000000C0020036920000CE00120100608C +:1009A000084023B2008200000000000808803632B0 +:1009B0000000C500000000641F40F69A00003610D9 +:1009C00012000024080023B200003610120000209C +:1009D00008C023B20000361012000018088023B2AD +:1009E00000000000000000FC020001320000D50001 +:1009F000040000DC43603DB318000000000000F874 +:100A0000738A0339D1003600000000C0020036921C +:100A100000000000000000FC020085320000000021 +:100A2000000000D80280013200000000000000D069 +:100A30000200003200C0E1001801000CA8CD3EB257 +:100A40000000D50012000038028081B200000000D2 +:100A50000000003C02008232000000000000003074 +:100A600002408232000000000000003402008632A2 +:100A700020800000000000080880363200000000DE +:100A80000000005C1FC0F53A00003203120100684C +:100A9000020580B0000036100000008002000090C7 +:100AA0000000000000180078090072320023E40002 +:100AB00004010080A2CD82B00000E500000000002B +:100AC00009000092000036109F16000029C172BC78 +:100AD00000000000001800000780813200000000C4 +:100AE0000020000007008232000000000028000003 +:100AF0000780973210000000003000001720903966 +:100B0000000000000038000007C082320000000032 +:100B1000000000D8020000320000000000000000C9 +:100B2000074080320000EE0080010080A2C182B642 +:100B30000000EF000008000057008097050000004B +:100B40000008000007A0043900003610041000005F +:100B5000074082B200000000001800000700863243 +:100B60000000F10012000050F2C138B41800360045 +:100B7000000000F8730A03F9000036101200006844 +:100B8000020580B00000F4001200004802C080B2EC +:100B900000003203CA010008E881809408000000C8 +:100BA000000000F89340013910000000540000FCE0 +:100BB000824D90360000F800F00100D8020000B22B +:100BC00000000000620401A802C06E3200000000B4 +:100BD0000004010059C06E370000000000040178D5 +:100BE00019C06E3A000000004E0401EC06BD9730BB +:100BF00000000000E00000F41E40EF3A000000009A +:100C000000188BCC074000320000000000000000FC +:100C100007400932000000000008000077C02937B3 +:100C20000000361004100000173D90BA00000000CC +:100C3000001800000780F432000003011200004099 +:100C4000F2C138B400000000000000FC32C02F30B8 +:100C5000000000000000001008803D32180036003F +:100C6000000000F8730A03F900000000000000D43F +:100C700002000032000090018038008022C072B66D +:100C800000000C01120000C8020020B20000130195 +:100C90001201005C088020B20000361012000060D3 +:100CA00002802CB218000000000000F8738A03399B +:100CB00009013600000000C002003692000000006A +:100CC000000000F81F80FF3A00000000000000FC58 +:100CD00032008530000068010400008042603DB3AE +:100CE00018000000000000F8738A03390F01360075 +:100CF000000000C002003692080000000000000062 +:100D000088CD853700000000000000200800723206 +:100D100000000000000800240800723200003610B5 +:100D20000410006C080072B2000000000018004CB3 +:100D3000080072320000361004200018080072B259 +:100D4000000000000030002808007232000000009F +:100D5000002800300800723200000000000000602F +:100D600008808232000022010600008062A082BC5E +:100D7000000000000000000007000632070000002D +:100D800000080000774A09390000361004100000FE +:100D9000070082B200000000CA190000074082323A +:100DA0000000210112000040F2C138B40000000030 +:100DB000000000D8024000320000470104380078EB +:100DC000D9C572B00000260180010080028097B66C +:100DD00000000000000000F882802F34000028018D +:100DE00080010080128097B600000000000000F82B +:100DF00092802F34040000000038003CB81C1738E3 +:100E0000000000000000003C28C083370000000004 +:100E1000003A002C08C07232000000000000001CE4 +:100E2000B8E0833A00000000CB2900200700003220 +:100E3000000046010400008002C081BC00000000E8 +:100E40000000003478A0813E000000000000001C7B +:100E5000D8E0813C00003501063A0080B25C83BCDA +:100E600000000000003A000089C172370700340119 +:100E70002B010004790A04B900000000CB00000433 +:100E80001941903400003801003A002C070000920C +:100E900000000000003A002CD7E0723C0000000087 +:100EA0000000000009000032000000000000000403 +:100EB00009000032000000000000000007648332D7 +:100EC000000000000008000007008032000036101B +:100ED0000410000007C086B20000000000180000E7 +:100EE00007C084320000550104000028D8A082BC4D +:100EF0000000000000000000D820803A00004101FE +:100F00000400008072802DBC00003F0112000044EC +:100F100012E438B200004201000000D812802D9A7D +:100F20000000BD0F00000004F94190F400004401EE +:100F300004000018D8A081BC00002D010000006C46 +:100F4000D8E0869A00007A0F0000004408802DF255 +:100F500000002D0100000030080000920000000099 +:100F6000CB19002007000032070049012B010004C3 +:100F7000790A02B900000000CB0000041941903446 +:100F8000000000004D000000A7A0813E000000000E +:100F90000008000007008032000036100410000036 +:100FA00007C086B2000000000018000007C08432AD +:100FB0000000550104000028D8A082BC00000000F9 +:100FC00000000000D820803A000052010400008098 +:100FD00072802DBC000050011200004412E438B2AF +:100FE00000005301000000D812802D9A0000BD0FB0 +:100FF00000000004F94190F400007A0F0000004462 +:1010000008802DF200004701000000300800009227 +:101010000000000000000004F94190340000560177 +:101020001200004412E438B218003600000000F844 +:10103000730A03F9000000000018000409807332ED +:1010400000000000002800088980733700000000BD +:101050000000008007008632410000000006008C7E +:101060000700363200005F012908008007C085B202 +:10107000000062012810008C070000B2000063012C +:101080000012008407000092000000000010008C95 +:10109000F7E0823A0000620128180080074090B211 +:1010A00000006301001200840700009200000000AD +:1010B0000012008427E482320000660104000080F0 +:1010C00042603DB318000000000000F8738A033945 +:1010D00063013600000000C00200369200000000EC +:1010E000000000FC02008532000036101200005C97 +:1010F00052812CB400000000000000D802800132B0 +:10110000000000000000008002003B3208406A013D +:10111000F0010008088036B2000000000004013829 +:1011200008C06E3200000000E00000F41E40EF3CFA +:10113000000071010B01008C080000B200006E017C +:10114000F2010080020000B000000000000000F08A +:101150000E003A3200008201E20000800E8083928D +:1011600000007101F2010078C93B3ABC00007B012C +:1011700002010080828097BC00000000000000A8EF +:101180000200E832000076010400008022A22ABC9E +:1011900000007A0104198B8002C07CBC00000000B2 +:1011A0000000008C18C0883A00000000000000A871 +:1011B00012802A3A00000000000000A802BD2A3078 +:1011C0000000740104010080E2A02ABC00007F013D +:1011D0000200008082C088BC00000000E20000081D +:1011E0000800003200000000000000A802808832E1 +:1011F0000000000000188BCC070000320000320312 +:10120000000000DC03000092000000000000003835 +:1012100008802A3200000000000000F00E003A3280 +:1012200000000000E20000800E802A320000000072 +:10123000000000A8028088320000000000188BCC5B +:101240000700003200000000000000DC0300003254 +:101250000000000000000000078083320000000052 +:101260000000000079C02937602000000000000065 +:10127000890D903A00000000CA0100D812802D3A72 +:101280000000000000000000070001320000000024 +:10129000000800000700903200000000001000006D +:1012A0000740E83200000000001800000780E83224 +:1012B00000000000000000FC0200003200003203C9 +:1012C00012010048F2C138B400008E010000008015 +:1012D00002000090000000000030007808807232A8 +:1012E0000400000000380054A85C16380B00000011 +:1012F0000038002CA8DC1638140000000000001C88 +:10130000884D853A0000000000000020080072327D +:1013100000000000000800240800723200000000F5 +:101320000010006C08007232000000000018004C31 +:10133000080072320000361004200018080072B253 +:101340000000000000280030080072320000A101F7 +:10135000083C0014188072BC00000000000000145B +:101360001840813C00000000000000000700063229 +:101370000700000000080000774A09390000361015 +:1013800004100000070082B200000000CA1900002B +:10139000074082320000A00112000040F2C138B4C0 +:1013A00000000000000000D80240003200000000F1 +:1013B0000000006478C029370210000000000064BB +:1013C000884D863A000000000000008008000032CE +:1013D0000000000000000040080000320000000093 +:1013E0004D00000077A0813E0000000000080000D2 +:1013F00007408632000036100410000007C086B295 +:10140000000000000018000007C084320000B9018D +:101410000400001CD8E081BC000000000000006453 +:10142000D860863A0000AF010400008072802DBCB5 +:101430000000AD011200004002C038B20000B5014A +:10144000000000D812802D9A0000AF011200004069 +:10145000F2C138B418003600000000F8730A03F92E +:101460000000B4010401008002802DBC0000B00126 +:10147000670000F8A2802FB500003610120000E8C7 +:1014800002C021B200000000000000D8024000327B +:101490000000B70104000018D8A081BC0000A6011C +:1014A0000000006CD8E0869A00005D0E0000004449 +:1014B00008802DF20000A601000000300800009214 +:1014C0000000B90112000040F2C138B41800360023 +:1014D000000000F8730A03F90000BE010401008057 +:1014E00002802DBC0000BA01670000F8A2802FB571 +:1014F00000003610120000E802C021B20000C9014D +:1015000004010080020084BC00000000000000D440 +:101510000240003200000000000000A42240853A92 +:10152000040000000018004088CD74360000000060 +:10153000000000402800843700000000000000D4B4 +:10154000020000321400C9010400001C880D84BC94 +:1015500000000000000000780961853A8000361024 +:1015600006010080828D97BC00000000000000642E +:10157000D860863A0000B501000000D80240009211 +:101580000000CB0104000018D8A081BC0000CD01F0 +:101590000000006CD8E0869A00005D0E0000004458 +:1015A00008802DF20000000000000030080000322A +:1015B00000000000000000D40240003200000000E3 +:1015C000000000A422C0823A000000000000003C9D +:1015D000B860853C0400D3018100006088CD74B6FA +:1015E0000000000000040028F8A0753C0000D401B1 +:1015F00000080074088075920000000000080028B0 +:10160000F8A0753C000000000000002808A1823C02 +:1016100000000000000000A4F2602A3A0000000070 +:101620000008004808007532000000000020007C1F +:10163000088075320900DA01041A007088CD74B090 +:1016400009000000001A004C87CD74317F000000B3 +:1016500000000064884D8631000000000000006436 +:101660002840863A00000000000000D80240003206 +:10167000000000000010000007408632000000005B +:10168000000000D8028000320000000000100000BE +:101690005761863A0000E301120000C8020020B240 +:1016A0000000E6011201005C088020B20000361044 +:1016B0001200006002802CB200000E012A0100D44A +:1016C000020000B218003600CA0000F8730A03F9DD +:1016D00000000F01000000F81F80FF9A00000000CA +:1016E000000000D4024000320800000000000000AA +:1016F00088CD8537000000000000001CE8A1823E74 +:1017000000000000000000A42240853A0000000014 +:1017100000080050078084320000ED0104010080C1 +:1017200072A082BC00000000001A004CC7E17432B5 +:10173000000000000000006808E1813A0000F001AC +:1017400090010078F9A186BA00000000000000783E +:101750001980973A00000000002000580780973257 +:1017600000000000000000D80280003200000000ED +:101770000000000007008432000000004008000064 +:101780005721803A0000F4011200004CF2C138B435 +:1017900000000000000000000821803A0000000066 +:1017A0000000000408C0813200000000510000D891 +:1017B00002C0003200000000000000D4020000322D +:1017C00000000000CB190020070000320700FC01D8 +:1017D0002B010084780A02B900000000CB000084CD +:1017E00018418834000000004D00000077A0813EC1 +:1017F00000000000000800000700803200003610E2 +:101800000410000007C086B20000000000180000AD +:1018100007C08432000036109F000028D8A082BC88 +:10182000000014020400001CD8E081BC0000080283 +:101830002D000000D82080BA00000502120100E847 +:1018400002C021B218003600000000F8730A03F944 +:10185000000007020401008022802DBC0000080265 +:10186000CD0100D80240849200000402000000F87C +:10187000A2802F9500000B020400008072802DBC16 +:10188000000009021200004412E238B20000120205 +:10189000000000D812802D9A000000000000008493 +:1018A000F841883400000C021200004412E238B201 +:1018B00018003600000000F8730A03F90000110256 +:1018C0000601008022802DBC00000D02670000F898 +:1018D000A2802FB500000E02000000E802C0219295 +:1018E00000000000000000D802C0003200005D0EC1 +:1018F0000000004408802DF20000FA0100000030D2 +:101900000800009200001A0280000080D2802FB6EA +:1019100000001702120100E802C021B218003600D0 +:10192000000000F8730A03F90000190204010080A6 +:1019300022802DBC00001A02000000D802408492D0 +:1019400000001602000000F8A2802F9500000000A1 +:10195000CD000084F841883400001B0212000044CE +:1019600012E238B200000000000000D40240003251 +:1019700000000000000000A422C0823A0000230200 +:1019800004010080420086BC0000000000080058EE +:1019900007408732000022028F010074184087BA86 +:1019A0000000000000000074080000320000250262 +:1019B00000040058F7A0869A00000000000000789C +:1019C000F9A0863A2800000000080058878D973C4F +:1019D00000000000000000D80240003218000000A3 +:1019E00000000000B7608539080000000008000012 +:1019F00087CD8537000028021200004CF2C138B4B0 +:101A0000000000000000004818A0843A0000000018 +:101A1000000000D40200003200000000000000803E +:101A200057A1863A410000000006008C07003632BC +:101A3000000000000008008007C0853200000000A0 +:101A40000010008C0740853200000000000000D824 +:101A5000028000320000361004000058088071B285 +:101A600000000000000000800880003218003600EE +:101A7000000000F8730A03F9000035020401008039 +:101A800002802DBC00003202000000F8A2802F95D9 +:101A90000000320204010080180088BC00003802F7 +:101AA00090190058E89C85BA00000000000000581A +:101AB0001880853A000000000018008007858530F6 +:101AC00000003D0204010080420086BC00000000CE +:101AD000000000D8024000320000000000000008B2 +:101AE0008980713700003E020012008427E4829250 +:101AF00000000000001200840700003200004202D3 +:101B0000270000FC020085B20000420204000080B1 +:101B100042603DB318000000000000F8738A0339EA +:101B20003E023600000000C002003692000036106F +:101B30001200005C52812CB40000450204010080B8 +:101B4000028082BC00006801000000D40200009204 +:101B50000000480204010018D8A081BC00005D0EFE +:101B60000000004408802DF20000E001C7010030B1 +:101B7000080000920000E001C701006CD8E0869ADE +:101B800008000000C60100F893400139000032034C +:101B900080018080320B6AB600000C0E0000003C11 +:101BA000030038F200004E020406018002C06EBC41 +:101BB00000003103000601EC56E06E9A00000000C0 +:101BC000C40701EC56E06E3A08C04F021200004014 +:101BD000A2CD39B218003600000000F8730A03F9EC +:101BE0000000361003B8000009C06EBD53020000AB +:101BF00000000088820D903A2F007C050000001C38 +:101C000008003692000036100000008002000090AC +:101C10002C007C050000001C0800369200003610E5 +:101C200000000080020000900000361000000080DC +:101C300002000090000036100000008002000090BA +:101C400038007C050000001C0800369239007C0535 +:101C50000000001C0800369208000000000000F898 +:101C60009340013900000C0E0000003C030038F2E4 +:101C700000000000000000F842802F3408C05E021F +:101C800012000040A2CD39B218003600000000F862 +:101C9000730A03F9000000000004017809C06E32E5 +:101CA00000000000006201EC068097320000000096 +:101CB000000601EC0640003200006302B50000D8C7 +:101CC000020000B200000000A50080A0360B6A34BC +:101CD00000000000003002E806C02C3200000000C6 +:101CE000001801E00600003200000000000000F8CB +:101CF00082852F3000007D050000001C0800369210 +:101D000008000000000000F89340013900006C0258 +:101D100080008080320B6AB6000032030000008031 +:101D20000200009000000C0E00000038030038F2A2 +:101D300000006F020402018002C06EBC000031038B +:101D4000000201EC56E06E9A00000000C00301ECB6 +:101D500056E06E3A00C0700212000040A28D39B207 +:101D600018003600000000F8730A03F900007C0236 +:101D70003828001809006EB200007502042101081D +:101D800069246EBC03007D050000001C080036922B +:101D90000000790202300080829B90BC0000780233 +:101DA0000603018012C06EBC04007D050000001C0B +:101DB0000800369205007D050000001C08003692E0 +:101DC00000007B020603018012C06EBC0B007D0583 +:101DD0000000001C080036920C007D050000001C6D +:101DE0000800369200007E020421010869246EBCBE +:101DF00003007D050000001C0800369200008202EE +:101E000002300080829B90BC0000810206030180AA +:101E100012C06EBC04007D050000001C0800369254 +:101E200005007D050000001C0800369200008402B9 +:101E30009F31010C69246EBC000000000000000C02 +:101E4000090000320000880204310004899B90BC24 +:101E5000000087020603018012C06EBC20007D05D1 +:101E60000000001C0800369221007D050000001CC7 +:101E70000800369200008A020402018012C06EBC83 +:101E800022007D050000001C0800369200008C0234 +:101E90000401000039A490BC23007D050000001C53 +:101EA0000800369224007D050000001C08003692D0 +:101EB000080036100C0000F8634001B910009102D0 +:101EC000C50100CC022015980800ED020C0000F8B6 +:101ED000434001B910000000C50100CC02201538B4 +:101EE00000000C0E0000003C030038F200009402D9 +:101EF0003601005C080580B00F007D050000001C65 +:101F00000800369210000000002C0200A9DB853981 +:101F1000000095021200005402A438B20000000034 +:101F20000008028C08C06E3200000000000C02980D +:101F300028806E37000000000000009C3822143713 +:101F400000009E020430002808006EB20000361027 +:101F50000410006C08006EB2000000000018004C75 +:101F600008006E32000036100420001808006EB21F +:101F70000500A1020038020078E16E99000000001F +:101F8000510000D802000032000000000038027842 +:101F900009C06E32050000006808000077A197397B +:101FA0000000A3021201000009C021B2180036008F +:101FB000000000F8730A03F900000000545401FC0B +:101FC00002C06E321410A70204000080A20D72B08D +:101FD0000000510F0000002809C002F20E007D052C +:101FE0000000001C080036920000B602331500A461 +:101FF00002C072B20000EA0280010080B20172B633 +:102000000101AD0204290080828D74BC080AEA0235 +:10201000042D0080828D74BC000000000030007C24 +:10202000080075320000B402003800881800759C62 +:10203000080AEA0204290080828D74BC10000000A6 +:10204000002C007C888D7537000000000030007C7B +:1020500068DD87320000B3029F390088188075BCA4 +:102060001000000000340088888D75370000B4022D +:10207000000000881880889C100000000034008850 +:10208000689D88390000B7029FF1018082DB87BC20 +:102090000000EA0200000080020000900000EA0256 +:1020A00080000080B20172B6000000000008004805 +:1020B0000800753200000000001000700800753242 +:1020C00000000000001C007438A275370000BC023C +:1020D000831B007808C074B200000000000000F804 +:1020E000C2802F340000CC029F780180C2216EBCD8 +:1020F0000000C0029F990164881B87BC0000CD02CC +:102100009F680164885B86BA0000000000000064DC +:102110000800003200000000001600A402C0723265 +:1021200000000000003C02A4B25B2A3A000000005C +:10213000003A027809C06E320000CE0208010004A5 +:10214000E8A575BC1000EA020B01001C080036B2BD +:102150000000CC0204A10180829B84BC00007D05AC +:102160009F980180C2216EBC00007D0506B10180F0 +:10217000825B87BC0000E9020B010080020000B016 +:102180000000CD0204990180C2216EBC0000E7026C +:1021900002D4018092FB6EBC16007D050000001C7D +:1021A0000800369217007D050000001C08003692DA +:1021B0001C007D050000001C080036920000D002C3 +:1021C00004A10180829B84BC0000D70206A8018084 +:1021D000825B80BC0000D40204A9018002006EBCB6 +:1021E0000000E80204A10180829B84BC0000E80298 +:1021F00004010080124080BC14007D050000001C1A +:10220000080036920000E8029FA0017829216EBCE8 +:102210000000E8020201008012A097BC0000CC027E +:1022200000000080020000900000E3020400008033 +:10223000028082BC0000DC0202000080A26080BC40 +:1022400006007D052C01001C080036B200C0E0022B +:1022500004010080A28D2FB006007D050000001C47 +:10226000080036920000E00204000080A26080BCFA +:102270000000DF020603018012C06EBC09007D056C +:102280000000001C080036920A007D050000001CBA +:10229000080036920000E2020603018012C06EBC04 +:1022A00007007D050000001C0800369208007D052F +:1022B0000000001C0800369202007D053801001C59 +:1022C000080036B20000E602020C0280A25B80BC6D +:1022D0001F007D050000001C080036921E007D05D1 +:1022E0000000001C080036920000EB0200000028ED +:1022F000094000920000EB020000002809800092D3 +:102300000000EB020000002809C000920000EB0270 +:1023100000000028090001920E00510F0000001C6F +:10232000080036F200007D050000008002000090E9 +:10233000100036102A0000CC022015B800000C0E48 +:102340000000003C030038F21D00F102800100781B +:1023500009E000B81D007D050000001C0800369251 +:1023600015007D050000001C0800369200000000EA +:102370000000001CA805283008000000000000F83C +:102380008340013900003E0380018080320B6AB631 +:1023900000000C0E00000038030038F27E0500003B +:1023A0000000008882CD813A0000F9021D41025CE4 +:1023B000F80168B441003103000000F8A28D2F91AC +:1023C00010000000D02C0200A9DB85390000960225 +:1023D0001201005402A438B20000FA02000000808A +:1023E000020000900000000304B0008002006EBCF8 +:1023F0000000000380B9008082806EB600002510C6 +:102400000078016008006EF230007C05D700001CE7 +:10241000080036920000020380010080D2812FB6AE +:1024200031007C05D700001C080036920000040330 +:102430008001008042812FB635007C05D700001C4A +:10244000080036920000110304A8010809006EB2CA +:102450000000000000200208899B903E0000000060 +:1024600000A00108899B903A000011039F88010891 +:10247000899B90BC000000000034020009C06E3D42 +:1024800000000000000C020409A46E3700000D03D8 +:102490000200008012A490BC0000000000000008B0 +:1024A000198090370000110302010280829B90BCCA +:1024B00031007C05D700001C080036920000110393 +:1024C00004B0008002006EBC001211030401008001 +:1024D000A28D2FB032007C05D700001C0800369278 +:1024E00000003103000000F872812F950000000009 +:1024F000000000F842802F3408C050021201004052 +:10250000A2CD39B200001303000000800200009049 +:1025100008000000000000F89340013900003E036D +:1025200080018080320B6AB60000000000000014B9 +:102530000840903200000C0E00000038030038F212 +:102540007E0500000000008882CD813A080000006E +:10255000000000F89340013900003E0380018080B4 +:10256000320B6AB600000C0E00000038030038F28F +:1025700000001F030420018052206EBC26007D0550 +:102580000000001C0800369225007D050000001C9C +:102590000800369200002503040100D81E80EDBC1F +:1025A00000002103B70000D80EC0EDB200002403E4 +:1025B00004010080423BEEBC00000000000000E08F +:1025C0001E00EE3A00000000A70000D00E00EE3220 +:1025D00000000000007486CC02806C320000000015 +:1025E000000000000940E7320000290380018080DC +:1025F000320B6AB6360028031200002C82CD2EB2B0 +:1026000000002B030401008042C52CBC00002C03F9 +:10261000000000CC0200009200000000000000CC8E +:1026200012C02C3A0000270304010000190090BCDE +:1026300000000000007486C806C02C3208003E036B +:10264000000000F8C34001990000FA0D0000002CC2 +:10265000090000F200003203000000800200009038 +:102660000000FA0D0000002CF90100F400003B030B +:1026700004000028098080B200000000000000D89B +:10268000020000320000F10E00000008080000D235 +:1026900000003B0304000080028092BC180036005A +:1026A000000000F8730A03F900003E038001008077 +:1026B000A2802FB600003E031201000009C021B223 +:1026C00018000000000000F8730A03393E033600CA +:1026D000000000C00200369200003E03800100802E +:1026E000A2802FB600003E031201000009C021B2F3 +:1026F00018003600000000F8730A03F9000000001B +:10270000000000F80200003218003600000000F857 +:10271000738A029910000000000000E403003632C2 +:1027200002000001000000E003003732000000005A +:10273000000000E40300363204000001000000E065 +:1027400003003732AA040000000000E40300363220 +:1027500009000001000000E0030037320000000023 +:10276000000000CC0F00003200070000000000E471 +:102770000300363206000001000000E0030037329B +:1027800020000000000000E40300363208000001D1 +:10279000000000E00300373200010000000000E408 +:1027A0000300363205000001000000E0030037326C +:1027B00030000000000000E4030036320700000192 +:1027C000000000E00300373200A00000000000E439 +:1027D0000300363208000008000000E00300373232 +:1027E00000000000000000A0020000320000000015 +:1027F000000000000B000032000052038B0100A01B +:1028000012002ABA00000000000000A802000032F6 +:1028100000000000000000E0070000320000550347 +:102820000601008002802ABC000000000000009C1D +:102830000200003200000000000000D4020000325C +:1028400000000000000000CC020000320000000088 +:10285000000000D80200003200000000000000D09C +:102860000200003200000000000000DC0200003224 +:1028700000000000000000F802000032000000002C +:10288000000000C80200003200000000000000C488 +:1028900002000032000058038501009C12C029BAD2 +:1028A00000000000000000E4030036320B000004CA +:1028B000000000E00300373280000000000000E468 +:1028C0000300363213000004000000E0030037323A +:1028D00000200000000000E4030036320C00000479 +:1028E000000000E00300373200000000000000E4B8 +:1028F000030006320F000004000000E0030037323E +:1029000000440000000000E4030036320D00000423 +:10291000000000E00300373200040000000000E483 +:102920000300363214000004000000E003003732D8 +:102930009F000000000000E4030036321500000490 +:10294000000000E00300373200000000000000E457 +:102950000300363218000004000000E003003732A4 +:1029600060000000000000E4030036321D00000497 +:10297000000000E00300373200000000000000E427 +:10298000030004321E000004000000E003003732A0 +:1029900070000000000000E4030036321F00000455 +:1029A000000000E00300373200000000000000E4F7 +:1029B0000300003220000004000000E00300373272 +:1029C000A0030000000000E40300363217000004FA +:1029D000000000E00300373240000000000000E487 +:1029E000030036321B000004000000E00300373211 +:1029F00060000000000000E4030036321C00000408 +:102A0000000000E00300373200000000000000E496 +:102A10000340003216000004000000E003003732DB +:102A200000010000000000E4030036321A00000438 +:102A3000000000E00300373220010000000000E445 +:102A40000300363219000004000000E003003732B2 +:102A500080000000000000E4030036320B0000019B +:102A6000000000E00300373200010000000000E435 +:102A7000030036320C000001000000E00300373292 +:102A8000FEFF0000000000AC020036320000000033 +:102A9000000000000900003218000000000000F8EB +:102AA0000364023900008B0385010000190090BA0D +:102AB00025260000000000E403003632010000017A +:102AC000000000E00300373200000000000000803A +:102AD0000F00003200000000000000840F000032F0 +:102AE00008000000000000F8F34001390800000071 +:102AF000000000F8E340013908000000000000F881 +:102B0000C340013908000000000000F8B34001395B +:102B100008000000000000F8A34001390800000090 +:102B2000000000F89340013908000000000000F8A0 +:102B30008340013908000000000000F873400139AB +:102B400008000000000000F86340013908000000A0 +:102B5000000000F85340013908000000000000F8B0 +:102B60004340013908000000000000F833400139FB +:102B700008000000000000F81340013900000000C8 +:102B8000000000F80380003200000000000000C8D0 +:102B90003F80FC35000000000000009C0200003275 +:102BA0000000000000000000030000326E00000082 +:102BB000000000D0020036320000000000000028B3 +:102BC000034038320000361004010080D20130B6D4 +:102BD0000000A303040100D012002DBCE00300009C +:102BE000000000E40300363203000001000000E0B2 +:102BF0000300373200000000170000D0020000324E +:102C000000000000000000ACE10000340000000003 +:102C1000000001E00600003200000000000801E4AE +:102C20000600003200000000000E01EC0600003239 +:102C300000000000001001E006000032000000006B +:102C4000000000D012002D3A6E00AB03020100809C +:102C5000820D2DBC020000000000009CAE0D02326F +:102C600000000000000000A8020000320000000088 +:102C7000008886CC0700363200000000008A86CC2F +:102C80000700003A002400000000000409803632EA +:102C90000000361012000064024090B200000000F4 +:102CA000000000042940903A0000B70312000078A9 +:102CB00009C020B2000000000000007809459030F3 +:102CC0000000B50302010080C28297BC0000000032 +:102CD000000000840200003200000000000000CC70 +:102CE000030000320000BB038E010080024028B2C6 +:102CF0000000510E000000D8020000D2150F0000A5 +:102D00000000008C0E0036325200000000000074FB +:102D10000E00363218000000000000E403003632D6 +:102D200009000002000000E003003732FECA000084 +:102D3000000000E4030036320A000002000000E058 +:102D4000030037320000C60312010000094020B220 +:102D50000000C40300000080020000900000C603D1 +:102D600012000004094020B20000C9039F01008046 +:102D7000020090B20000C80312000008094020B20F +:102D80000200C40304010078092417B806000000FB +:102D900000000078096416380000C40304010080B4 +:102DA000028197BCFE0000000000004403003632A0 +:102DB000FE00360000000048030036920000361086 +:102DC00012000000094020B20000CF0312000004EE +:102DD000094020B20000D2039F010080020090B29F +:102DE0000000D10312000008094020B200000000DA +:102DF000000000B402009032000036100000008095 +:102E000002000090000036100000008002000090D8 +:102E10000000361000000080020000900000361014 +:102E200000000080020000900000361000000080CA +:102E300002000090000036100000008002000090A8 +:102E400000003610000000800200009000003610E4 +:102E5000000000800200009000003610000000809A +:102E60000200009000003610000000800200009078 +:102E700000003610000000800200009000003610B4 +:102E8000000000800200009000003610000000806A +:102E9000020000900600EA030000000C0964169886 +:102EA00000004902000000140840909200006902EE +:102EB0000000001408409092340015030000001C2C +:102EC00008003692120015030000001C080036921C +:102ED0003A0015030000001C08003692000036106E +:102EE000000000800200009000005B02000000145F +:102EF0000840909200001D04000000800200009035 +:102F000000001A030000001408409092EB03000038 +:102F10000000008882CD903A0D000D04000000FCF6 +:102F200002E416980D001E04000000FC02E416984E +:102F30000D002704000000FC02E416980000340491 +:102F4000000000800200009000003D04000000002E +:102F50000940909D000040040000008002000090A5 +:102F600000004904000000800200009000005204AC +:102F7000000000800200009000005B0400000000E0 +:102F80000940909D00006004000000800200009055 +:102F900000006804000000000940909D00006D04DE +:102FA00000000080020000900000DC04000000002F +:102FB000090000920000DC040000000009400092BB +:102FC0001D07DE04000000A0020036920000EC04A1 +:102FD0000000008002000090000036100000008019 +:102FE0000200009000001D04000000DC0F409092E1 +:102FF0000000B00400000080020000900000B50452 +:10300000000000D4020000921000CA0400000084F6 +:103010001F64149800001D04000000EC0E40909204 +:103020000000D604000000800200009000001D0493 +:10303000000000D40E4090920000D90400000080EF +:103040000200009000006D05000000DC0E40909230 +:103050000000FB0400000080020000900800000552 +:10306000000000501F24169800000F05000000D833 +:10307000020000920D001905000000FC02E4169801 +:1030800000001A05000000D0020000920000F600C7 +:10309000000000D002000092000035100000008007 +:1030A0000200009000003610000000800200009036 +:1030B00008000000000000F8934001390000000003 +:1030C000000000780945903000003E0306010080B2 +:1030D000228097BC02001004B00000A0F20B00B9DF +:1030E00000000000A00000046B41903400003E038B +:1030F000800100800240B0B600003E030400008062 +:103100000280B0BC00000000000000D802000032C5 +:1031100000000000000000A822C02F3700000000BF +:1031200000000000670100340042000000080000B9 +:10313000878D2A3A00003610041000000700B0B254 +:1031400000000000001800000700D03200001A0440 +:1031500012000048F2C138B418000000000000F866 +:10316000730A03393E033600000000C002003692A5 +:1031700008003E03000000F893400199000021047C +:103180009F000080020090B20000000000000008D4 +:1031900009409032000000000000000409C0FD3228 +:1031A00002002104B00000A0F20B00B900000000F2 +:1031B000000000000B8090320000000000000000C2 +:1031C0000D40903200000000A00000043B40B031F0 +:1031D00000001D040400008002C02FBCF20E1D047C +:1031E0000000008C0E00369208000000000000F87D +:1031F0009340013902002804B00000A0F20B00B98E +:1032000000002B04800100801240B0B600000000D6 +:10321000000000043B40B033000000000000000448 +:10322000FD4BD03500000000000000080B0000320C +:1032300000000000A000000C1BE4B03200003E03C0 +:103240000B000080020000B0000031040400008088 +:10325000024090B21F003E03000000801140009920 +:103260000000300404000080123EF8BA00000000A4 +:10327000000000800100F83200003E0300000090D2 +:103280000140F89200003610800000800281FCB6F8 +:10329000000038049F000080020090B2000000008F +:1032A0000000000809409032000000000000000407 +:1032B00009C0FD3200000000000000E403809032ED +:1032C00009000004000000E00300373200000000A5 +:1032D000000000E4034090320A000004000000E017 +:1032E0000300373200001D04000000C80F81FC9469 +:1032F00000000000000000E47300903C1000000497 +:10330000000000E00300373200001D0400000080D0 +:1033100002000090000043049F000080020090B271 +:10332000000000000000000809409032000000008A +:103330000000000409C0FD3200000000000000E4AD +:103340000380903201000004000000E003003732E7 +:1033500000000000000000E00F809032000000003C +:10336000000000E40340903202000004000000E08E +:103370000300373200001D04000000E40F4090926B +:1033800000004C049F000080020090B2000000008A +:103390000000000809409032000000000000000416 +:1033A00009C0FD3200000000000000E403809032FC +:1033B00003000004000000E00300373200000000BA +:1033C000000000A80E80903200000000000000E421 +:1033D0000340903204000004000000E00300373294 +:1033E00000001D04000000AC0E4090920000550447 +:1033F0009F000080020090B2000000000000000862 +:1034000009409032000000000000000409C0FD32B5 +:1034100000000000000000E403809032050000047A +:10342000000000E00300373200000000000000E46C +:103430000340903206000004000000E00300373231 +:1034400000000000000000440F80903200001D04C6 +:10345000000000480F40909200005D0404010080CD +:10346000824290BC00000000000000000900003211 +:1034700000000000000000E403009032120000048D +:10348000000000E00300373200001D04000000408F +:103490001F40909C000063049F000080020090B2D7 +:1034A0000000000000000008094090320000000009 +:1034B0000000000409C0FD3200000000000000E42C +:1034C0000380903207000004000000E00300373260 +:1034D00000000000000000E40340903208000004F7 +:1034E000000000E00300373200001D0400000080EF +:1034F0000200009000006A0404010080824290BC37 +:103500000000000000000000090000320000000080 +:10351000000000E40300903211000004000000E00D +:103520000300373200001D04000000FC1F40909C87 +:10353000000070049F000080020090B200000000B4 +:103540000000000809409032000000000000000464 +:1035500009C0FD32030900000000002808003632CF +:103560000000890400000030080036D200009304F7 +:1035700000000044088000D20000790404010080AB +:10358000020084B2030E000000000028080036325A +:103590008000890400000030080036D20000930447 +:1035A0000000004408C000D200007904040100803B +:1035B000020084B200008004000000440800019270 +:1035C0008002000000000000070036328C45000039 +:1035D000000800000700363200003610041000001A +:1035E000078090B2000000000018000007409032F1 +:1035F0000000000000000048F2C1383400007E04E2 +:1036000012000080020000B018003600000000F830 +:10361000730A03F920000000000000E403003632C2 +:1036200009000002000000E0030037320000000043 +:10363000000000E4034084320A000002000000E0C1 +:10364000030037328C450000000000A8020036322B +:10365000A000000000000000090036320000000059 +:10366000000000E0070000320000860406010000B0 +:10367000190090BC00001D040000008002000090B2 +:103680008C450000000000C80200363280020000B5 +:103690000000003C0800363200000000000000344A +:1036A0000800013200008E0402000080D2E083BCDA +:1036B000000000000000003408C083320000A404B1 +:1036C00000000080020000F000000000000000A0E8 +:1036D000078083320000000000000030D820833AC9 +:1036E00000008C040401003CD8E083BC0000000012 +:1036F00000010080020000500000000000000040B7 +:1037000008000032000000000000004808000032FD +:103710008C450000000000C80200363200020000A4 +:10372000000000C8828D2C3A800000000000003CA0 +:10373000080036320000000000000078098078326E +:103740005A5A000004010080828D975C00009C049E +:1037500002010048A89E84BA000000000000004852 +:103760001880843A00009A040601003C28C083BCFB +:10377000000000000000007809858430100000007F +:1037800000000048888D84360000A10490010048A4 +:10379000E8A584BA00000000000000481880843AC0 +:1037A0000000000000000048088584300000000090 +:1037B000040100800285845C0000000000010040DC +:1037C0000840005200000000000000E403008332C3 +:1037D00001000002000000E0030037320C00AA04E0 +:1037E0000000002CD8A082F905000002000000E0D3 +:1037F00003003732000000000000008002000030AB +:10380000000000000001003808403E720000000087 +:10381000000000E403C0823202000002000000E069 +:103820000300373202000002000000E003003732DC +:103830000000000000000080020000300000AC0426 +:1038400080000080F2403EB60000000000010080D1 +:10385000020000700000B3049F000080020090B2DC +:103860000000000000000008094090320000000045 +:103870000000000409C0FD320000000000000084C8 +:103880000E80903200001D04000000880E409092CF +:1038900008000000000000F8934001390000B9045E +:1038A0009F000080020090B20000000000000008AD +:1038B00009409032000000000000000409C0FD3201 +:1038C00000000000000000200740F532000000006A +:1038D0000008002007000032000000000010002057 +:1038E00007C0F53200000000001800200740F63243 +:1038F00000000000002000200780F63200000000D9 +:103900000028002007C0F632000000000030002030 +:103910000700F73200000000003800200780FF3267 +:1039200000000000000000D802000032000000008B +:1039300000000000074009320000000000080000FD +:1039400077C0293700000000001000000780903287 +:103950000000000000180000074090320000C6047C +:1039600012000048F2C138B418003600000000F818 +:10397000730A03F90000000000000008C8010034C9 +:1039800000003203000000FC020000920000CC04A2 +:1039900080010080F24190B60000CD04000000C814 +:1039A0002F81FC9400000000000000C82F81FC352E +:1039B00000000000000000800F4590300000D0049F +:1039C00002000080027EF8BC0000000000000084BD +:1039D0000F00F83200000000000000001940F83726 +:1039E00000000000000000843F40F83700000000A5 +:1039F000000000840F64F83A00000000000000009E +:103A00001900F83700000000000000803F00F83780 +:103A100000001D04000000800F24F89A0000D80464 +:103A200080010080F24190B600001D04000000C833 +:103A30004F81FC9400001D04000000C84F81FC95DC +:103A40000000DB0404010080024090BC0000000084 +:103A50000000000409C0003200001D04000000E462 +:103A60001E40909C00000000000000A8220090373B +:103A700000001D04000086C007409092080000006E +:103A8000000000F8934001390D000000000000FC28 +:103A900002E41638000000000000000009000232B5 +:103AA0000000E604040000800200B0B20000000044 +:103AB000000000000B00003220000000000000A009 +:103AC000820D2A3A0000E10404010000190090BCB4 +:103AD0000000E804000000287901009400000000C4 +:103AE000000000C83F80FC34408000000000002837 +:103AF000098036320000F10E000000D8020000D22A +:103B000000003E0304000080028092BC1800000008 +:103B1000000000F8730A03393E033600000000C0BD +:103B200002003692EA05F20404010080824D90BC46 +:103B300000000000000000EC0F00153200FE1F0026 +:103B4000000000F00F003732F0FF0000000000E836 +:103B50000F00363298050000000000F40F003632E6 +:103B60000000F804000000C84F80FC953623361092 +:103B700004010080824D90BC00000000000000ECB9 +:103B80000F80143200F81F00000000F00F003732E1 +:103B9000C0FF0000000000E80F0036329827000048 +:103BA000000000F40F00363200000000000000C8E2 +:103BB0004F80FC3404000000000000608F4D903AFC +:103BC0000000BC0E00000080020000D000001D04B8 +:103BD00000000080020000900000FD0480010080D1 +:103BE000024090B600000000000000C86F80FC3466 +:103BF0000000FF0480010080124090B60000000029 +:103C0000000000C85F80FC3400001D04000000803C +:103C1000020000900000020504010080324090B0D4 +:103C200080011D04000000C88F8DFC910000040578 +:103C300080000080124090B600000505000000C81A +:103C40007F80FC9500000000000000C87F80FC34ED +:103C50000000070580000080024090B600000805C3 +:103C6000000000C88F80FC9500000000000000C824 +:103C70008F80FC3400000B0580000080224090B64D +:103C8000F20E00000000008C0E00363200000D0520 +:103C9000000000C81F81FC95150F00000000008C7B +:103CA0000E00363200000000000000C81F81FC3406 +:103CB000100000000000004C1F24163800001D04F6 +:103CC000000000501F00F59C000012059F000080BE +:103CD000020090B20000000000000008094090328D +:103CE000000000000000000409C0FD3200000000D8 +:103CF000000000001700F53A8C44000000080000A6 +:103D0000070036320000361004100000078090B221 +:103D10000000000000180000074090320000160567 +:103D200012000040F2C138B418003600000000F85C +:103D3000730A03F900001D040000008002000090D7 +:103D400000001D04000000EC0340909200001A05E2 +:103D5000B20000D8020000B200000000000201EC36 +:103D600016E46E3A08000000000000F893400139A4 +:103D700000004005171001F802006EB2060025058C +:103D800004010080828D2FB003000000000000F8C5 +:103D9000828D2F3200C0050E00000028098036D227 +:103DA00000000000000201EC16C06E3C00000000A4 +:103DB000001886C80600003218003600000000F81F +:103DC000730A03F900002605000000D002000092EB +:103DD00000002B050419868002806CBC00000000E6 +:103DE0000000000009006E3200000000C10800045D +:103DF00009006E3200000000C01586780FC06C32DA +:103E0000000030058001008022802FB600003005C0 +:103E1000001886C806400092000000000040000024 +:103E200009006E3200000000C248000409006E3232 +:103E300000000000C01686780FC06C32000030050C +:103E40008001008012802FB600000000001886C894 +:103E500006000032004000000000002809803632D1 +:103E6000000038050402018002C06EBC0000050E8F +:103E7000000201EC16C06EDC0000360580000080F8 +:103E800002802FB600003805810000F822802FB490 +:103E900000003805001886C806400092000038056A +:103EA000820000F812802FB400000000001886C8BD +:103EB0000600003200000000001086C80600003234 +:103EC000000000000000000007C00A3200380000B7 +:103ED0000008000007003632000036100410000011 +:103EE000070090B200000000001800000740903268 +:103EF00000003D0512000040F2C138B41800360041 +:103F0000000000F8730A03F900000000170100F830 +:103F1000A2802F3400000000001086A842806C3779 +:103F200000004A051200703802007EB20000361010 +:103F30001200703C02007EB2000036101200703099 +:103F400002007EB2000036101200703402007EB211 +:103F50000000410502010080B2822ABC000000007E +:103F6000170000D002000032060025050401008081 +:103F7000828D2FB000001F050403018002C06EBCBB +:103F800000005505000000800200009000004C0574 +:103F90000403018002C06EBC00005505001086C8F5 +:103FA00046802A9600000000001086C846802A3607 +:103FB000000050058000008012802FB603005205DB +:103FC000220000F8828D2FB200005205001886C82A +:103FD00006000092000055058000008022802FB668 +:103FE00000000000C20100F802802F3500C0050E5D +:103FF00000000028098036D200000000000201EC19 +:1040000016C06E3C18003600000000F8730A03F971 +:1040100000000000001001E006802F3200000000C8 +:10402000000000A8E100003400000000A20000FC35 +:10403000020000320000320380010080A2802FB60F +:1040400000005B05B90100D8028001B20000320314 +:10405000000000F80200009200000000000000389C +:104060001880F73A0000000000000038F8BF8330E5 +:1040700000005F0504010080F2BD83BC0000320334 +:10408000A90000F80200009200C066051801000CAB +:10409000A8CD3EB200006205840000741F40F7BA4C +:1040A00000003203A90000F80200009200000000A6 +:1040B000000000740F00003200C066051801000CFB +:1040C000A8CD3EB218003600000000F8738A03F94C +:1040D00000006305000000B0020000920000000034 +:1040E0000000007C0F8083320000000000280000E8 +:1040F000070000320000000000300000070000321E +:104100000001008000380000070037320000000086 +:10411000003C000C0780833200006B051200004851 +:1041200002C080B200003203A9000008E801009438 +:104130000000730504010080A2C0EDBC5200000025 +:10414000000000740E00363200000000000000C0C5 +:104150000E400132407E0500000000B40E003732F0 +:1041600000000000000000C40E80073264007805E3 +:10417000000000CC0E003692290000000000007400 +:104180000E00363200000000000000C00E40003279 +:10419000A08C0000000000B40E00363200000000C9 +:1041A000000000C40EC0003200000000000000CC7F +:1041B0000E80023210000000000000E4337BEC3976 +:1041C0001E000001000000E0030037320000000084 +:1041D000000000C86EC0EC3700001D04000000D8CD +:1041E0000EC0ED927E0500000000008882CD813A6D +:1041F0007E0500000000008882CD813ABD050000E8 +:104200000018018882CD6E3AC605000000180188AA +:1042100082CD6E3ACF0500000018018882CD6E3A3B +:10422000D80500000018018882CD6E3AE105000033 +:104230000018018882CD6E3AEA0500000018018856 +:1042400082CD6E3AF30500000018018882CD6E3AE7 +:10425000FC0500000018018882CD6E3A05060000BA +:104260000018018882CD6E3A0E0600000018018801 +:1042700082CD6E3A170600000018018882CD6E3A92 +:10428000200600000018018882CD6E3A2906000041 +:104290000018018882CD6E3A3206000000180188AD +:1042A00082CD6E3A3B0600000018018882CD6E3A3E +:1042B000440600000018018882CD6E3A4D060000C9 +:1042C0000018018882CD6E3A560600000018018859 +:1042D00082CD6E3A5F0600000018018882CD6E3AEA +:1042E000680600000018018882CD6E3A7106000051 +:1042F0000018018882CD6E3A7A0600000018018805 +:1043000082CD6E3A830600000018018882CD6E3A95 +:104310008C0600000018018882CD6E3A95060000D8 +:104320000018018882CD6E3A9E06000000180188B0 +:1043300082CD6E3AA70600000018018882CD6E3A41 +:10434000B00600000018018882CD6E3AB906000060 +:104350000018018882CD6E3AC2060000001801885C +:1043600082CD6E3ACB0600000018018882CD6E3AED +:10437000D40600000018018882CD6E3ADD060000E8 +:104380000018018882CD6E3AE60600000018018808 +:1043900082CD6E3AEF0600000018018882CD6E3A99 +:1043A000F80600000018018882CD6E3A010700006F +:1043B0000018018882CD6E3A0A07000000180188B3 +:1043C00082CD6E3A130700000018018882CD6E3A44 +:1043D0001C0700000018018882CD6E3A25070000F6 +:1043E0000018018882CD6E3A2E070000001801885F +:1043F00082CD6E3A0000F702000000D40200009265 +:1044000000007202000000800200009037070000E8 +:10441000001C018882CD6E3A3C070000001C018818 +:1044200082CD6E3A41070000001C018882CD6E3AB1 +:1044300046070000001C018882CD6E3A4B07000041 +:10444000001C018882CD6E3A50070000001C0188D4 +:1044500082CD6E3A55070000001C018882CD6E3A6D +:104460005A070000001C018882CD6E3A5F070000E9 +:10447000001C018882CD6E3A64070000001C018890 +:1044800082CD6E3A69070000001C018882CD6E3A29 +:104490006E070000001C018882CD6E3A7307000091 +:1044A000001C018882CD6E3A78070000001C01884C +:1044B00082CD6E3A7D070000001C018882CD6E3AE5 +:1044C00082070000001C018882CD6E3A8707000039 +:1044D000001C018882CD6E3A0000FC02000000D46E +:1044E0000200009200001203000000D402000092BB +:1044F00000003C0900000010088001920000361006 +:1045000000000080020000900000361000000080D3 +:1045100002000090000036100000008002000090B1 +:1045200000003610000000800200009000003610ED +:1045300000000080020000900000361000000080A3 +:104540000200009000003610000000800200009081 +:1045500000003610000000800200009000003610BD +:10456000000000800200009000007B0900000010A5 +:1045700008800092000036100000008002000090C9 +:10458000000036100000008002000090000036108D +:104590000000008002000090000036100000008043 +:1045A0000200009000003610000000800200009021 +:1045B000000036100000008002000090000036105D +:1045C0000000008002000090000036100000008013 +:1045D00002000090000036100000008002000090F1 +:1045E00000008809000000100880009200003610CA +:1045F00000000080020000900000361000000080E3 +:10460000020000900000CF09000000100840019255 +:1046100000003610000000800200009000003610FC +:1046200000000080020000900000361000000080B2 +:104630000200009000003610000000800200009090 +:104640000000361000000080020000900000D70932 +:104650000000001008C0009200003610000000802A +:10466000020000900000D7090000001008C000926E +:1046700000003D0C000000100840019200003610C0 +:1046800000000080020000900000D7090000001028 +:1046900008C0009200003610000000800200009068 +:1046A000000036100000008002000090000036106C +:1046B00000000080020000900000E40900000010EB +:1046C00008C0009200003610000000800200009038 +:1046D0000000E4090000001008C0009200003D0C3A +:1046E0000000001008400192000036100000008019 +:1046F000020000900000E4090000001008C00092D1 +:10470000000036100000008002000090000036100B +:1047100000000080020000900000361000000080C1 +:10472000020000900000E2090000001008C00092A2 +:104730000000361000000080020000900000E20936 +:104740000000001008C0009200003D0C00000010A6 +:104750000840019200003610000000800200009026 +:104760000000E2090000001008C0009200003610AE +:104770000000008002000090000036100000008061 +:10478000020000900000361000000080020000903F +:1047900000003610000000800200009000007A0A3D +:1047A0000000001008C000920000D40900000010B2 +:1047B000080001920000CF0900000010084001929B +:1047C000000036100000008002000090000036104B +:1047D0000000008002000090000036100000008001 +:1047E00002000090000036100000008002000090DF +:1047F000000036100000008002000090000036101B +:1048000000000080020000900000750A0000001007 +:10481000088000920000D4090000001008000192F6 +:104820000000CF090000001008400192000036107F +:1048300000000080020000900000361000000080A0 +:10484000020000900000361000000080020000907E +:1048500000003610000000800200009000003610BA +:104860000000008002000090000036100000008070 +:10487000020000900000750A00000010080001927C +:104880000000D40900000010080001920000CF09C8 +:104890000000001008400192000036100000008067 +:1048A000020000900000361000000080020000901E +:1048B000000036100000008002000090000036105A +:1048C0000000008002000090000036100000008010 +:1048D00002000090000036100000008002000090EE +:1048E0000000E40A00000010088000920000D409D3 +:1048F00000000010080001920000CF090000001025 +:104900000840019200003610000000800200009074 +:1049100000003610000000800200009000003610F9 +:1049200000000080020000900000361000000080AF +:10493000020000900000361000000080020000908D +:104940000000361000000080020000900000E40A21 +:1049500000000010080001920000D40900000010BF +:10496000080001920000CF090000001008400192E9 +:104970000000361000000080020000900000361099 +:10498000000000800200009000003610000000804F +:10499000020000900000361000000080020000902D +:1049A0000000361000000080020000900000E309C3 +:1049B0000000001008800092000036100000008007 +:1049C000020000900000E30900000010088000923F +:1049D00000003D0C0000001008400192000036105D +:1049E00000000080020000900000361000000080EF +:1049F00002000090000036100000008002000090CD +:104A00000000361000000080020000900000361008 +:104A100000000080020000900000E3090000001088 +:104A20000800019200003610000000800200009093 +:104A30000000E309000000100800019200003D0C96 +:104A400000000010084001920000361000000080B5 +:104A5000020000900000361000000080020000906C +:104A600000003610000000800200009000003610A8 +:104A7000000000800200009000003610000000805E +:104A8000020000900000361000000080020000903C +:104A900000008C0700000010080001920000361092 +:104AA000000000800200009000008C070000001051 +:104AB00008400192000036100000008002000090C3 +:104AC0000000361000000080020000900000361048 +:104AD00000000080020000900000361000000080FE +:104AE00002000090000036100000008002000090DC +:104AF00000005E0C00000010084001920000540C01 +:104B0000000000100840019200005E0C0000001040 +:104B1000084001920000CF090000001008400192F7 +:104B200000003610000000800200009000005E0CC3 +:104B300000000010084001920000361000000080C4 +:104B4000020000900000361000000080020000907B +:104B50000000810900000010084000920000810957 +:104B60000000001008800092000081090000001081 +:104B700008C00092000081090000001008000192A6 +:104B80000000860900000010084001920000810921 +:104B90000000001008800192000081090000001050 +:104BA00008C0019200003610000000800200009052 +:104BB0000000361000000080020000900000361057 +:104BC00000000080020000900000490B000000106F +:104BD000088000920000490B0000001008C00092FD +:104BE0000000490B00000010080001920000CF09EE +:104BF0000000001008400192000036100000008004 +:104C0000020000900000490B0000001008C0019253 +:104C100000003610000000800200009000003610F6 +:104C200000000080020000900000361000000080AC +:104C3000020000900000361000000080020000908A +:104C400000003610000000800200009000003610C6 +:104C500000000080020000900000680C00000010BE +:104C60000840019200003610000000800200009011 +:104C70000000361000000080020000900000361096 +:104C8000000000800200009000003610000000804C +:104C9000020000900000D80C0000001008400192B3 +:104CA0000000DB0C000000100840019200004C0CDA +:104CB00000000010084001920000DB0C0000001012 +:104CC0000840019200008C0700000010084001928B +:104CD0000000361000000080020000900000DB0C95 +:104CE000000000100840019200008D070000001035 +:104CF00008000292000036100000008002000090C0 +:104D00000000361000000080020000900000DC0C63 +:104D1000000000100840019200004C0C0000001040 +:104D2000084001920000DC0C0000001008400192D5 +:104D300000008C07000000100840019200003610AF +:104D400000000080020000900000DC0C0000001059 +:104D50000840019200003610000000800200009020 +:104D600000003610000000800200009000003610A5 +:104D700000000080020000900000E10C0000001024 +:104D8000088000920000E10C0000001008C00092B2 +:104D90000000E10C00000010080001920000CF09A3 +:104DA0000000001008400192000036100000008052 +:104DB000020000900000E10C0000001008C0019209 +:104DC0000000361000000080020000900000361045 +:104DD00000000080020000900000361000000080FB +:104DE00002000090000036100000008002000090D9 +:104DF0000000361000000080020000900000361015 +:104E000000000080020000900000361000000080CA +:104E10000200009000006A090000001008400092A3 +:104E200000003610000000800200009000003610E4 +:104E3000000000800200009000003610000000809A +:104E40000200009000003610000000800200009078 +:104E50000000F10C00000010088000920000F10C2E +:104E60000000001008C000920000F10C00000010CB +:104E7000080001920000CF090000001008400192D4 +:104E80000000361000000080020000900000F10CCD +:104E90000000001008C001920000361000000080E1 +:104EA0000200009000003610000000800200009018 +:104EB0000000361000000080020000900000050D88 +:104EC00000000010088000920000050D0000001096 +:104ED00008C000920000050D0000001008000192BB +:104EE0000000CF09000000100840019200003610B9 +:104EF00000000080020000900000050D000000107E +:104F000008C00192000036100000008002000090EE +:104F100000008C070000001008000092000036100E +:104F2000000000800200009000008C0700000010CC +:104F3000088000920000130D0000001008C00092CD +:104F400000008C07000000100800019200008C0790 +:104F500000000010084001920000361000000080A0 +:104F60000200009000003610000000800200009057 +:104F70000000361000000080020000900000361093 +:104F80000000008002000090000036100000008049 +:104F90000200009000008C070000001008800092C2 +:104FA0000000210D000000100880009200008C0716 +:104FB000000000100800019200008C0700000010A3 +:104FC00008400192000036100000008002000090AE +:104FD0000000361000000080020000900000361033 +:104FE00000000080020000900000361000000080E9 +:104FF00002000090000036100000008002000090C7 +:1050000000008C0700000010088000920000210DB5 +:10501000000000100800019200008C070000001042 +:105020000800019200008C07000000100840019267 +:1050300000003610000000800200009000003610D2 +:105040000000008002000090000036100000008088 +:105050000200009000003610000000800200009066 +:1050600000003610000000800200009000003610A2 +:10507000000000800200009000008C07000000107B +:1050800008800092000036100000008002000090AE +:1050900000008C070000001008400192000036104C +:1050A0000000008002000090000036100000008028 +:1050B0000200009000003610000000800200009006 +:1050C0000000361000000080020000900000361042 +:1050D00000000080020000900000FD0C00000010A5 +:1050E000088000920000FD0C0000001008C0009233 +:1050F0000000FD0C00000010080001920000CF0924 +:1051000000000010084001920000361000000080EE +:10511000020000900000FD0C0000001008C0019289 +:1051200000003610000000800200009000003610E1 +:105130000000008002000090000036100000008097 +:105140000200009000003610000000800200009075 +:1051500000003610000000800200009000003610B1 +:1051600000000080020000900000310D00000010DF +:10517000080002920000361000000080020000903B +:105180000000361000000080020000900000361081 +:105190000000008002000090000036100000008037 +:1051A0000200009000003610000000800200009015 +:1051B000000088090000001008C0019200003610AD +:1051C0000000008002000090000036100000008007 +:1051D000020000900000CF0900000010084001927A +:1051E0000000361000000080020000900000C1099D +:1051F0000000001008C0019200003610000000807E +:1052000002000090000036100000008002000090B4 +:1052100000003610000000800200009000008809A5 +:10522000000000100880009200003610000000808E +:105230000200009000003610000000800200009084 +:105240000000CF0900000010084001920000361055 +:1052500000000080020000900000C1090000001062 +:1052600008C001920000361000000080020000908B +:105270000000361000000080020000900000361090 +:10528000000000800200009000006F0B0000001082 +:10529000088000920000361000000080020000909C +:1052A00000006F0B000000100880009200003D0C11 +:1052B000000000100840019200003610000000803D +:1052C0000200009000006F0B0000001008800092A8 +:1052D0000000361000000080020000900000361030 +:1052E00000000080020000900000361000000080E6 +:1052F0000200009000006F0B0000001008000192F7 +:1053000000003610000000800200009000006F0BCB +:10531000000000100800019200003D0C0000001089 +:10532000084001920000361000000080020000904A +:1053300000006F0B00000010080001920000361002 +:105340000000008002000090000036100000008085 +:105350000200009000003610000000800200009063 +:1053600000006F0B000000100800019200003610D2 +:10537000000000800200009000006F0B0000001091 +:105380000800019200003D0C00000010084001924E +:1053900000003610000000800200009000006F0B3B +:1053A000000000100800019200003610000000808C +:1053B0000200009000003610000000800200009003 +:1053C00000003610000000800200009000006F0B0B +:1053D00000000010088000920000361000000080DD +:1053E0000200009000006F0B000000100880009287 +:1053F00000003D0C00000010084001920000361033 +:10540000000000800200009000006F0B0000001000 +:10541000088000920000361000000080020000901A +:1054200000003610000000800200009000003610DE +:105430000000008002000090000036100000008094 +:105440000200009000003610000000800200009072 +:1054500000006F0B0000001008C0019200003D0C1E +:10546000000000100840019200003610000000808B +:105470000200009000006F0B0000001008C00192B5 +:10548000000036100000008002000090000036107E +:105490000000008002000090000036100000008034 +:1054A000020000900000D70B00000010088000925E +:1054B000000036100000008002000090000036104E +:1054C000000000800200009000008C070000001027 +:1054D0000840019200003610000000800200009099 +:1054E0000000D70B0000001008800092000036106A +:1054F00000000080020000900000361000000080D4 +:1055000002000090000036100000008002000090B1 +:105510000000D70B00000010088000920000361039 +:1055200000000080020000900000361000000080A3 +:105530000200009000008C0700000010084001925B +:105540000000361000000080020000900000D70B21 +:105550000000001008C0019200003610000000801A +:105560000200009000003610000000800200009051 +:10557000000036100000008002000090000036108D +:105580000000008002000090000036100000008043 +:105590000200009000003610000000800200009021 +:1055A00000008C0700000010084001920000361037 +:1055B00000000080020000900000DF0B00000010DF +:1055C00008C0019200003610000000800200009028 +:1055D000000036100000008002000090000036102D +:1055E00000000080020000900000361000000080E3 +:1055F00002000090000036100000008002000090C1 +:1056000000003610000000800200009000008C07AF +:1056100000000010084001920000361000000080D9 +:10562000020000900000DF0B0000001008800092D4 +:1056300000003610000000800200009000003610CC +:105640000000008002000090000036100000008082 +:105650000200009000003610000000800200009060 +:10566000000036100000008002000090000036109C +:1056700000000080020000900000C30C0000001039 +:1056800008400192000036100000008002000090E7 +:10569000000036100000008002000090000036106C +:1056A000000000800200009000009407000000103D +:1056B00008400092000036100000008002000090B8 +:1056C000000036100000008002000090000036103C +:1056D00000000080020000900000361000000080F2 +:1056E00002000090000036100000008002000090D0 +:1056F0000000E6070000001008800092000036104D +:1057000000000080020000900000361000000080C1 +:105710000200009000009B080000001008000192A9 +:105720000000361000000080020000900000930787 +:1057300000000010080001920000A5080000001001 +:10574000080001920000A508000000100800019266 +:105750000000A508000000100800019200003610AB +:105760000000008002000090000036100000008061 +:10577000020000900000F507000000100880009271 +:105780000000361000000080020000900000930727 +:105790000000001008000192000036100000008098 +:1057A000020000900000361000000080020000900F +:1057B00000000308000000100880009200009A0812 +:1057C0000000001008800092000093070000001005 +:1057D00008000192000036100000008002000090D6 +:1057E0000000BB0800000010084000920000BB0849 +:1057F00000000010088000920000BB0800000010AC +:1058000008C00092000093070000001008000192F9 +:1058100000003610000000800200009000003610EA +:1058200000000080020000900000E008000000106E +:1058300008C00092000036100000008002000090B6 +:1058400000009307000000100800019200003610CD +:105850000000008002000090000036100000008070 +:10586000020000900000E208000000100800019211 +:105870000000E208000000100800019200009307F9 +:1058800000000010080001920000361000000080A7 +:10589000020000900000361000000080020000901E +:1058A0000000E40800000010088000920000E408F6 +:1058B0000000001008C000920000930700000010D4 +:1058C00008000192000036100000008002000090E5 +:1058D0000000930700000010084000920000B1088B +:1058E00000000010088000920000B10800000010C5 +:1058F00008C0009200009307000000100800019209 +:1059000000009307000000100800009200009307B9 +:1059100000000010084000920000F808000000108D +:10592000088000920000F8080000001008C00092F3 +:1059300000009307000000100800019200003610DC +:10594000000000800200009000003610000000807F +:105950000200009000002C09000000100880009256 +:10596000000093070000001008C000920000930799 +:1059700000000010080001920000361000000080B6 +:10598000020000900000361000000080020000902D +:1059900000000C0900000010088000920000361082 +:1059A000000000800200009000009307000000103B +:1059B00008000192000036100000008002000090F4 +:1059C0000000361000000080020000900000F40784 +:1059D00000000010088000920000361000000080D7 +:1059E00002000090000093070000001008000192E0 +:1059F0000000361000000080020000900000361009 +:105A0000000000800200009000002009000000104B +:105A100008800092000020090000001008C00092D9 +:105A200000009307000000100800019200003610EB +:105A3000000000800200009000003610000000808E +:105A4000020000900000EF080000001008800092A3 +:105A50000000EF080000001008C00092000093074B +:105A600000000010080001920000361000000080C5 +:105A7000020000900000361000000080020000903C +:105A80000000390900000010088000920000390968 +:105A90000000001008C000920000930700000010F2 +:105AA0000800019208003103001801E8762081996E +:105AB00008002F03001801E8762081990000990F53 +:105AC00000000080020000F0080091071D1901E8A5 +:105AD000762081B900003103000000F862812F9523 +:105AE000000031038000008002812FB62A003103BC +:105AF000D001002C82CD2E9208003103001C01E859 +:105B00007620819900000000000000D802000032D9 +:105B100000000000000E01EC06C06E3554000000CD +:105B2000000000000700363200000000000000BC4A +:105B3000A8002D37B44400000008000087CD8B3A40 +:105B4000000000000000007899C02C37B40000006D +:105B500000000078898D973A00003610021000008E +:105B600087BF97BA00000000001800000740FE320F +:105B700000009D0712000040F2C138B40000000090 +:105B80000090007809006E320000361004A000007A +:105B900009806EB20000A20704A5000409806EB25D +:105BA0000000000000000004090090320000A4077B +:105BB00004010004096490BC00000000000000041F +:105BC00009400032080000006E3402E816249039C3 +:105BD0000000A507B71002E0068097B20000A807F2 +:105BE00080000080F280FCB60000A907000000C819 +:105BF000FF80FC940000AA079F990080821BEEBCE6 +:105C000000000000009800E00E006E32000000006E +:105C1000A70000800200003018003600000000F8E5 +:105C2000730A03F9000000000010021C09006E3224 +:105C30004000AF070601008082CD91BC00C0B007D4 +:105C4000001802E00680369200E00000001802E032 +:105C50000680363200000000000000200980033278 +:105C60000000B30780D7018032C06EB6000000008C +:105C7000000000204900923A00000000009801183E +:105C800009006E3200000000000A022409C06E32D2 +:105C90000000000000C0012809806E320000C1072A +:105CA000800E018012C06EB602000000003C02ECC3 +:105CB0000600363200000000000000004901923A60 +:105CC0000000BD0780D6018042C06EB60082000091 +:105CD000001002E0A6CD913200A00000002C02E8E6 +:105CE000060036322800CB07003A02EC0600369256 +:105CF00000000000D301001CD9C1913400820000D3 +:105D0000001002E0A6CD913200A00000002C02E8B5 +:105D1000060036323400CB07003A02EC0600369219 +:105D200004000000003C02EC0600363228000000AF +:105D300000000000890D923A0000C70780D601805C +:105D400042C06EB600860000001002E0A6CD91327F +:105D500004A00000002C02E8060036321400CB0735 +:105D6000003A02EC0600369200000000D301001C4D +:105D7000D9C1913400860000001002E0A6CD913216 +:105D800004A00000002C02E8060036322000CB07F9 +:105D9000003A02EC0600369212000000003802ECD5 +:105DA00086CD913A08000000002802E88624903948 +:105DB00000000000002002E09624143700000000DC +:105DC000004001E0068091320000D107040100800C +:105DD000028092BC0000000000C001E0060000321A +:105DE00000000000003000E006000032000000006B +:105DF00000B000E0060000322000000000000000BB +:105E0000070036320000000000000078A9002D379E +:105E10000045000000080000878D973A0000000050 +:105E20000000007899C02C370001000000000078C5 +:105E3000898D973A000036100210000087BF97BA8C +:105E400000000000001800000740FE320000DA07E2 +:105E500012000048F2C138B40000DE0780D7012CE0 +:105E600009C06EB200000000DAD701EC06C06E3542 +:105E700000000000005A01EC0640ED320000000076 +:105E8000005C01E806808B320000E10780010080A1 +:105E900062C092B600000000000000F882812F343A +:105EA00018003600000000F8730A03F90000000033 +:105EB0000004013808C06E3200000000006201ECEE +:105EC00006808332010093071201002C82CD2EB28E +:105ED0000000E407000000800200009000000000C5 +:105EE000005401FC02C06E3200000000000000D827 +:105EF0000280013200C0EC071801000CA8CD3EB2B0 +:105F00002080000000000008088036322D002F039A +:105F10001201002C82CD2EB20000EA0700000080A2 +:105F200002000090000000000062013808C06E32DC +:105F300000080080000000280900373200604B0F85 +:105F400000000008088036F200009307040601EC08 +:105F500016C06EBC000093078000008072812FB6CF +:105F600000000000000000F872812F343D0093070C +:105F70001201002C82CD2EB20000F207000000803A +:105F8000020000900000F507000000F8B2812F9495 +:105F90000000CF0F00A0001808006EF200002510CE +:105FA0000078016008006EF20000F907120100C8D5 +:105FB000020020B20000FC070000008002000090F8 +:105FC000000006081201005C088020B20000FC07F7 +:105FD0001201006002802CB20000FA07000000806D +:105FE000020000900000FE0704000080024080BC18 +:105FF00000000000000000F81F80FF3A00000008C9 +:1060000080010080A2802FB618003600CA0000F878 +:10601000730A03F9000093078000008072812FB695 +:106020003D0001081200002C82CD2EB20000930723 +:10603000000000F872812F940000FC07120000C8D5 +:10604000020020B20000FA071200005C088020B2B3 +:106050000000361004A0001808006EB20000000016 +:106060000000007879613832000007081218024CED +:10607000E2256EB2080000000010020078E16E39DF +:106080000000000000180020070000320700000098 +:106090000000003878CAE939000036100400003CDE +:1060A000084080B2000036100490006C08006EB208 +:1060B000000000000098004C08006E320000000054 +:1060C000510000D802000032000000004D00000026 +:1060D00067E0833E000000000008000007008032F7 +:1060E000000000000010000007C086320000000021 +:1060F0000018000007C084320000000000000018F3 +:10610000D8A0813C0000680804B000E0D6206EBC36 +:10611000000038080400003CD8E083BC00001E08E2 +:106120008000008092802FB6000019081201000044 +:1061300009C021B218003600000000F8730A03F904 +:106140001D0000000000007809A4173800001D0899 +:1061500004010080128097BC00001808670000F856 +:10616000A2802FB5000019080000000009C021928C +:1061700000000000C90100D802408432000021085C +:106180000400008072802DBC00001F081200004433 +:10619000E2E038B200002C08510000D812802D9A9D +:1061A0000000000000000078F9818334000022081C +:1061B00012000044E2E538B20000260880000080AA +:1061C00082802FB60000550F00A0015008006EF22B +:1061D0000000000000F801E00600853200002808F9 +:1061E000120100E802C021B218003600000000F8D9 +:1061F000730A03F900002B080401008002802DBC03 +:1062000000002708670000F8A2802FB500003610B4 +:10621000120000E802C021B200000000510000D8C6 +:1062200002000032000030082A010000D82080BAA5 +:10623000000030081201000009C021B21800360029 +:10624000000000F8730A03F900000000000000D805 +:106250000240843200000000CAE0006C08006E3288 +:106260000000000000E8004C08006E32000036100C +:1062700004F0001808006EB20000000000000038B2 +:106280001881833500000F0804B00080829B81BC18 +:1062900000000000CA0100F842802F3508A00F0856 +:1062A00012010040A2CD39B2000036080000008083 +:1062B0000200009000004008293402B808806EB245 +:1062C00000003B081201000009C021B2180036008E +:1062D000000000F8730A03F91D00000000000078B8 +:1062E00009A4173800003F0804010080128097BC01 +:1062F00000003A08670000F8A2802FB500003B08B4 +:106300000000000009C0219200000000C90100D86F +:10631000024084320000000000000078F9818334DC +:106320000000410812000044E2E538B200004708CE +:106330002800006CD8E086BA0000540F00A001507D +:1063400008006EF2000047081DF801E0060085B263 +:10635000000047088000008002812FB62A0000005C +:10636000D001002C82CD2E3200004A0804A000E0AB +:10637000068081B200003610049000E006C086B2AC +:1063800000005808009800E006C0849200004F0802 +:1063900080010080A2802FB600004D08120100008D +:1063A00009C021B218003600000000F8730A03F992 +:1063B0001D004F080401008002A417B800004C081B +:1063C000000000F8E2802F940000361004E0006C1A +:1063D00008006EB200000000CAE8004C08006E32EF +:1063E0000000361004F0001808006EB200005508D6 +:1063F00004B00080829B81BC00000000CA0100F84C +:1064000042802F3508A0540812000040A2CD39B2B6 +:106410000000000000A000E00680813200000000C3 +:10642000009800E006C0843200003610049000E0BE +:1064300006C086B200005D082A5D01E806808BB2C6 +:1064400000005B081201000009C021B218003600EC +:10645000000000F8730A03F91D005D0804010080C4 +:1064600002A417B800005A08000000F8E2802F9438 +:1064700010246008370000F8A28D2FB13D005E089F +:106480001200002C82CD2EB200000000000000F8A7 +:1064900072812F3408000000CA1C01E8762081397F +:1064A0000000FA0D0000002CF90100F4000065085E +:1064B00080000080E2802FB6000065081201000015 +:1064C00009C021B218003600000000F8730A03F971 +:1064D000100000000018008067A1733930003203FB +:1064E0001201005CA28D2CB200003610000000806A +:1064F0000200009000006B088000008092802FB6A0 +:1065000018003600000000F8730A03F900000000CC +:10651000C90100D802408432000036102A000078F9 +:10652000F98183B400006C0812000044E2E538B23F +:106530000000DC0E00000030030038F2000071089B +:106540001D000038188183B50000710880000080AC +:1065500002812FB62A000000D001002C82CD2E32FD +:1065600000007408040601EC16C06EBC00000000B8 +:10657000CA0100F842802F3408C07308120000409E +:10658000A2CD39B2000077088000008082802FB64B +:106590000000550F00A0015008006EF2000000003E +:1065A00000F801E0060085320000790812010000C1 +:1065B00009C021B218003600000000F8730A03F980 +:1065C000000095082A3502B808806EB200007C08E9 +:1065D0001201000009C021B218003600000000F8C6 +:1065E000730A03F900000000000000F8A2802F35B4 +:1065F00000008E0804000080026180BC0000870853 +:1066000080B8000009C06EB240008208040000801B +:10661000820D90BC0000820802B00080821B84BC06 +:1066200000008708000000F8B2812F9400000000ED +:1066300000D601EC56C06E3400000000000000607F +:106640001800863A0000000000000080B70178348E +:1066500000000000007801E0060086324000950846 +:1066600004000080820D90BC0000361004A00018C9 +:1066700008006EB20000CF0F00000000D82080FAA2 +:10668000000036100600003C182084BC00003610C4 +:1066900004B0003C88DB83BE0000000000000080E6 +:1066A000F720783A00000000587801E0F620863A9A +:1066B00000000C0800000004F860809A00009108B7 +:1066C00080B9000009C06EB22F0095081201002C9D +:1066D00082CD2EB200008F080000008002000090E2 +:1066E0004000930804010080820D90BC380094089B +:1066F00000000078090036923900000000000078A0 +:1067000009003632000094081200002CE2E52EB297 +:10671000100000000018008067A17339000000001D +:10672000005C01E806808B3210240000000000F8B5 +:10673000A28D2F31300093071201005CA28D2CB284 +:1067400000003610000000800200009000000308E6 +:10675000000000F8C2812F9500000000005401FCE9 +:1067600002C06E3200000000000000D8028001323A +:1067700000C0A1081801000CA8CD3EB22080000086 +:1067800000000008088036322D002F031201002C73 +:1067900082CD2EB200009F08000000800200009011 +:1067A000000000000062013808C06E32000800805E +:1067B000000000280900373200604B0F000000087D +:1067C000088036F20000AF08000000800200009050 +:1067D0000000A70880000080C2812FB60000AA0830 +:1067E00000D001E80600009200000000000000F860 +:1067F000C2812F350000AA0804D1018002806EBC3E +:106800000000000000D601EC26C06E340000AC0889 +:106810008000008092812FB60000AF0800C801E818 +:106820000600009200000000000000F892812F3561 +:106830000000AF0804C9018002806EBC00000000A7 +:1068400000D601EC16C06E34110093071201002C23 +:1068500082CD2EB20000AF08000000800200009040 +:10686000000093079A0100F842812FB50000B80894 +:10687000120100C8020020B200000000005C01EC20 +:106880000640003200009307370000F842812FB421 +:1068900000000000000000F872812F343D009307D3 +:1068A0001201002C82CD2EB20000B608000000803C +:1068B000020000900000C3081201005C088020B2B2 +:1068C0000000B3081201006002802CB200003610F4 +:1068D00000000080020000900000C008120100C803 +:1068E000020020B200009307370000F8D2812FB4D5 +:1068F00000000000000000F872812F343D00930773 +:106900001201002C82CD2EB20000BE0800000080D3 +:10691000020000900000C3081201005C088020B251 +:106920000000BC081201006002802CB2000036108A +:1069300000000080020000900000000000000078CD +:10694000796138320000C4081218024CE2256EB298 +:1069500000000000003402B808806E320000000021 +:1069600000A0015008006E320000000000780160B5 +:1069700008006E320000CA089D11023409006EB290 +:106980000000000000F0018808006E3200006C0F6B +:1069900000A8010809006EF200000000D4F801E030 +:1069A0000600853200000000DA5C01E806808B32C8 +:1069B0000000DC0EDD000030030038F20000D008DB +:1069C0002329020409806EB23E00CF081200002C79 +:1069D00082CD2EB20800D3081D1C01E8762081B9B3 +:1069E0000000D3088000008002812FB62A0000003A +:1069F000D001002C82CD2E320000FA0D0000002CB8 +:106A0000F90100F40000D7089D010080074093B20F +:106A10000000000000300080078088320000000085 +:106A2000003800800700EE320000000000080080FF +:106A300007C085320000000000100080074090323F +:106A40001000000000180080878D853700000000CE +:106A5000002000800700863200000000002800802F +:106A6000070085320000DE081201000009C021B2D3 +:106A700018003600000000F8730A03F930003203F2 +:106A80001201005CA28D2CB20000361000000080C4 +:106A9000020000900000000000CC017809806E32F6 +:106AA00000009307DCD101E806809792130093075A +:106AB0001201002C82CD2EB20000E20800000080FE +:106AC000020000900000BA0D00000018094081F299 +:106AD0000000A30D00A8012009006EF2000093073A +:106AE00080010080F2802FB60000EC08120100C87F +:106AF000020020B2000093078000008072812FB650 +:106B000000000000000000F872812F343D00930760 +:106B10001201002C82CD2EB20000EA080000008095 +:106B2000020000900000C3081201005C088020B23F +:106B30000000E8081201006002802CB2000036104C +:106B4000000000800200009000009307350100F86B +:106B500012812FB500000000000000D80280013231 +:106B600000000000005401FC02C06E3200C0F608B4 +:106B70001801000CA8CD3EB220800000D101000811 +:106B8000088036323B0031031201002C82CD2EB238 +:106B90000000F40800000080020000900000440F94 +:106BA0000098012809006EF20000930700000080A1 +:106BB000020000900000FE0880010080A2812FB634 +:106BC0000000FE088000008042812FB60000FE0811 +:106BD000085B01EC06FB6EBC00000000005A01ECF3 +:106BE000060000320000FE08370000F842812FB492 +:106BF0003D000000D701002C82CD2E320000040998 +:106C00008001008092812FB600000A0908C901E8BE +:106C100006BB6EBC0000000000C801E806000032A0 +:106C2000330001091200002C82CD2EB20000510F5A +:106C300000000028098001F2000093070000008096 +:106C40000200009000000A0980010080C2812FB676 +:106C500000000A0908D101E806BB6EBC0000000074 +:106C600000D001E806000032330007091200002CB2 +:106C700082CD2EB20000510F0000002809C001F2A1 +:106C800000009307000000800200009000009307BE +:106C900080010080F2812FB6180093070000002CBD +:106CA00082CD2E9200000F09120000C8020020B20F +:106CB000000012091201005C088020B200003610AA +:106CC0001200006002802CB200000000000000F8FA +:106CD0001F80FF3A000031031201002C72E02EB237 +:106CE0000000100900000080020000900000000079 +:106CF0000000007879613832000013091218024C44 +:106D0000E2256EB200000000003402B808806E3246 +:106D100000000000D4A0015008006E320000000006 +:106D2000DB79016008006E320000550FDD000004C1 +:106D3000080000F21000000000180080878D8537E1 +:106D40000000000000F801E00600853200001C0988 +:106D50001201000009C021B218003600000000F83E +:106D6000730A03F9300036101200005CA28D2CB2B9 +:106D700000003610040701EC16C06EBC00000000D5 +:106D800000B000E00600003200009307DA5C01E882 +:106D900006808B92000093079F41018052206EBCB9 +:106DA00000002B099F98018052206EBC000000005B +:106DB000000000D80280013200000000005401FCF5 +:106DC00002C06E3200C029091801000CA8CD3EB2E5 +:106DD0002080930731000008088036B200000000D0 +:106DE000000000F812812F343B0093071201002CA1 +:106DF00082CD2EB200002709000000800200009022 +:106E00000000440F0098012809006EF2000093076B +:106E1000000000800200009000009307D54101E0CF +:106E2000064081920000930704B0008002006EBC0F +:106E3000000000000090010008006E3200002510E4 +:106E40000078016008006EF20000930700000080E7 +:106E50000200009000000000000C027809806E32F1 +:106E60000000330904D4018012C06EBC0000000091 +:106E7000000000781980973700000000009001E0C2 +:106E8000E6256E3A0000251000000080020000F0A8 +:106E90000000370900000080020000900000930706 +:106EA000009001E00600809200000000009001E0E8 +:106EB00006008032000003080000008002000090FD +:106EC0000000A30D00A8012009006EF20000E708F1 +:106ED00080000080F2802FB6000093070000008041 +:106EE0000200009000000000000000D80280013283 +:106EF000000000000000007809006E320200410925 +:106F000004B9008082CD6EBC00004309800000807F +:106F10007280FCB600004509000000FC02000092EF +:106F200000004309800000808280FCB60000450913 +:106F3000000000FC0200009200000000000000A819 +:106F400042BD973000000000541889FCF2C07C302C +:106F500000C04B091801000CA8CD3EB20000000093 +:106F6000000E01EC0600003400000000005401ECAB +:106F700006C02F3220800000000000080880363252 +:106F8000000031031201002C82CD2EB2000049090D +:106F90000000008002000090000000000062013844 +:106FA00008C06E3200080080000000280900373257 +:106FB00000004B0F00000008E80100F4000036104C +:106FC000040701EC16C06EBC00000000000000A821 +:106FD000A2002D370A0000000000007809003632B8 +:106FE00000000000001889E007000032000051098D +:106FF00004010078198097BC02005C0904B9008084 +:1070000082CD6EBC00000048D6010078C9CD2C327C +:1070100000005509B6000080020000B000005609CB +:1070200012000064028097B2000057091208006441 +:1070300002006EB2000058091218006402006EB21D +:10704000000059091210006402006EB20000000036 +:10705000A65401EC06C02F3200008C07000E01EC94 +:10706000060000940020004CD6010078C9CD2C32D7 +:1070700000005D09B6000080020000B000005E095B +:1070800012000064028097B200005F0912080064D9 +:1070900002006EB2000060091230006402006EB29D +:1070A000000061091238006402006EB2000062093B +:1070B0001240006402006EB20000630912480064CE +:1070C00002006EB2000064091210006402006EB289 +:1070D000000065091218006402006EB20000660923 +:1070E0001220006402006EB20000670912280064DA +:1070F00002006EB200000000A65401EC06C02F3260 +:1071000003008C07000E01EC060036920000000020 +:10711000000000FC0200013200006D0900000014B4 +:1071200008803D9200000000000000FC02000132D7 +:1071300000007009040000DC53603DB3180000003B +:10714000000000F8738A03396C093600000000C0A3 +:107150000200369200000000005401FC02C06E32B2 +:1071600000000000000000D80280013200C0760953 +:107170001801000CA8CD3EB22080000000000008DD +:107180000880363215002F031201002C82CD2EB25A +:107190000000740900000080020000900000000060 +:1071A000002800000700003200000000003000004E +:1071B00007C02C3200100082003800000700373270 +:1071C000000079091200004802C080B200008C075C +:1071D000CA010008E80100942D007B091200002C70 +:1071E00082CD2EB200007E091D010080020000B099 +:1071F00000008C07000000F862812F95000000005D +:10720000000000F802812F342A008C071201002CA4 +:1072100082CD2EB200007F090000008002000090A5 +:1072200000003F0F0000002C09C085D20000DC0EDA +:1072300000000030030038F200003103230100F8A1 +:1072400022812FB43E0031031201002C82CD2EB2D8 +:1072500000008409000000800200009000003F0F41 +:107260000000002C09C085D200003103000000F8A6 +:1072700022812F9400008D09380100D8028001B2CC +:1072800000008B091E000080020000B000008D0984 +:107290001A010080020000B000008C0F000000689E +:1072A0001F80F6FA00003103000000800200009009 +:1072B0000000910912010060084023B20082000022 +:1072C000000000080880363200008C0F00000064C7 +:1072D0001F40F6FA00003103000000800200009019 +:1072E0000000361012000024080023B200003610FF +:1072F0001200002008C023B200003610120000184F +:10730000088023B200C09C091801000CA8CD3EB231 +:107310000000940912000038028081B2000036108B +:107320001200003C020082B2000036101200003051 +:10733000024082B20000361012000034020086B211 +:1073400020800000000000080880363200008C0F0A +:107350000000005C1FC0F5FA00003103000000804F +:107360000200009000000000450000D8020000323A +:107370000000000000000000074080320000000014 +:1073800000100000074082320000000000180000DA +:10739000070086320000A00912000050F2C138B484 +:1073A0000000640D003001E016206EFA0000A5090F +:1073B0003801002CF8010BB40000A509020D028071 +:1073C000A25B80BC000000000000002CC8C1823419 +:1073D0000000A7098000008042812FB60000940DB4 +:1073E00000000080020000F00000AD0D00A801E0E8 +:1073F00016206EFC0000AC09270100D8028001B203 +:1074000000000000C700002CE8C08234000000002B +:1074100000000008D801003400000000D54001E061 +:10742000060087320800990F001801E8762081F9DC +:107430000000DC0E00000030030038F20000B0094C +:1074400023190000078081B23E00AF091200002C12 +:1074500082CD2EB20000B2091D210000070082B2C9 +:107460000000B409000000F862812F950000B40903 +:107470008000008002812FB62A000000D001002C7D +:1074800082CD2E320000FA0D0000002CF90100F42C +:107490001000B8092C30000017E02CB90000BA0920 +:1074A0008E39000007C082B20000BA09000800004F +:1074B000070087920000BA098E390000B7C182B474 +:1074C0000000000000080000070087320000BC092F +:1074D000120100E802C021B218003600000000F8D6 +:1074E000730A03F90000BA099F010014184081BC17 +:1074F0000000BF090400008002C085BC00003610F7 +:107500001200006802C585B00000BF0912000048E3 +:1075100002C080B200003203CA010008E8818094F2 +:107520000000C3091E000080020000B00000C50971 +:107530001A010080020000B000008C0F00000068FB +:107540001F80F6FA00003103000000800200009066 +:10755000000036109FA801E016206EBC0000640DEC +:1075600000000014080000F20000C909800000803B +:1075700042812FB60000940D00000080020000F050 +:107580000000AD0D00000080020000F000008E073A +:1075900004000080024081BC0000CD09120100E817 +:1075A00002C021B218003600000000F8730A03F987 +:1075B00000008E071201006802C585B00000361079 +:1075C000000000800200009000008C078000008016 +:1075D000F2C185B60000D3091C41028006C085B205 +:1075E000000000000000006802C5853000000000B7 +:1075F000000000701F00F73A00008C07000000F840 +:1076000022812F9400008C0780000080F2C185B693 +:1076100000003F0F0000002C09C085D2000031039C +:10762000D20100941E40E99A0000C40F0020001807 +:1076300008006EF20000DB091F000080020000B0AD +:107640000000D8099E400278094068B20000361058 +:1076500000000080020000900000DF09800100802F +:1076600082812FB600008E072A3101E0060000B2A9 +:1076700018000000CA0000F8730A03398E073600AC +:10768000000000C00200369200008E0780010080DA +:10769000A2802FB618000000CA0000F8730A033950 +:1076A0008E073600000000C0020036920D00E5098A +:1076B00000000058080036920000E509000000585C +:1076C000080000921B00000000000058080036323D +:1076D0000000C40F0020001808006EF20000000037 +:1076E0000030002808006E3200000000545401FCF5 +:1076F00002C06E320000300A380000A4088082B256 +:107700000000300A0428010408006EB200003610A0 +:107710009F500104A85B80BC00000000005001E8FD +:10772000060000320000110A0801007819A082BC8E +:1077300000000000002801E0A660803C0000F00985 +:107740002A010014080000B200000000CA00001462 +:107750001840813A0000A30D00A80120A9206EFA6C +:1077600000000000002001E0A6206E3C00000000A8 +:10777000003000E0060000320000000000A801E038 +:107780000600923200000000000000D802800132A2 +:1077900000C0030A1801000CA8CD3EB20000FA098F +:1077A00004000080024081BC0000000000000014C2 +:1077B0000800003218000000000000F8730A0339C6 +:1077C000F4093600000000C002003692208000005C +:1077D00000000028098036320000F10E000000D8B9 +:1077E000020000D20000FE0904000080028092BC6A +:1077F00018003600000000F8730A03F900000000CA +:10780000000000D80280013200C0030A1801000CF9 +:10781000A8CD3EB218000000000000F8738A0339BA +:10782000FE090000000000C00200363200003600F1 +:10783000000000800200009000000000DE00000850 +:10784000E801003400000000DF00013808C06E329B +:1078500000000000001000000700003200000000DF +:107860000018000007808232000000000030000095 +:1078700007C02C320020008000380000070037329B +:1078800000000000CA3D000C0780833200000000A9 +:10789000000000141840813A00000F0A040201ECB5 +:1078A00016C06EBC00000000C00100141840813AF0 +:1078B00000000000000000F892802F3400C00E0A83 +:1078C00012000040A28D39B20000690A120100487E +:1078D00002C080B200000F0A000000800200009089 +:1078E000000000000000002808809732000000001F +:1078F000000000A408808232000000000010006C2C +:1079000018206E3A000000000018004C08006E328B +:107910000000A30D00A8012019206EFA000000004D +:10792000002001E016206E3C0000000000A801E0ED +:107930000600923200001B0A003801E006408092E7 +:10794000000000000060006C18206E3A000000008B +:107950000068004C08006E3200001D0A9F01000400 +:10796000686080BC0000240A000000181820009CF9 +:1079700000001F0A120100E802C021B21800360000 +:10798000000000F8730A03F900000000CA70001834 +:1079900008006E320000190A02010080626080BC9B +:1079A00000000000CA0100F802802F3500A01B0A69 +:1079B00012010040A28D39B20000220A00000080AE +:1079C000020000900000280A80000080A2802FB6EC +:1079D00000002B0A04000080A2A081BC000000006F +:1079E000CA0100F802802F3500A0270A12000040CB +:1079F000A28D39B200000000000000F8A2802F35EF +:107A000000002B0A120100E802C021B21800360063 +:107A1000000000F8730A03F900000000002801E0EC +:107A20000600003200000000003000E006808232D4 +:107A300000000000002000E00680813200003610C7 +:107A4000041000E006C086B20000320A001800E010 +:107A500006C08492000036100410006C08006EB25C +:107A6000000000000018004C08006E320000E00D1D +:107A7000510000D8020000F20000350A0050013C1D +:107A8000A85B809C00008E07003001E00600009299 +:107A900000003A0A3E510100A81B80BA0000000015 +:107AA000DE0000F8F2812F3400000000005801ECE5 +:107AB00006C0EE3200003A0A80010080328087B6AC +:107AC00000000000000000F8E2802F340000730E78 +:107AD000603001E0060000F200008E070000008028 +:107AE00002000090000000000000001408000032B6 +:107AF0000000430A040201EC16C06EBC0000000046 +:107B0000C90100141840813A00000000C00101388A +:107B100008C06E3200000000DF0000A4A8608A3CAC +:107B200000C0460A12010040A28D39B20000410A8D +:107B3000000000800200009000000000003000E023 +:107B40000600003200000000DF0000A4A8608A3CAC +:107B5000000000000000013808C06E320000000084 +:107B6000DEA8012099226E3A0000490A2F2001E088 +:107B700096226EBC0000A30D00000080020000F001 +:107B800000004D0A1F5001E8060000B200004C0A38 +:107B90000400008002C083BC00004D0A005001E8D0 +:107BA000F660809C0800000000400268129AFE38CF +:107BB0000000510A2AA901E0060092B2180036001E +:107BC000CA0000F8730A03F91D00510A040000807E +:107BD00002A417B800004E0A000000141840819C4F +:107BE0000000DC0E00000030030038F20000540AF0 +:107BF0008001008032802FB63E00530A1200002C14 +:107C000082CD2EB200000000000000D802800132B8 +:107C100000C0650A1801000CA8CD3EB2208000000B +:107C2000C3000028098036320000F10E000000D8A1 +:107C3000020000D200005A0A04000080028092BCB8 +:107C400000000000000000141840813A00005F0AA4 +:107C500004000080024081BC18003600000000F8DB +:107C6000730A03F90000630A04000014184081BC81 +:107C700000005B0A1200000009C021B200005C0A8B +:107C8000000000800200009018003600000000F89C +:107C9000738A03F90000DC0E00000030030038F2A4 +:107CA0000000630A8001008032802FB63E00620A25 +:107CB0001200002C82CD2EB200000000C30000D8BC +:107CC0000280013200C05F0A1800000CA8CD3EB24D +:107CD0000020008000000028090037320000B10FAA +:107CE00000000008E80100F40000670A12000048E4 +:107CF00002C080B200000000000000141840813A69 +:107D000018003600CA0000F8730A03F90000690A77 +:107D100004010014184081BC0000990F000000808D +:107D2000020000F000006F0A8001008092802FB6F0 +:107D30002B00720A1201002C82CD2EB200006D0AB7 +:107D400000000080020000900000720A1D00008008 +:107D5000020000B00000720A8000008002812FB68D +:107D60002A000000D001002C82CD2E3200008C07AA +:107D700004000080028085BC0000AA0F0000008083 +:107D8000020000F000007D050000001C08808592C4 +:107D900000000000CE0100D80280013200C07A0A43 +:107DA0001801000CA8CD3EB22080000000000008A1 +:107DB0000880363200008C0F0000005C1FC0F5FA0E +:107DC000000031030000008002000090000000006D +:107DD000600000D80200003200007F0A3F00003C33 +:107DE000084080B200007F0A80010080E2812FB647 +:107DF00000000000DE0000F8F2812F3400000000D7 +:107E0000005801EC06C0EE32000000004D000000FA +:107E100067E0833E00000000000800000700803299 +:107E2000000000000010000007C0863200000000C3 +:107E30000018000007C084320000BE0A04000028B9 +:107E4000D8A082BC0000000000000018D8A0813C2F +:107E500000009C0A0400003CD8E083BC0000890AB2 +:107E60000400008072802DBC0000870A12000050C0 +:107E700002C038B200009A0A510000D812802D9A30 +:107E80000000890A12000050F2C138B40000950ABF +:107E9000280000D8020000B20000920A8001008091 +:107EA000F2C185B600008F0A1F400284E60100B4CB +:107EB0000000920A1D0100F822812FB40000920AEE +:107EC000000000F862812F950000910A1D010080DA +:107ED000020000B000000000000000F862812F35B1 +:107EE0000000000000400280024068320000940A56 +:107EF000343000E016206EBC0000940D00000080BD +:107F0000020000F00000AE0DDA5B01EC0640EDF27D +:107F100018003600000000F8730A03F90000990AFF +:107F20000400008072802DBC0000950A670000F8F4 +:107F3000A2802FB500003610120000E802C021B266 +:107F400000000000510000D8020000320000E80DDF +:107F500000000000D82080FA0000800A4D000000D8 +:107F600067E0839E00009C0A12000050F2C138B402 +:107F70000000A80A28000080084000B20000A50AFE +:107F800080010080F2C185B60000A20A1F40028471 +:107F9000E60100B40000A50A1D0100F822812FB4FB +:107FA0000000A50A000000F862812F950000A40AD5 +:107FB0001D010080020000B000000000000000F879 +:107FC00062812F35000000000040028002406832CC +:107FD0000000A70A343000E016206EBC0000940DAB +:107FE00000000080020000F00000AE0DDA5B01EC42 +:107FF0000640EDF20000BF0A80000080E2802FB64C +:108000000000AC0A042100E0068081B20000E80D07 +:1080100000000034080000F200000000002000E032 +:10802000068081320000B10A2A1100E0D6E086BA4B +:1080300018003600CA0000F8730A03F91D00B10ADF +:108040000401008002A417B80000AD0A9F0100805F +:10805000180088BC0000361000000080020000906C +:108060000000990F00000080020000F00000DC0E0C +:1080700000000030030038F20800B50A231901E8B7 +:10808000762081B93E00B40A1200002C82CD2EB2B7 +:108090000000B80A1D1800E006C084B20000B80A4B +:1080A0008000008002812FB62A000000D001002C41 +:1080B00082CD2E320000FA0D0000002CF90100F4F0 +:1080C0000000BC0A04000080020088BC0000BC0A5A +:1080D0001201000009C021B218003600000000F8AB +:1080E000730A03F9000032031201006802C585B06B +:1080F0000000361000000080020000900000BE0A60 +:1081000012000050F2C138B400000000C001013874 +:1081100008C06E320000C30A040201EC16C06EBC37 +:1081200000C0C10A12000040A28D39B20000C40A8A +:10813000C90100140800009200000000453000E072 +:10814000060000320000CF0A28000008E80100B451 +:108150000000CC0A80010080F2C185B60000C90A87 +:108160001F400284E60100B40000CC0A1D0100F8A3 +:1081700022812FB40000CC0A000000F862812F9504 +:108180000000CB0A1D010080020000B000000000CA +:10819000000000F862812F350000000000400280DE +:1081A000024068320000CE0A8000008042812FB673 +:1081B0000000940D00000080020000F00000AE0DF1 +:1081C000DA5B01EC0640EDF200200080DF000028C1 +:1081D000090037320000B10FDE0000D8028001F242 +:1081E0000800990F001801E8762081F90000DC0EE4 +:1081F00000000030030038F20000D50A8001008042 +:1082000032802FB63E00D40A1200002C82CD2EB24E +:108210000000D90A290801E406C02DB20000DE0AD8 +:108220001D000080020000B00000DE0A8000008017 +:1082300002812FB62A00DE0AD001002C82CD2E92B8 +:108240000000DB0A1201000009C021B2180036004C +:10825000000000F8730A03F91D00DD0A0401008024 +:1082600002A417B80000DA0A000000141840819C2C +:108270002B00DD0A1200002C82CD2EB20000FB0D77 +:108280000000002CF90100F40000E10A0401008064 +:10829000024081BC18003600000000F8730A03F9A0 +:1082A0000000E10A1200004802C080B20000320360 +:1082B0001201006802C585B00000E20A00000080DB +:1082C0000200009000000000000000D8028001328F +:1082D00000C0E90A1801000CA8CD3EB220800000C1 +:1082E000000000080880363200008C0F0000005C9F +:1082F0001FC0F5FA0000310300000080020000906A +:1083000000C00000000000F8A28D2F310000000026 +:10831000000000D802000032000000000000000051 +:108320000780813200000000000800000700803252 +:10833000000000000010000007C0863200000000AE +:108340000018000007C084320000EF0A120000503D +:10835000F2C138B40000F50A8000008082802FB698 +:108360000000000000000068A860803C00000000E1 +:108370000000003C084080320000AD0D0000000409 +:10838000088082F20000F60A1201000009C021B242 +:1083900018003600000000F8730A03F91D00F80AFF +:1083A0000400008002A417B80000F50A000000F8DD +:1083B000A2802F9500000000000000006820803A95 +:1083C0000000FC0A0400002868A082BC0000E80D40 +:1083D00000000080020000F00000EB0A000000D85E +:1083E0000200009200000000000000D8028001326C +:1083F0000020008000000028090037320000AD0F87 +:1084000000000008E80100F418003600CA0000F877 +:10841000730A03F90000060B040201EC16C06EBCDF +:1084200000000000C00100F892802F3400C0040B4F +:1084300012010040A28D39B20000020B0000008042 +:10844000020000902B00060B1201002C82CD2EB2F0 +:108450000000040B000000800200009000000000FB +:10846000000000D8028001320000090B12010060F8 +:10847000084023B20082120B00000008A88D8092F1 +:108480000000361012000024080023B2000036104D +:108490001200002008C023B200003610120000189D +:1084A000088023B200C0210B1801000CA8CD3EB2F9 +:1084B00000000C0B12000038028081B20000361060 +:1084C0001200003C020082B20000361012000030A0 +:1084D000024082B20000361012000034020086B260 +:1084E0002080000000000008A88D80320000190BD9 +:1084F00080010080F2C185B60000160B1F40028487 +:10850000E60100B40000190B1D0100F822812FB410 +:108510000000190B000000F862812F950000180B75 +:108520001D010080020000B000000000000000F803 +:1085300062812F3500000000004002800240683256 +:10854000000036101200006802C585B000001C0B48 +:108550003400005C1FC0F5BA0000940D00000080DC +:10856000020000F000001E0B8000008092802FB6F9 +:1085700000008E07003000E00600009200008E0729 +:10858000120100E802C021B218000000000000F84B +:10859000730A03398E073600000000C002003692CD +:1085A00000000000450000D802400032000000003A +:1085B0004100000007808632000000000008000033 +:1085C00007008032000000000010000007408232E7 +:1085D0000000000000180000070086320000260B93 +:1085E00012000050F2C138B4000000000000007812 +:1085F000388087350000000000A001E016206E3AA8 +:10860000000000000000007809C58530000000006F +:1086100000A801E016206E3C08000000D20100789E +:10862000E9E58339180036101F410284E6A197B9A5 +:108630000000300B365101E816E083BC0000300B1F +:108640001D010080020000B000000000000000F8E2 +:1086500062812F350000320B382101E0064080B2E4 +:1086600000000000003001E0064080320000000001 +:10867000000000D8028001320000350B34180000E1 +:10868000078081B20000940D00000080020000F01D +:108690001000990F0030000017E02CF90010008046 +:1086A00000380000070037320000DC0E0000003008 +:1086B000030038F200003A0B8001008032802FB6B0 +:1086C0003E00390B1200002C82CD2EB200003F0B71 +:1086D00029210000070082B200003D0B12010000BA +:1086E00009C021B218003600000000F8730A03F92F +:1086F0001D00420B0401008002A417B800003B0BD0 +:1087000000000014080000920000420B1D3000E041 +:10871000060000B20000420B8000008002812FB6EC +:108720002A000000D001002C82CD2E320000AA0FBA +:108730000000002CF90100F40000FA0D000000F820 +:10874000A2802FF40000470B04000080024081BC8F +:108750000000470B120100E802C021B218003600E9 +:10876000000000F8730A03F9000032031201004808 +:1087700002C080B20000470B0000008002000090A1 +:108780000000500B80010080F2C185B600004D0B47 +:108790001F400284E60100B40000500B1D0100F8E8 +:1087A00022812FB40000500B000000F862812F9549 +:1087B00000004F0B1D010080020000B0000000000F +:1087C000000000F862812F350000000000400280A8 +:1087D000024068320000520B04000080024086BC58 +:1087E0000000D70F0090010809006EF2000007108A +:1087F00000000080020000F00000590B330100D897 +:10880000028001B20000590B80010080B20172B6F3 +:108810000000590B9FF0018082DB87BC0000590BE0 +:108820009FF8018022216EBC0000000000E801E0FA +:108830000600EE320000000000F001E006C08732C2 +:1088400008000000001801E87620813900005F0B65 +:1088500080010080D2802FB600005F0B04B0008042 +:1088600002006EBC00000000CD0000F872812F34C1 +:108870003D005F0B1201002C82CD2EB200005D0B7B +:1088800000000080020000900000690B270901E44D +:1088900006C02DB200C0630B1801000CA8CD3EB27B +:1088A000000036101200006802C585B020808E07D7 +:1088B000000000080880369200000000004001E03F +:1088C0000640883200000000D508000007408832CA +:1088D000000000000030000007C02C320040008083 +:1088E000CA390000070037320000670B1200004849 +:1088F00002C080B20060000000000008088036322C +:1089000000006C0B1D000080020000B000006C0B2A +:108910008000008002812FB62A000000D001002CC8 +:1089200082CD2E320000FB0D0000002CF90100F476 +:10893000000032031201006802C585B00000361045 +:10894000000000800200009000000000545401FC70 +:1089500002C06E3200000000000000D80280013228 +:1089600000C0750B1801000CA8CD3EB2208000009D +:108970000000000808803632000031031201002C8C +:1089800072E02EB20000730B000000800200009025 +:108990000000C40F0020001808006EF2000036101E +:1089A0001F30002808006EB200000000000000A484 +:1089B00008808232000036100410006C08006EB28D +:1089C0000000E00D0018004C08006EF200007C0B67 +:1089D0000050013CA85B809C000036100000008025 +:1089E000020000900000000000500100A81B803A27 +:1089F00000000000510000D802000032000000001A +:108A00004D00000067E0833E000000000008000009 +:108A100007008032000000000010000007C086320E +:108A2000000000000018000007C084320000A60B00 +:108A300004000028D8A082BC00000000000000183C +:108A4000D8A0813C0000940B0400003CD8E083BC1B +:108A50000000880B0400008072802DBC0000860B93 +:108A60001200005002C038B200008E0B510000D836 +:108A700012802D9A0000880B12000050F2C138B409 +:108A800018003600000000F8730A03F900008D0B8F +:108A90000400008072802DBC0000890B670000F884 +:108AA000A2802FB500003610120000E802C021B2EB +:108AB00000000000510000D8020000320000920BBC +:108AC0002A010000D82080BA0000920B1201000099 +:108AD00009C021B218003600000000F8730A03F93B +:108AE00000000000000000D8024084320000F00DB9 +:108AF0000060006C08006EF200007F0B4D0000006B +:108B000067E0839E0000940B12000050F2C138B45D +:108B100018003600000000F8730A03F91D00990BD5 +:108B20000400008002A417B80000950B670000F84D +:108B3000A2802FB5000036101200000009C021B23B +:108B40000800361012400268129AFEB80000DC0ECF +:108B500000000030030038F2000036101F00006CE7 +:108B6000D8E086BA0000E00D510000D8020000F203 +:108B700000009F0B0000003C08408092000036106F +:108B8000000000800200009000007E0B04010080C5 +:108B9000028081BC0000A40B80010080A2802FB65F +:108BA0000000A40B1201000009C021B21800360019 +:108BB000000000F8730A03F900000000000000D86C +:108BC000024084320000F00D0060006C08006EF27C +:108BD00000007F0B4D00000067E0839E0000000056 +:108BE000C001013808C06E3200000000453000E0CE +:108BF000060000320000A80B12000050F2C138B489 +:108C00000000AD0B040201EC16C06EBC00000000B9 +:108C1000C90100141840813A00C0AD0B1201004098 +:108C2000A28D39B20000AB0B000000800200009062 +:108C300000C00000000000F8A28D2F3100000000ED +:108C400000A8012099226E3A0000B10B2F2001E00C +:108C500096226EBC0000A30D00000080020000F010 +:108C60000000B50B0400003CD8E083BC0000B40B4E +:108C70009F3101E096226EBC00000000003001E050 +:108C8000060000320000B90B005001E8F660809C3D +:108C90000800000000400268129AFE380000B80B7D +:108CA0009F3101E096226EBC00000000003001E020 +:108CB0000600003200000000005001E8060000320B +:108CC0000000000000A801E0060092321800360003 +:108CD000000000F8730A03F91D00BD0B04000080BA +:108CE00002A417B80000BA0B000000141840819CC1 +:108CF00000000000000000D8028001320020008047 +:108D000000000028090037320000B10F0000000801 +:108D1000E80100F40000C00B1200004802C080B25D +:108D20000000DC0E00000030030038F20000C40B2D +:108D300023010014184081BA3E00C30B1200002C1E +:108D400082CD2EB218003600CA0000F8730A03F96B +:108D50000000C40B04010014184081BC0000990FEE +:108D600000000080020000F00000CA0B2931010C55 +:108D700009006EB22B008C071201002C82CD2EB29E +:108D80000000C80B000000800200009000009C0D55 +:108D9000000C020009806EF20000D30B000000807E +:108DA000020000900000AA0F00000080020000F006 +:108DB000000000000000001C080090320000D20BF0 +:108DC00004000028098080B20000F10E000000D8E5 +:108DD000020000D20000D20B04000080028092BC8E +:108DE00018003600000000F8730A03F900007D0542 +:108DF000000000080800009200008C071D000080A1 +:108E0000020000B000008C078000008002812FB6B5 +:108E10002A00D50B1200002C82CD2EB200008C0748 +:108E2000000000F802812F940000BA0D0000001825 +:108E3000094081F20000A30D00A8012009006EF294 +:108E4000000000000030010C09006E3200009C0D93 +:108E5000000C020009806EF200008E070000008006 +:108E6000020000900000990F00000080020000F056 +:108E70000000AA0F00000080020000F000007D0545 +:108E80000000001C0800909200000000545401FCF7 +:108E900002C06E3210000000000000A8780B1638E7 +:108EA00008000000000000AC780B1638000000003D +:108EB000000000B0A8002D3700440000000000B002 +:108EC000880D8B3A00000000005001B408806E321B +:108ED0000000ED0B0431019008006EB202000000AA +:108EE000000000C8828D8A3700000000000000C822 +:108EF000C2A22C3A1800EB0B86410278880D78B696 +:108F00000000E60B9F0100A818808ABC9F00E60BBA +:108F1000000000A808003692000000000040020493 +:108F2000B83F78300000FB0B00000004D862809C42 +:108F300002000000000000C8828D8A370000000097 +:108F4000000000C8C2A22C3A1800F20B8641027839 +:108F5000880D78B60000ED0B9F0100A818808ABC30 +:108F60009F00ED0B000000A8080036920000F40BF3 +:108F700028400204B83F78B000000000C801000497 +:108F8000D862803C0000F80B02010090182089BCD8 +:108F900000000000000000B4080000320000ED0BEB +:108FA0009F0100A818808ABC9F00ED0B000000A85C +:108FB000080036920000FB0B04000090182089BACC +:108FC000000036109F000004486280BC000036108C +:108FD000900000B448628BBA0300361004400200CF +:108FE000081EFFB80000030C00000000D822809A81 +:108FF0000000280C04000080A2E28ABC02000000ED +:10900000000000C8828D8A3700000000000000C800 +:10901000C2A22C3A1800260C86400278880D78B639 +:109020000000361004400204B83F78B00300361048 +:1090300004400200081EFFB80000070C1201006087 +:10904000084023B200820000000000080880363289 +:10905000000031031201002C72E02EB20000050C5A +:109060000000008002000090000036101200002472 +:10907000080023B2000036101200002008C023B2FE +:109080000000361012000018088023B20000000013 +:10909000000000D80280013200C0110C1801000C41 +:1090A000A8CD3EB200000B0C12000038028081B245 +:1090B000000036101200003C020082B200003610A0 +:1090C00012000030024082B200003610120000345C +:1090D000020086B22080050C00000008088036924D +:1090E00000000000000000D8020000320000000074 +:1090F00000380200B81B803A00000000643001E034 +:1091000016206E3A00000000000000000740803288 +:10911000000000000008000007008032000000008E +:10912000001000000740823200000000001800001C +:10913000070086320000180C12000050F2C138B44B +:1091400000000000000000D8028001320000000092 +:10915000001800000780813200000000002000009D +:1091600007008232100000000030000017E02C39A8 +:109170000000000000380000F7010B340000200C54 +:1091800080010080328087B60000000000380000B7 +:10919000B70170340000000000000008E80100344E +:1091A00000002F0C020C0280A21B89BC18003600A4 +:1091B000000000F8730A03F90000DC0E0000003024 +:1091C000030038F20000240C1200004802C080B2F4 +:1091D00018003600000000F8730A03F90000FD0BC8 +:1091E0009F0100A818808ABC9F00FD0B000000A80A +:1091F0000800369200002A0C8001008032802FB6D1 +:109200003E00290C1200002C82CD2EB200002C0C46 +:109210001D010080020000B000008C07000000F873 +:1092200062812F9500008C078000008002812FB69C +:109230002A002D0C1200002C82CD2EB200008C07CB +:10924000000000F802812F940000000000380000A8 +:10925000C70170340000DC0E00000030030038F25B +:109260000800330C231901E8762081B93E00320C46 +:109270001200002C82CD2EB20000350C1D010080A2 +:10928000020000B00000380C000000F862812F9549 +:109290000000380C8000008002812FB62A00360CB6 +:1092A0001200002C82CD2EB200000000000000F859 +:1092B00002812F340000FA0D0000002CF90100F4A7 +:1092C00000003B0C120100E802C021B21800360079 +:1092D000000000F8730A03F900003B0C120000487C +:1092E00002C080B200003203000000F8A2802F9478 +:1092F00000000000000000D80280013200000000E1 +:109300000030002808006E3200000000545401FCB8 +:1093100002C06E3200C0490C1801000CA8CD3EB24C +:109320002080000000000028098036320000F10E85 +:10933000000000D8020000D20000460C04000080AB +:10934000028092BC18000000000000F8730A033984 +:10935000470C3600000000C00200369218003600AC +:10936000000000F8738A03F900000000000000D834 +:109370000280013200C0460C1800000CA8CD3EB29D +:109380000020008400000028090037320000AD0FE3 +:1093900000000008E80100F400008C0700000080D5 +:1093A0000200009000000000000000D8028001329E +:1093B00000000000545401FC02C06E3200C0520C88 +:1093C0001801000CA8CD3EB220800000000000086B +:1093D0000880363200002F031201002C72E02EB2FA +:1093E0000000500C00000080020000900000510FAF +:1093F00000000028090002F200005A0C0000005C86 +:109400000800009200000000000000D80280013235 +:1094100000000000545401FC02C06E3200C05A0C1F +:109420001801000CA8CD3EB220800000000000080A +:109430000880363200008C0F0000005C1FC0F5FA77 +:1094400000003103000000800200009000000000D6 +:109450000030002808006E32002000840000002840 +:10946000090037320000AD0F00000008E80100F4E9 +:1094700000005F0C0000008002000090000000006F +:1094800000000008080000320000650C04000080A5 +:1094900002C085B20000650C80000080F2C185B674 +:1094A0000000640C1C41028006C085B20000000070 +:1094B0000000006802C58530000000000000007058 +:1094C0001F00F73A00000000000000F822812F344E +:1094D0000000DC0C80010080A2802FB61800000084 +:1094E000000000F8730A0339DC0C3600CA0000C023 +:1094F000020036920000AD0C8001008082812FB600 +:109500000000B20C1F20010809006EB20000AD0C73 +:1095100004300108899B90BC0000710C043101806B +:1095200002006EBC0000E00D00000080020000F0B0 +:1095300000006F0C0050014808806E920000361049 +:109540000000008002000090000000000000000405 +:109550002861803C0000810C000000002821809AD6 +:109560000000E00D0030014808006EF20000740CAD +:1095700000500104A85B809C0000361000000080B1 +:10958000020000900000000000500100A81B803A7B +:1095900000007E0C0700004818A084BC08000000F2 +:1095A00000400200189AFE38000000000000006829 +:1095B000020080320000E00D00000080020000F098 +:1095C00000007B0C000000800200009000003610BC +:1095D000000000800200009000007E0C07000048A0 +:1095E00018A084BC0800000000400200189AFE3851 +:1095F0000000780C00000068020080920000810CDE +:109600000400004818A084BA000036109F0000042F +:10961000286180BC00000000000000002821803A82 +:1096200000000000005401FC02C06E3200008A0CF1 +:1096300012010060084023B200820000D601000839 +:10964000088036320300361004400200381AFFB892 +:109650000300000000000078096080391800000055 +:10966000D241028CE6A1973900000000005001E8C9 +:1096700006808432290031031201002C82CD2EB2E3 +:109680000000880C000000800200009000003610EE +:1096900012000024080023B200003610120000203F +:1096A00008C023B20000361012000018088023B250 +:1096B00000000000000000D80280013200C0950CBC +:1096C0001801000CA8CD3EB220800000D601000891 +:1096D0000880363200008F0C12000038028081B200 +:1096E000000036101200003C020082B2000036106A +:1096F00012000030024082B20000840C12010034DB +:10970000020086B2000036100000008002000090C7 +:10971000080000000040025C189AFE3800000000BB +:10972000000000480800003200000000000000D8DF +:1097300002000032000000000000000007408032FC +:109740000000000000080000070080320000000058 +:1097500000100000074082320000000000180000E6 +:109760000700863200009C0C12000050F2C138B491 +:1097700000000000D60100D8028001320000000085 +:109780000018000007808132000000000020000067 +:1097900007008232100000000030000017E02C3972 +:1097A0000000A40C80000080328087B6001000808A +:1097B00000380000070037320000A50C00000080D0 +:1097C00002000090001000880038000007003732C7 +:1097D00018003600000000F8730A03F900000000CA +:1097E0000000006802C08532000000000000000890 +:1097F000E80100340000A80C1200004802C080B24A +:1098000018003600000000F8730A03F90000E00DAC +:1098100000000080020000F00000810C00000080C9 +:10982000020000900000B20C0000008002000090D6 +:109830000000E00D00000080020000F00000B00C0D +:1098400000380200B81B809C0000B20C00000080B1 +:1098500002000090050000000000006802A0FE3831 +:109860000000AD0C00400280024068920000000041 +:10987000CA0100D8020000320000B50C04B8018013 +:1098800002006EBC0000000000B801E0861BEE3C48 +:109890004C0000000000000007003632000000000D +:1098A00000000078A9002D37B44400000008000033 +:1098B000878D973A000000000000007899C02C378F +:1098C000B400000000000078898D973A000036103F +:1098D0000210000087BF97BA0000000000180000C7 +:1098E0000740FE320000BC0C12000048F2C138B440 +:1098F0000000BD0CB6000080020000B00020BE0CCD +:1099000012000064A2CD2CB200000000A60000806E +:10991000020000300000C20C80010080A2802FB63F +:1099200018003600CA0000F8730A03F900008C071B +:10993000005401FC02C06E9200000000005401FCC3 +:1099400002C06E320000C80C12010060084023B251 +:109950000082000000000008088036322900310330 +:109960001201002C82CD2EB20000C60C0000008037 +:10997000020000900000361012000024080023B2FC +:10998000000036101200002008C023B2000036107C +:1099900012000018088023B200000000000000D868 +:1099A0000280013200C0D30C1801000CA8CD3EB2D9 +:1099B0002080000000000008088036320000CD0C36 +:1099C00012000038028081B2000036101200003C04 +:1099D000020082B20000361012000030024082B253 +:1099E0000000C60C12010034020086B200003610DE +:1099F00000000080020000900000E00D0000004820 +:109A0000080000F20800D60C0040025C189AFE988C +:109A100000003610000000800200009000000000EE +:109A200000500100A81B803A0000970C000000487D +:109A30000800009200000000005401FC02C06E32D9 +:109A40000000510F00000028098002F20000BD0C48 +:109A500000000080020000900000510F000000286C +:109A6000090002F20000DF0C9A0100F862812FB4B5 +:109A700010240000000000F8A28D2F31000000002B +:109A800000D601EC06C06E342E008C071201002CAB +:109A900082CD2EB20000DF0C00000080020000909A +:109AA0000000E80C80010080F2C185B60000E50CE2 +:109AB0001F400284E60100B40000E80C1D0100F81C +:109AC00022812FB40000E80C000000F862812F957D +:109AD0000000E70C1D010080020000B00000000043 +:109AE000000000F862812F35000000000040028075 +:109AF000024068320000EA0C04980164881B87BCAD +:109B00000000D70F0090010809006EF20000071056 +:109B100000000080020000F0000036101200006813 +:109B200002C585B000000000000000F8D2802F358B +:109B300000008E07370000F8D2812FB4000000002B +:109B4000000000F872812F343D008E071201002CB6 +:109B500082CD2EB20000EF0C0000008002000090C9 +:109B60000000F80C80010080F2C185B60000F50C01 +:109B70001F400284E60100B40000F80C1D0100F84B +:109B800022812FB40000F80C000000F862812F95AC +:109B90000000F70C1D010080020000B00000000072 +:109BA000000000F862812F350000000000400280B4 +:109BB000024068320000000000D401EC16C06E3A8A +:109BC000000036101200006802C585B000008E0744 +:109BD00004B0008002006EBC37008E071201002C1A +:109BE00082CD2EB20000FB0C00000080020000902D +:109BF0000000040D80010080F2C185B60000010D57 +:109C00001F400284E60100B40000040D1D0100F8AD +:109C100022812FB40000040D000000F862812F950E +:109C20000000030D1D010080020000B000000000D4 +:109C3000000000F862812F35000000000040028023 +:109C4000024068320000100D000000800200009009 +:109C500000000C0D80010080F2C185B60000090DE6 +:109C60001F400284E60100B400000C0D1D0100F845 +:109C700022812FB400000C0D000000F862812F95A6 +:109C800000000B0D1D010080020000B0000000006C +:109C9000000000F862812F350000000000400280C3 +:109CA000024068320000100D370000F8D2812FB456 +:109CB00000000000000000F872812F343D00100DFC +:109CC0001201002C82CD2EB200000E0D000000808B +:109CD000020000900000000000D401EC06000032F9 +:109CE00000008E071201006802C585B00000361022 +:109CF000000000800200009000008C0780010080BE +:109D0000F2812FB600008C0780000080E2812FB620 +:109D100000008C07085901EC06FB6EBC0000000037 +:109D2000000000D80280013200000000545401FC01 +:109D300002C06E3200C01D0D1801000CA8CD3EB24D +:109D400000000000005801EC06FB6E3A2080000085 +:109D5000000000080880363200002F031201002C9A +:109D600072E02EB200001B0D000000800200009087 +:109D70000000AA0F000000F8E2812FF40000200D7F +:109D80000603018012C06EBC19007D050000001C96 +:109D9000080036921A007D050000001C080036926B +:109DA00000C00000000000F8A28D2F31000000006C +:109DB000000000D802800132002000C0000000280E +:109DC00009003732000000000030002808006E3221 +:109DD00000000000453000E0060000320000AD0F3A +:109DE00000000008E80100F400002C0D040201EC62 +:109DF00016C06EBC00000000C90100141840813A72 +:109E000000000000000000F802802F3400C02C0D7C +:109E100012010040A28D39B200002A0D000000801E +:109E20000200009018003600CA0000F8730A03F917 +:109E300000002C0D9F010014184081BC00008E070B +:109E40008001008092802FB62B008E071201002C1B +:109E500082CD2EB200002F0D000000800200009085 +:109E6000000036101F0100D8028001B2000000007F +:109E7000005401FC02C06E3200C03C0D1801000C01 +:109E8000A8CD3EB2208000000000002809803632B4 +:109E90000000F10E000000D8020000D20000390DD1 +:109EA00004000080028092BC18000000000000F84E +:109EB000730A03393A0D3600000000C002003692E2 +:109EC00018003600000000F8738A03F90000000053 +:109ED000000000D80280013200C0390D1800000CCB +:109EE000A8CD3EB20000AA0F000000D8024000F248 +:109EF00000F0430D1D400200A80D68B100003610AF +:109F00001E400284060000B20000410D120000282D +:109F1000020580B008003D0D000000F823400199C3 +:109F200000003D0D12010068020580B000003610EF +:109F300000000080020000900000430DB50000808A +:109F4000020000B000000000A50080A0360B6A35BA +:109F5000000000000000005009C02932000000008D +:109F60000056012808C06E32000000000000007892 +:109F7000390B2E320000000000000020F3819734DE +:109F800000004C0D04000078D90130B6000000003C +:109F900000000000B905303018000000000000F893 +:109FA00003A403390000000000000034330B2F32FB +:109FB0000000590D04000078D90130B600000000FF +:109FC00000000078B90530300000520D0400008018 +:109FD00042E529BC00000000000000F80200003249 +:109FE00018000000000000F8738A02390000000029 +:109FF0000000009C028097320000580D25010008E7 +:10A00000080000B20000560D12000028020580B0C2 +:10A010000800580D000000F8234001990000580D79 +:10A0200012010068020580B00000361000000080B8 +:10A030000200009000004C0D000000F402000092AD +:10A0400000005D0D0400008042E529BC0000000016 +:10A05000000000F80200003218000000000000F8C4 +:10A06000738A0239000000000000009C0200953253 +:10A0700000000000CA0100D8028001320000000088 +:10A080000030000007C02C32001000A00038000093 +:10A090000700373200000000002000000700EE3209 +:10A0A000000000000038000C078082320000620DC2 +:10A0B0001200004802C080B2000032030000000815 +:10A0C000E801009400007A0D02000080A24280BCEA +:10A0D00000007A0D80000080F2C185B600007A0D84 +:10A0E0001F400208B9BF68B000006C0D80410280BB +:10A0F000E28168B608000000000000107961803934 +:10A1000000000000D22101E016206E3A1800000085 +:10A1100000400288E6219139000000000001005C47 +:10A1200008000072000000000000000C19A0903A26 +:10A1300000007A0D06010080D2FF90BC0000700D77 +:10A140002C410278F98168B400000000000000781A +:10A15000B98197340300000000400200291AFF383B +:10A160000000000000380200B91B903A0000000017 +:10A17000D241028816A0973A00000000450000D89E +:10A1800002400032000036109F2001E016206EBA17 +:10A1900000000000000000000740803200000000C6 +:10A1A000000800002724903A000000000010000082 +:10A1B00007008A320000000012010058F2C1387412 +:10A1C0000000780D00000080020000900800840D5F +:10A1D0001A000034796180B900008F0D1E010080E3 +:10A1E000020000B000008F0D1F400200094068B25D +:10A1F00000007C0D80000080E20190B60000361067 +:10A20000380000541F40F5BA0000000000000008AC +:10A21000B93F903000000000002801E026246E3A8B +:10A22000080036101E00000009A4FEB800008F0DC3 +:10A2300012010068020590B0000036100000008096 +:10A240000200009000008F0D8000008082812FB6F8 +:10A2500000008D0D1F410200094068B2000000009F +:10A26000002801E016206E3A00008A0D800100806F +:10A27000F2C185B60000000000400284E60100340F +:10A28000000000000000008002000030000000001C +:10A29000004002800240683200003610380000544E +:10A2A0001F40F5BA00000000002101E016206E7A80 +:10A2B0000000850D80000080E20190B600007E0D58 +:10A2C000000000541F40F59A000000000000005CF0 +:10A2D0000800003200000000D22101E016206E3A92 +:10A2E000180000001E410284E661937900003610D8 +:10A2F00000000080020000900000FFFF00000080CE +:10A30000020000900000970D1D5D01EC16C06EBCB0 +:10A31000000000000F01008002000070000000003B +:10A32000000100F8B2802F74000000000F010080CF +:10A33000020000700000960D045E01EC16C06EBCB9 +:10A3400000000000005C01EC06400032000000004C +:10A3500000010080020000700000FFFF000000808C +:10A3600002000090000000000420018082DB907C4D +:10A3700000000000020C0280A2DB907C0000A00D17 +:10A3800006210180821B90BC2700A10D0000000067 +:10A390000900369228000000000000000900363253 +:10A3A000000000000000008812002C3A0000FFFFAF +:10A3B0000000008002000090000000002FA0017843 +:10A3C000891B927A0000000006880178899B977C9F +:10A3D000000000000034020409C06E3D00000000CF +:10A3E000000C020019A46E370000AB0D02000080C3 +:10A3F00002A497BC0000AB0D02000080020000B078 +:10A400000100000000000078898D973700000000EF +:10A4100002010280829B977C00000000000100F88E +:10A42000F2802F740000FFFF000000800200009007 +:10A4300000000000DA5B01EC0640ED320000B10DD7 +:10A4400004010080024086BC0000000000A001E082 +:10A4500016206E3A0000B30D00D401EC0600009205 +:10A460000000D70F0090010809006EF20000000004 +:10A4700000A001E016206E3A00000710330100F83A +:10A4800082802FB4000007109FF0018082DB87BC20 +:10A49000000007109FF8018022216EBC0000000020 +:10A4A00000E801E00600EE320000000000F001E0EC +:10A4B00006C08732000007100000008002000090F4 +:10A4C0000000FFFF00000080020000900000C50DAA +:10A4D0000421013069246EBC0000BF0D1F4002241E +:10A4E000094068B20000BB0D80000080E24192B6D6 +:10A4F0000800BB0D1201006892A4FEB800003610DF +:10A5000000000080020000900000000000A801E0B0 +:10A5100066246E3A0000C20D382001E0060093B2B6 +:10A520000000C30D002801E00600009200000000BA +:10A53000003001E00600003200000000005001E899 +:10A5400006000032000000000001008002000070E0 +:10A550000000CA0D38510100A99B91BA0000C80D36 +:10A5600004410208B9FF68B00000C60D0040028037 +:10A57000024068920000D50D9F3101E066246EBC58 +:10A580000000D50D003001E0060000920000D30D60 +:10A590000428010409006EB20000D10D9F010000E3 +:10A5A000192490BC0000000000A801E066246E3A67 +:10A5B00000000000002801E00624003C000000002C +:10A5C000005001E806000032000036109F2001E034 +:10A5D000060093B20000000000010080020000703D +:10A5E00000000000002801E0060000320000DB0D42 +:10A5F00004000080020090BC0000D50D0441020858 +:10A60000B9FF68B00000D30D00400280024068929C +:10A610000000D90D02000080222490BC0000DB0D58 +:10A6200080400280F2C168B6000000000040028C49 +:10A63000B6C168350000DB0D000000F822812F94C0 +:10A640000800361012400268129AFEB80000D30DBE +:10A6500004010000292490BC0000000000A801E0D3 +:10A6600066246E3A00000000005001E806009032B7 +:10A67000000036109F2001E0060093B200000000A9 +:10A6800000010080020000700000FFFF0000008059 +:10A69000020000901800E20D1F41027888CD68B6D4 +:10A6A000000000000000008812002C3A0000E40DB9 +:10A6B00080010080628087B60000E00D00400280CB +:10A6C000024068920300361004400200381AFFB8B6 +:10A6D000000036101F400204B8FF68B00000000000 +:10A6E00000390200B81B807A0000FFFF00000080E4 +:10A6F000020000900000EF0D80010080A2802FB6C4 +:10A700000000EC0D1201000009C021B21800360053 +:10A71000000000F8730A03F900000000000000D8F0 +:10A72000024084321D00EF0D0401008002A417B81E +:10A730000000E90D9F010080180088BC0000361061 +:10A740000000008002000090000000000060006C2B +:10A7500008006E3200000000CA68004C08006E322B +:10A76000000036100470001808006EB200000000EF +:10A7700004000080A2A0817C0000F60D8001008012 +:10A78000E2802FB60000F60D1B000080020000B032 +:10A79000000000000600008062E0837C00000000F2 +:10A7A000CA0100F802802F3500A00000120100400D +:10A7B000A28D39720000F70D0000008002000090A9 +:10A7C0000000FFFF00000080020000900000000079 +:10A7D000000801E406C02D32EEFF0000001001E089 +:10A7E000868D2F31000000000000001CB3E43932D8 +:10A7F0000000000E04000078D90130B6000000000F +:10A8000000000078B905303018000000000000F8A2 +:10A81000E3A503390000000000000034330B2F32A1 +:10A820000000000004000078D9013076000000002C +:10A8300000000078B905303018000000000100F871 +:10A84000E3A503790000FFFF0000008002000090F4 +:10A8500000000000000000CC020000320000080EE2 +:10A860002000012C09C06EB20000090E001686CC33 +:10A8700006C0929200000000001486CC06C09232FE +:10A880000000000012010040628E92520000090E8A +:10A8900000000080020000900000FFFF0000008028 +:10A8A0000200009000000E0E04000078D90130B6BE +:10A8B0000E0E3600000000C00200369200000000BC +:10A8C000000000140300383200000000000000E027 +:10A8D0000200303200004E0E04000024D80130B6D1 +:10A8E000120E000000000088824D823A00003610EF +:10A8F0000000008002000090000036100000008080 +:10A90000020000900000361000000080020000905D +:10A910000000361000000080020000900E0E36008D +:10A92000000000C0020036920000380E00000080D7 +:10A930000200009000001A0E000000204805309030 +:10A940000000361000000080020000900000260E7B +:10A95000921101BC08006EB200000000000801DC8A +:10A9600002406E3200001E0E1F1101E026C18BB5A1 +:10A970000000260E1D000080020000B00000000054 +:10A98000000000D802000032800200000000000039 +:10A99000070036320000000000000078A9002D37C3 +:10A9A0002045000000080000878D973A0A0000004B +:10A9B00000000078890D82370000000000100000C0 +:10A9C000A7BA973A000000000018000007C0EA325A +:10A9D0000000250E1200004802C038B200002A0E06 +:10A9E000800E01BC08C06EB2000000000000000034 +:10A9F000190E823200E0320E12010048A20D90B210 +:10AA00000000280E000000800200009000000000FE +:10AA1000000000D802400032B40000000000000036 +:10AA2000070036320000000000000078A9002D3732 +:10AA30000044000000080000878D973A00000000E5 +:10AA400000000078990082370000361002100000E4 +:10AA500087BF97BA00000000001800000740FE32D0 +:10AA60000000310E12000048F2C138B41800360060 +:10AA7000000000F8730A03F9000000000000000461 +:10AA8000896038320000000000000018F341903463 +:10AA90000000380E04000078D90130B60000000034 +:10AAA00000000000B905303018000000000000F878 +:10AAB00003A40339000000000000000019CE2C326E +:10AAC0000060390E12000040A20D90B2000000009C +:10AAD000000000D80200003260000000000000000A +:10AAE0000700363200000000000000BCA8002D372F +:10AAF000A04700000008000087CD8B3A0A00000044 +:10AB00000000007889CD2C3780020000000000781A +:10AB1000898D973A0000000000100000A7BA973A0C +:10AB2000000000000018000007C0EA320000420EDA +:10AB300012000040F2C138B418003600000000F8DE +:10AB4000730A03F900000000000801DC02406E32C5 +:10AB50000A00470E1F01007889CD2CB700000000C5 +:10AB60001D1001F802006E7280020000000000005B +:10AB700007003632204500000008000087CD8B3AE0 +:10AB80000000000000100000A7BA973A0000000083 +:10AB90000018000007C0EA3200004B0E120000400F +:10ABA000F2C138B418003600000000F8730A03F947 +:10ABB00000000000001101F802006E7200000000A9 +:10ABC000001001F802006E3200000000000901DCF4 +:10ABD00002406E720000FFFF000000800200009043 +:10ABE0000000000000000000090000320E0000001C +:10ABF00000000004894D0D36000000000000000038 +:10AC000007800B32000000000008000007009032AF +:10AC10000000000000100000070036320000560E51 +:10AC20001200004CF2C138B40000000000000080A7 +:10AC3000020000300000570E1200008002C021B256 +:10AC40000000000000000000E902903A0000530EEE +:10AC500004010004194090BC0000000000010080C5 +:10AC6000020000500000FFFF000000800200009082 +:10AC70000000650E80010080A2802FB60000600EEB +:10AC8000120100E802C021B218003600000000F8EE +:10AC9000730A03F90000640E0400008002802DBCDA +:10ACA000000036109F000080180088BC0000600E75 +:10ACB000120100E802C021B200005F0E0000008017 +:10ACC0000200009000000000CA0000D80240843258 +:10ACD000000000000040006C881C833A0000000067 +:10ACE0000048004C0800723200003610085000186E +:10ACF000C82072BC00000000040000800240817C7B +:10AD000000000000000000141840813C00003610D4 +:10AD100002000020880182BA00000000000000D874 +:10AD200002000032000000000000000007000632B0 +:10AD30000700000000080000774A09390000000001 +:10AD4000001000000700823200000000CA19000055 +:10AD5000074082320000700E12000040F2C138B489 +:10AD600000000000000100D8024084720000FFFFD4 +:10AD70000000008002000090000000004D00000074 +:10AD800067E0833E000000000008000007008032FA +:10AD9000000000000010000007C086320000000024 +:10ADA0000018000007C084320000B70E040000281D +:10ADB000D8A082BC0000000000000018D8A0813C90 +:10ADC0000000890E0400003CD8E083BC00007D0E2A +:10ADD0000400008072802DBC00007B0E1200005029 +:10ADE00002C038B20000830E510000D812802D9AA4 +:10ADF00000007D0E12000050F2C138B41800360079 +:10AE0000000000F8730A03F90000820E04000080BD +:10AE100072802DBC00007E0E670000F8A2802FB566 +:10AE200000003610120000E802C021B2000000004D +:10AE3000510000D8020000320000870E2A010000F5 +:10AE4000D82080BA0000870E1201000009C021B28C +:10AE500018003600000000F8730A03F90000000033 +:10AE6000000000D8024084320000F00D0060006C49 +:10AE700008006EF20000740E4D00000067E0839E33 +:10AE80000000890E12000050F2C138B418003600DC +:10AE9000000000F8730A03F91D008E0E0400008004 +:10AEA00002A417B800008A0E670000F8A2802FB530 +:10AEB000000036101200000009C021B20800361050 +:10AEC00012400268129AFEB80000DC0E000000304A +:10AED000030038F200009F0E1F00006CD8E086BA15 +:10AEE0000000E00D510000D8020000F20000940EB6 +:10AEF0000000003C0840809200009F0E000000808F +:10AF0000020000900000980E80010080F2812FB6B0 +:10AF10000000980E80000080E2802FB60000980E9E +:10AF200080010080328087B600000000000000F839 +:10AF3000E2802F340000730E04010080028081BC87 +:10AF400000009D0E80010080A2802FB600009D0EA3 +:10AF50001201000009C021B218003600000000F8FC +:10AF6000730A03F900000000000000D80240843298 +:10AF70000000F00D0060006C08006EF20000740E1E +:10AF80004D00000067E0839E0000A30E800100805A +:10AF9000E2802FB60000BA0E80010080A2802FB69A +:10AFA00018000000CA0000F8730A0339BA0E360010 +:10AFB000000000C00200369200000000000000A463 +:10AFC000A8608A3C0000A60E2FA8012099226EBA24 +:10AFD0000000A30D00000080020000F0000000004F +:10AFE00000A801E00600923200000000005001E8D5 +:10AFF000060000320000AA0E232101E0060000B284 +:10B000003E00A90E1200002C82CD2EB20000361098 +:10B01000043000E0068082B20000B20E042100E09D +:10B02000068081B20000B00E80010080A2802FB6A1 +:10B030000000B00E1201000009C021B21800360055 +:10B04000000000F8730A03F900000000000000D8B7 +:10B05000024084320000F00D0060006C08006EF2C7 +:10B0600000000000002000E0068081320000361061 +:10B07000041000E006C086B2000000002A1900E0BB +:10B0800006C0847200000000000000F8A2802F3586 +:10B09000000000001201000009C0217218003600F3 +:10B0A000000000F8730A0399000000000000003C53 +:10B0B000D8E0833C0000B80E12000050F2C138B452 +:10B0C00000000000000000F8A2802F340000000003 +:10B0D0000000008812002C3A0000FFFF00000080F2 +:10B0E0000200009000000000000000000900003293 +:10B0F000000000000000007809000032000000009D +:10B10000000000A802000032EE05C20E040100801B +:10B11000820DF6BC0006000000000008090036326F +:10B120000000C40E0000000409C0099200280000BD +:10B130000000000809003632000000000000000492 +:10B14000098009321E000000000060C087CD003772 +:10B1500000000000000860C0078097320030000047 +:10B1600000000078898D2A3A000036101200005C39 +:10B17000528197B400000000000000002924903A9A +:10B180000800000000000078890D903600000000E3 +:10B19000000000041940903C00000000000000A8DE +:10B1A00052822A3A0008C40E02010080828D2ABC15 +:10B1B0000000D50E06000080024090BC0000361052 +:10B1C000120000A8020020B21E000000000000C013 +:10B1D00087CD003700000000000800C007809732CC +:10B1E000000036101200005C52812AB400000000FA +:10B1F000000000002924903A0800000000000078B8 +:10B20000890D90360000CE0E04010004194090BC58 +:10B210000500000000000078890D9036000036100F +:10B2200012000068028097B20000000000000000D9 +:10B230002924903A00000000000000785900903660 +:10B240000000D60E95010080222490BA0000000074 +:10B2500000010080020000500000FFFF000000809D +:10B26000020000900000000004010078D90130764F +:10B27000000000000000002809C029320000000082 +:10B280000000009CB24528300000E80E860100084E +:10B2900009802FB2000000000000002C094081321C +:10B2A00000000000000000F8020000320000000072 +:10B2B000000000F40200003218000000000000F856 +:10B2C000738A0239000000000000009C0280923264 +:10B2D0000000E70E0407018002C06EBC0000ED0E06 +:10B2E000C30701ECB6E46E9A0000ED0E000601EC17 +:10B2F000B6E46E9A000000000000002C09058030C2 +:10B3000000000000000000F8020000320000000011 +:10B31000000000F40200003218000000000000F8F5 +:10B32000738A023900003F0F0000009C028092D215 +:10B330000000000000000030030038320000000070 +:10B3400004010078D90130760000DF0E0000009C77 +:10B35000B24528900000FFFF00000080020000902E +:10B36000000000000000008802C0E8320200F20E77 +:10B37000B00000A0F20B00B9000000000000000CBB +:10B38000ABE4B0320000F70E80010080F24BD0B683 +:10B3900000000000A00000280900003200000000AA +:10B3A00000010080020000500000F90E040100803E +:10B3B000123EF8BA0000040FA0000004FD4BD09428 +:10B3C0000000000F80010080D28192B60000000FC3 +:10B3D000800100802281FCB600000000A000000473 +:10B3E000FD4BD034000000000000008401C02F326B +:10B3F0000000000000000080F101003400000000A7 +:10B400000000009401C02F320000040F00000090E3 +:10B41000F101009400000000A000008401C02F3260 +:10B420000000000000000080F101F834000000007E +:10B43000000000900140F8320000000000010028E8 +:10B44000090000520000080F040100280934B0BAB6 +:10B450000000050FB0000080020000B000000000F6 +:10B46000A0000004FD4BD0350000000000010028C2 +:10B47000090000520000080FB00000A822C02FB73A +:10B480000000060F040084C037ACB0B2000000001A +:10B49000A000000C0B000032FFFF0000000000784D +:10B4A000A94DB03000000F0F800000800240B0B600 +:10B4B000000000000000007869819735000000005E +:10B4C000000084080B007C32000000000000000037 +:10B4D000E72501320042000000080000878D2A3A6B +:10B4E00000000000001000000700B0320000000063 +:10B4F000001800000700D0320000000012010048D0 +:10B50000F2C138540000130F0000008002000090C8 +:10B510000000150FB00000A0020000B20000000003 +:10B520000000000CABE4B03200001A0F8001008074 +:10B530000240D0B600000000A00000280900003240 +:10B5400000000000000100800200005000001C0FFD +:10B5500004010080123EF8BA00002D0FA000000484 +:10B560000D40D0940000260F80010080D28192B659 +:10B570000000260F800100802281FCB60000000040 +:10B58000A00000040D40D03400000000000000784E +:10B5900009C02F3200000000000000FC0200003251 +:10B5A000000000000000008401C02F3200000000F5 +:10B5B00000000080F1010034000000000000009451 +:10B5C00001C02F320000000000000090F1010034A3 +:10B5D00000002D0F000000FC028097920000000088 +:10B5E000A000007809C02F3200000000000000FC1D +:10B5F00002000032000000000000008401C02F3271 +:10B600000000000000000080F101F834000000009C +:10B61000000000900140F83200000000000000FC33 +:10B62000028097320000000000010028090000524B +:10B630000000310F040100280934B0BA00002E0FB9 +:10B64000B0000080020000B000000000A000000474 +:10B650000D40D03500000000000100280900005214 +:10B660000000310FB00000A8020000B200002F0F50 +:10B67000040084C037ACB0B200000000A000000C91 +:10B680000B000032FFFF000000000078A94DB03031 +:10B690000000380F800000800240B0B600000000BB +:10B6A00000000078698197350000000000008408E0 +:10B6B0000B007C320000000000000000E725013292 +:10B6C0000042000000080000878D2A3A00000000B8 +:10B6D000001000000700B032000000000018000059 +:10B6E0000700D0320000000012010048F2C13854B7 +:10B6F00000003C0F00000080020000900000FFFFEF +:10B7000000000080020000900000410F1C400280F9 +:10B7100006C092B244000000000100F8A28D2F5232 +:10B72000000036101200006802C592B00000000050 +:10B73000000100701F00F75A0000FFFF00000080AA +:10B740000200009000000000D5080000078092323F +:10B75000000000000030000007C02C3200400080D4 +:10B76000003800000700373200000000CA4101E045 +:10B77000068092320000480F1200004802C080B2DA +:10B780000060000000010008088036720000FFFF22 +:10B79000000000800200009000000000003800005F +:10B7A00007809232000000000030000007C02C32F9 +:10B7B00000000000CA3D000C07808332000000003A +:10B7C0001201004802C0807200004E0F000000808D +:10B7D000020000900000FFFF0000008002000090C7 +:10B7E000000000000457018002C06E7C00000000D1 +:10B7F000005701EC068092720000FFFF00000080FD +:10B80000020000900000DC0E00000030030038F25F +:10B810000000570F9D11020C09006EB20000580F76 +:10B8200000F0011C09006E920000000000B8011C2D +:10B8300009006E3200005A0F2CCD011809806EB23B +:10B84000000000000000000CC9C1903400005D0F32 +:10B850003B29020409806EB20000000000D601EC12 +:10B8600056C06E34000000000000000CB9C19034D6 +:10B8700000006C0F00A8010809006EF20000610FC3 +:10B880009D01008017E090BA0000000000300080A9 +:10B8900007C091320000640F003800800700EE926C +:10B8A0000000640F0401008002C091BC0000000091 +:10B8B00000B801E00600EE3200000000007001E078 +:10B8C000060086320000660F3908008007C085B286 +:10B8D00000000000D9C901E8068091320000000094 +:10B8E000C8110080074090320000690F3B210080A2 +:10B8F000070086B200000000DB0000601800863AF6 +:10B9000000000000587801E01620863A0000000090 +:10B9100000290080070085720000FFFF0000008002 +:10B92000020000900000700F020C0280A29B90BCED +:10B93000000000000000027829006E360000700F41 +:10B9400002000080E2A590BC00000000000000089A +:10B95000090000320000720F9F89017849216EBCF6 +:10B960000000000000000078090000320000000024 +:10B9700000000008E9A5903F0000780F04200208AD +:10B98000899B90BE00000000000A0258B89B9036C8 +:10B99000000000000000007849A1903A000000007B +:10B9A0009F880180829B977C00000000008901E055 +:10B9B0000680977200000000000B0258B89B90763A +:10B9C0000000FFFF000000800200009000007F0FD9 +:10B9D00080010080A2802FB600007E0F1201007847 +:10B9E00009C021B218003600000000F8730A03F9FC +:10B9F00000007F0FCA0000D80240849200000000BF +:10BA0000000000F8A2802F35000000000040006C0C +:10BA1000881C833A000000000048004C0800723285 +:10BA20000000361008500018C82072BC000000004A +:10BA30000600008062A0827C000036100200002018 +:10BA4000880182BA00000000000000D80200003225 +:10BA500000000000000000000700063207000000A0 +:10BA600000080000774A09390000000000100000BB +:10BA70000700823200000000CA190000074082322D +:10BA80000000890F12000040F2C138B4000000002D +:10BA9000000100D8024084720000FFFF0000008017 +:10BAA000020000900000930F80010080F2C185B673 +:10BAB0000000900F1F400284E60100B40000930FC5 +:10BAC0001D0100F822812FB40000930F000000F840 +:10BAD00062812F950000920F1D010080020000B0CE +:10BAE00000000000000000F862812F350000000017 +:10BAF00000400280024068320000361012000068E8 +:10BB000002C585B0000000001D000080020000702A +:10BB10000100000004010080A28D2F702A00960F02 +:10BB20001200002C82CD2EB200000000000100F8AF +:10BB300002812F740000FFFF0000008002000090CF +:10BB400080A8000004000080828D2F7000009F0FED +:10BB500080010080D2802FB600009F0F04B00080CB +:10BB600002006EBC00000000000000F872812F345B +:10BB70003D00A20F1201002C82CD2EB200009D0FBD +:10BB800000000080020000900000A20F80010080F1 +:10BB9000F2802FB63C00A50F1201002C82CD2EB2F0 +:10BBA0000000A00F00000080020000900000A50F20 +:10BBB00080010080B2802FB63500A30F1200002C48 +:10BBC00082CD2EB200000000000000F842812F3428 +:10BBD0008000000004000080828D2F7002000000B1 +:10BBE00004010080A28D2F703B00A70F1200002CD3 +:10BBF00082CD2EB200000000000100F812812F74E7 +:10BC00000000FFFF0000008002000090080000001C +:10BC1000001801E876208139EEFF0000000100F8ED +:10BC2000828D2F710000FFFF000000800200009055 +:10BC30000000B10F0000013808C06EF200000000E3 +:10BC40001201004802C080720000AE0F00000080A8 +:10BC5000020000900000FFFF000000800200009042 +:10BC60000000B30F0438017809006EB20000000034 +:10BC7000003801E00600003200000000CA11000098 +:10BC8000078082320000B60F2E190000078097B29D +:10BC90000000000000000028E98192340000BB0F82 +:10BCA0002731000007C02CB200000000D5080000BA +:10BCB0000700873200000000C7000028E9809234A6 +:10BCC00000000000004001E0060087320000000094 +:10BCD00000000008D8818034100000000039000006 +:10BCE000E7A092790000FFFF0000008002000090B2 +:10BCF0000000BD0F1200004412E438B218003600F4 +:10BD0000000000F8730A03F90000C20F040100806C +:10BD100002802DBC0000BE0F670000F8A2802FB586 +:10BD200000003610120000E802C021B2000000003E +:10BD3000000100D8024000720000FFFF00000080F8 +:10BD4000020000900000C70F04300080829B81BC7D +:10BD500000000000CA0100F802802F3500A0C60FC5 +:10BD600012000040A28D39B200C0CB0F0438007819 +:10BD7000898D6EB01000CB0F9F0100F8E2A52FB99E +:10BD800000000000005801EC06C0EE320000000088 +:10BD900000000080020000300000000004280018AD +:10BDA00009006E720000BA0D00000080020000F071 +:10BDB0000000A30D00A8012009006E920000FFFF03 +:10BDC00000000080020000900000D40F04B000804A +:10BDD000829B81BC0000000000B800E886806E34C1 +:10BDE00000000000CA0100F842802F3508A00000C2 +:10BDF00012010040A2CD39720000D20F0000008075 +:10BE0000020000900000000000B800E886806E3458 +:10BE10000000000000010080020000700000FFFF31 +:10BE200000000080020000900000DA0F33CD01BC5A +:10BE300008806EB200001410000000282922EEDCF9 +:10BE40000000DF0F00000080020000900000DF0F04 +:10BE500004B8012809006EB20000DF0F9F71018055 +:10BE6000C2216EBC000036109F000028A924EEBC41 +:10BE70000000141000000028198092DF000000006C +:10BE800000000080020000300000F20F02810180FB +:10BE9000829B90BCEE05EA0F060C0280828D6EBC80 +:10BEA00000904C0000000084020037320000E40FD4 +:10BEB000B8010080020000B00000E20F0000008026 +:10BEC0000200009000000000000000C403809032D7 +:10BED0000000000000B001E096216E3C0000000070 +:10BEE000619801E0060087320000000000D401ECF8 +:10BEF0000600003200000000A800007849403C37EE +:10BF00000000F70F00000008E9A5909A6089200062 +:10BF100000000084020037320000ED0FB8010080FD +:10BF2000020000B00000EB0F000000800200009053 +:10BF300000000000000000C40380903200000000F8 +:10BF400000B001E096216E3C00000000619801E025 +:10BF5000060087320000000000D401EC0600003229 +:10BF60000000F70FA8000008198F909A0000000049 +:10BF70000000007899A1893E000000000000000840 +:10BF8000E9A5903A0000000000B001E096216E3C67 +:10BF900000000000619801E0060087320000000008 +:10BFA00000D401EC060000320000FA0F0600008009 +:10BFB00072A290BC00C0FF3F008001E00600373253 +:10BFC000000000000000000809C089320000FF0FD7 +:10BFD00004790180821B87BC0000FD0F04B0008043 +:10BFE00002006EBC00000110D99001E00680909222 +:10BFF000000004108000008052812FB60000041061 +:10C00000D54101E006008792000001103C9001E05C +:10C01000068090B20000000000C801E806C08B3224 +:10C02000000000009501008002802F7200000510C2 +:10C030009F410180821B87BC00000000000100803E +:10C040000200007000000000D99001E006809032EC +:10C0500000000000000100F872802F740000FFFF54 +:10C06000000000800200009000000D109FD80180A9 +:10C0700022216EBC000000000B0100800200007055 +:10C0800000000D109FE00180C2216EBC0000000086 +:10C090000B0100800200007000000D109FB00180B5 +:10C0A000D2216EBC00000000000100800200007080 +:10C0B00000000F1006680180825B87BC0000000052 +:10C0C000006801E0064087320000111037B001E03F +:10C0D000064087B200000000000000F8D2802F3434 +:10C0E0000000000000D801E006808432000000005B +:10C0F00000E101E0060087720000FFFF0000008001 +:10C10000020000900000201004C1018402006EB201 +:10C110000500000000C001E8868D92370300000092 +:10C1200000C401E8868D9237000000000000008006 +:10C13000020000300300000000C0012C898D6E3623 +:10C140000000000000C4012CA9DB923A00000000AE +:10C150000000002C29C09236000000000000002CD6 +:10C1600019FB923F00000000000000282980923A4D +:10C17000000000000000002CA9E4923F0000000035 +:10C180006FCC01E826FB923E0000000000B901E000 +:10C19000060000520000000000000094028092326D +:10C1A0000000000000C001E006402832100000003E +:10C1B0006FCC01E886CD2A360000000000B901E00E +:10C1C000060000520000FFFF000000800200009007 +:10C1D00000000000009001BC08006E32000000006A +:10C1E00000B001BC88DB8B3E00000000009801BC61 +:10C1F00088DB8B3A000030109F0000BC88E18BBCCC +:10C2000000003010040C0240A8DB8BBE00000000D0 +:10C2100000B00004881B843E00002D1004B1008093 +:10C22000825B80BC00000000000100F8C2802F7417 +:10C2300000000000040C0280A25B807C0000301033 +:10C240000468017819006EB600000000020000804A +:10C25000E265807C000000000000008812002C3A9B +:10C260000000FFFF000000800200009008000000B6 +:10C27000001C01E876208139EEFF0000000100F883 +:10C28000828D2F710000FFFF0000008002000090EF +:10C2900000003610000000B40F40FB9400000000C6 +:10C2A000000000880F402B320000000000000090CA +:10C2B0000F00283200000000000000940F00293217 +:10C2C00010000000000000B85F461839FF000000B1 +:10C2D0000000009C0F003632000000000000009CAF +:10C2E0005FCAF935000000000000004403C0F932C5 +:10C2F00000000000000000E40300003241000010D4 +:10C30000000000E00300373200000000000000E4FD +:10C310000300003240000010000000E0030037324C +:10C3200000004510670000980F802AB2000000004E +:10C33000000000A8020000320000431012C186E095 +:10C3400007C021B20000000000B886C006802A3273 +:10C350004C420000000000A802003632471058117D +:10C36000000000B00F003692000000000000009CAA +:10C370000200003200014411000000AC0F0036D270 +:10C3800000000000000000AC0F802A3200200000F6 +:10C39000000000A802003632000000000000009CEF +:10C3A0000F007E3200000000000000A00F007E326F +:10C3B00000000000000000A40F007E32000000001A +:10C3C000000000A80F007E3200000000000000A85E +:10C3D00002C0FA3200000000000000E007C0F9329D +:10C3E00000000000000000E00700FA32000000003A +:10C3F000000000E00740FA3200005B10000000E09F +:10C400000780FAD200000000000000E00780FB3245 +:10C4100001008210040100B48F4DFBB00200000047 +:10C42000000000A002000039408000000000000C65 +:10C43000ABCDB032100000000000000C5BCAB03978 +:10C44000000000000000000C2BFEB0320000811143 +:10C45000000000800200009000000000000000F8D2 +:10C460000300013200000000000100E007803F529D +:10C4700018000000000000F8738A02390000000074 +:10C4800000000044530A1635000000000000009C24 +:10C490000F80963200000000000000A00FC096320E +:10C4A00000000000000000A40F009732A26003000B +:10C4B0000000005803003732681000000000005CE4 +:10C4C000030036320000000000000050830D0034ED +:10C4D0000000000000000048830D00340000000050 +:10C4E00000000044530A00340000360000000080C1 +:10C4F00002000090000000000000006809C0F9324E +:10C50000000000000000006C0900FA32000000008A +:10C51000000000700940FA3200007A10000000802C +:10C520000200009002000000000000A0F20B0039A1 +:10C5300000006F10800100801240B0B600000000C3 +:10C54000000000043B40B033000000000000000485 +:10C55000FD4BD035000073100000000C0B009792CB +:10C5600002000000000000A0F20B00390000731070 +:10C57000000000046B019794000073101200006823 +:10C58000094020B2000074101200006C094020B273 +:10C590000D000000000000FCA2E516380000791034 +:10C5A0009F000080028096B2000000000000007032 +:10C5B00009C0963200007A100000006C09C0FD929C +:10C5C0000000791012000070094020B20000000045 +:10C5D0000000009C0200003200000000000000D8B3 +:10C5E0000200003202007310040100BCAF2517B82E +:10C5F00006007110040000BCAF6516B800006C1096 +:10C600000400008022C0FBBC00008A1004000080EF +:10C6100012C1FBBC200073100401008082CDFBBC62 +:10C6200002000000000000A0F20B003900008B1097 +:10C6300000000080020000D084100000000000888C +:10C6400082CDF93A00007A110000008002000090CB +:10C650000000B31000000080020000900000B41041 +:10C6600000000080020000900000B8100000008070 +:10C67000020000900000C010000000800200009046 +:10C6800000001911000000800200009000007310EB +:10C69000000000DC0F009792000000000000000086 +:10C6A0000700033240420000000000A802003632BA +:10C6B000000000000008000007802A32000000008F +:10C6C0000010000007009732000000000018000072 +:10C6D00007C096320880901012000040028036B2E7 +:10C6E00000000000000000800200003000009210F6 +:10C6F0001200009C0FC021B21D00951004000080A4 +:10C7000072BE17B800009210000000F81E80EF9A69 +:10C71000130000000000009C7FBE17380000981036 +:10C720000400008012C0F9BC00009210000000F864 +:10C730001E80EF9A000000000000009C0F007E3277 +:10C7400000000000000000A00F007E32000000008A +:10C75000000000A40F007E32000000000001000075 +:10C760000700FA52000000000000009C02000032A6 +:10C770004C420000000000A8020036320000000019 +:10C780000008000007802A3200006E1100000080BF +:10C79000020000D00000721100000080020000D0F2 +:10C7A000000000000000000CCBC1B034000000000D +:10C7B0000000009C0200003200000000000000D8D1 +:10C7C000020000320000F10E0000002809C0B0D2C3 +:10C7D0000000A21004000080028092B20000A610A7 +:10C7E0001200009C0FC021B21D00A910040000809F +:10C7F00072BE17B80000A610000000F81E80EF9A65 +:10C80000130000000000009C7FBE17380000AC1031 +:10C810000400008012C0F9BC0000A610000000F85F +:10C820001E80EF9A0200AE10040100B48F4DFBB0E1 +:10C83000000073100000008002000090080000005B +:10C84000000000F89340013900000000000000B42F +:10C850001F40FB35FE000000000000480300363298 +:10C860000000000000000044030000340000A2109B +:10C870000000000C8BC1B09400007E110008000085 +:10C880000740FA9200006E11000800000740FAD23B +:10C890000880B51012000050028036B200007311FB +:10C8A00000000080020000D0000080110000008025 +:10C8B00002000090000800000000009C0F003632CB +:10C8C00000440000000000A8020036320000000012 +:10C8D000000000A00200003200000000000000E0A4 +:10C8E0000700B03200000000000000A012002A3A49 +:10C8F0000000BB100401009C1FC0F9BC00440000F4 +:10C90000000000A80200363202007D11000000A0E5 +:10C91000F20B00990000C810040100800240FAB236 +:10C9200000440000000000A8020036320000CA10D7 +:10C9300000000080020000D00000D710000000843A +:10C94000020000D200000000000000E007C03C32FE +:10C950000000C4108E010080024028B20044000094 +:10C96000000000A40F0036320000B3100000008069 +:10C970000200009000440000000000A48F4DFA3A2D +:10C980000000B310000000800200009000000000D2 +:10C990000000009C0F00003210000001000000ACFD +:10C9A0000F0037320000DC1000000080020000D0D1 +:10C9B0000800CC100401008082CDF9BC000000000A +:10C9C0000000009C0F0000320E000001000000ACCF +:10C9D0000F0037320000DC1000000080020000D0A1 +:10C9E0000B00D0100401008082CDF9BC20000000B3 +:10C9F0000000009C0F0036320F000001000000AC68 +:10CA00000F0037320000DC1000000080020000D070 +:10CA10002700D4100401008082CDF9BC0000000082 +:10CA20000001008002000050000000000000009C97 +:10CA30000F0000320F000001000000AC0F00373281 +:10CA40000000DC1000000080020000D02000D9109F +:10CA50000401008082CDF9BC0000000000010080CC +:10CA60000200005000000000000000E403C0F932A2 +:10CA70000D000001000000E003003732000000005C +:10CA8000000000E003C0FA3200000000000000E0F7 +:10CA900007403E32000000000001009C1FC0F95A10 +:10CAA00000000000000000E003C0F93200000000B8 +:10CAB000000000E007403E32000000000000009C43 +:10CAC0001FC0F93AFF000000000100AC8FCDF95003 +:10CAD000000000000000009C0FC02F32000000008A +:10CAE000000000FC0200003200000000000000E036 +:10CAF00007803E3200000000000000FC12C02F3A08 +:10CB00000F00E7100401008082CD2FBC0000000060 +:10CB1000000000E007803E3200000000000100FC41 +:10CB200002C0F95200000000000000E007003A32A5 +:10CB300000000000000000E007403A320000000062 +:10CB4000000000E007803A3200000000000000E032 +:10CB500007C03A32000000000000009C0FC02F32D6 +:10CB600000000000000000FC020000320000000095 +:10CB7000000000E007003D3200000000000000E07F +:10CB800007403D320000F210830100FC12C02FBAB2 +:10CB900000000000000100FC02C0F952000000008B +:10CBA0000000009C0F0000320C0000000000000894 +:10CBB000733E003900000000000000E00700303242 +:10CBC000000000000000009C1FC0F93A7000F71040 +:10CBD0000401008082CDF9BC000000000000000CC0 +:10CBE0000300003200000000000000E007003032C7 +:10CBF00000000000000000100300003200000000F0 +:10CC0000000000E007003032000000000000009C3F +:10CC10000F00003200000000000000A00FC0293209 +:10CC2000000000000000009C02C0F932000000007B +:10CC3000000000A40FC02C32000000000000009C87 +:10CC40000200FA32180000000000002C737EFA394E +:10CC500000000000000000E007003032000000117A +:10CC60008501009C1FC0F9BA00000000000100808F +:10CC700002000050010000010000009C0F0037324C +:10CC80000000E11000000080020000D00E000F1133 +:10CC90000401008082CDFABC00000000000000E02A +:10CCA0000700003200000000000000E00700003232 +:10CCB00000000000000000E0070000320000091141 +:10CCC0000000009C3FC0F99A1C000911040100807B +:10CCD00082CDFABC0200E1100000009C8FCDF9DA91 +:10CCE000000000000001008002000050010000026E +:10CCF0000000009C0F0037320000E11000000080AF +:10CD0000020000D00E0017110401008082CDFABC91 +:10CD100000000000000000E00700003200001311D6 +:10CD20000000009C1FC0F99A260013110401008026 +:10CD300082CDFABC0000000000010080020000501B +:10CD400000000000000000A80F402932004400004D +:10CD5000000000A802003632000008110000008028 +:10CD6000020000D00000121100000080020000D07C +:10CD70000000E51000000080020000D0000000006C +:10CD8000000000E00780183200000000000000E012 +:10CD900007401A3200000000000000E007001A32CD +:10CDA00000000000000000E007801A3200000000D0 +:10CDB000000000E007C01A3200000000000000A0E0 +:10CDC0000F000032A2600300000000580300373259 +:10CDD0002B1100000000005C030036320000000050 +:10CDE0000000009C0F802A3200002B1104000080FC +:10CDF000024029B20000000000000050833E0034D1 +:10CE00000000000000000048833E003400000000E5 +:10CE100000000044530A003400002C110000008878 +:10CE20000F402B9200000000000000900F002832FD +:10CE300000000000000000940F00293200000000F4 +:10CE4000000000980F802A3200000000000000A8B7 +:10CE500002C0F93231115811000000B00F003692B3 +:10CE60000700341104000080824D29BC000000003E +:10CE7000000000A01F00FA3A000028110000009CEA +:10CE80000F802A92C0010000000000AC0F00363273 +:10CE9000010000000000009C020036320000441136 +:10CEA00000000080020000D01F003A110400008042 +:10CEB00082CD29BCC0000000000000AC8FCDFA3A42 +:10CEC000000036110000009C12C0299A0000F610E4 +:10CED00000000080020000D00000EC100000008084 +:10CEE000020000D00000421104000080528AFABC07 +:10CEF000A260030000000058030037324211000016 +:10CF00000000005C0300363200000000000000500A +:10CF1000A33E00340000000000000048A33E00349F +:10CF20000000000000000044530A003400440000E8 +:10CF3000000000A40F0036320000B3100000008093 +:10CF40000200009000000000000000C402C0FA329D +:10CF5000030000000000009C0F00363200000000BB +:10CF6000000000BC0F402F3200004B110400009C59 +:10CF70001FC0F9BC00004A110400008002402FB21B +:10CF800000004711000000E007002C92000047114C +:10CF9000000000E00700369200000000000000E002 +:10CFA00007402C3200000000000000E007802C3217 +:10CFB00000000000000000E007C02C32000000006C +:10CFC000000000E007002D3200000000000000E03B +:10CFD00007402D3200000000000000E007802D32E5 +:10CFE00000000000000000E007C02D32000000003B +:10CFF000000000E007C0FB3200000000000000E07D +:10D0000007802F3200000000000000E007C02F3230 +:10D0100018000000000000F8730A02390000000048 +:10D02000000100E007803F52FF00000000000044C4 +:10D030000300363200000000000000E00700F93273 +:10D0400000000000000000E007402832000000005F +:10D05000000000E00780F832030000000000009CA0 +:10D060000F00363200000000000000BC0FC02B3261 +:10D07000000061110400009C1FC0F9BC0000601199 +:10D080000400008002C02BB200005D11000000E02F +:10D0900007C0289200005D11000000E007003692F2 +:10D0A00000000000000000E00740F932000000002E +:10D0B000000000E00740293200000000000000E00E +:10D0C0000780293200000000000000E007C029327C +:10D0D00000000000000000E007002A32000000000D +:10D0E000000000E007402A3200000000000000E0DD +:10D0F0000780F93200000000000000E007C02A327B +:10D1000000000000000000E007C02F320000000017 +:10D11000000000E007402B3200000000000000E0AB +:10D1200007802B3200000000000000E007C0FB3247 +:10D1300000000000000000880200FB320000000038 +:10D140000000009C0200003200000000000000D837 +:10D1500002000032000000000010000007009732BB +:10D16000000000000019000007C0965208807211EC +:10D1700012000048028036B200000000000000806B +:10D1800002000030000074111200009C0FC021B298 +:10D190001D0077110400008072BE17B800007411E2 +:10D1A000000000F81E80EF9A130000000000009CB1 +:10D1B0007FBE1738000000000400008012C0F95C38 +:10D1C00000007411000000F81E80EF9A00000000BB +:10D1D000000000B40F40FB35000000000000009C80 +:10D1E000020000324C420000000000A8020036326B +:10D1F000000000000008000007802A3200006E11C5 +:10D2000000000080020000D00000721100000080C9 +:10D21000020000D0000000000000000CCBC1B034C0 +:10D22000000000000000009C02000032000000002E +:10D23000000000D80200003200008B11000000281E +:10D2400009C0B0D20000811104000080028092B2B7 +:10D25000000085111200009C0FC021B21D00881132 +:10D260000400008072BE17B800008511000000F8AD +:10D270001E80EF9A130000000000009C7FBE17384C +:10D28000000073100400008012C0F9BC000085117A +:10D29000000000F81E80EF9A00000000000000FC73 +:10D2A0000200003202000000000000A0F20B003972 +:10D2B00000008F11040100280934B0BA00000000FA +:10D2C000000100280900005200000000000000A832 +:10D2D00022C02F3700000000000084C037ACB032FD +:10D2E000000000000000000C0B000032FFFF0000F7 +:10D2F000000000C0AF4DB0300000951180000080EC +:10D300000240B0B600000000000000C06F01FC3514 +:10D310000000000000000000073F01320042000052 +:10D3200000080000878D2A3A00000000001000006D +:10D330000700B03200000000001800000700D032E3 +:10D3400000000000000000C03FC1383400000000B1 +:10D3500012010048F201FC5400009A110000008004 +:10D36000020000900000FFFF00000080020000901B +:0CD3700000003600000000800200009069 +:00000001FF diff --git a/trunk/firmware/yamaha/yss225_registers.bin.ihex b/trunk/firmware/yamaha/yss225_registers.bin.ihex deleted file mode 100644 index 6dd3d8c4de2b..000000000000 --- a/trunk/firmware/yamaha/yss225_registers.bin.ihex +++ /dev/null @@ -1,998 +0,0 @@ -:10000000FF000E100F00FF000E110F00FF000E1278 -:100010000F00FF000E130F00FF000E140F00FF0073 -:100020000E150F00FF000E160F00FF000E170F0039 -:10003000FF000E180F00FF000E190F00FF000E1A30 -:100040000F00FF000E1B0F00FF000E1C0F00FF0033 -:100050000E1D0F00FF000E1E0F00FF000E1F0F00F1 -:10006000FF000E200F00FF000E210F00FF000E22E8 -:100070000F00FF000E230F00FF000E240F00FF00F3 -:100080000E250F00FF000E260F00FF000E270F00A9 -:10009000FF000E280F00FF000E290F00FF000E2AA0 -:1000A0000F00FF000E2B0F00FF000E2C0F00FF00B3 -:1000B0000E2D0F00FF000E2E0F00FF000E2F0F0061 -:1000C000FF000E300F00FF000E310F00FF000E3258 -:1000D0000F00FF000E330F00FF000E340F00FF0073 -:1000E0000E350F00FF000E360F00FF000E370F0019 -:1000F000FF000E380F00FF000E390F00FF000E3A10 -:100100000F00FF000E3B0F00FF000E3C0F00FF0032 -:100110000E3D0F00FF000E3E0F00FF000E3F0F00D0 -:10012000FF000E400F00FF000E410F00FF000E42C7 -:100130000F00FF000E430F00FF000E440F00FF00F2 -:100140000E450F00FF000E460F00FF000E470F0088 -:10015000FF000E480F00FF000E490F00FF000E4A7F -:100160000F00FF000E4B0F00FF000E4C0F00FF00B2 -:100170000E4D0F00FF000E4E0F00FF000E4F0F0040 -:10018000FF000E500F00FF000E510F00FF000E5237 -:100190000F00FF000E530F00FF000E540F00FF0072 -:1001A0000E550F00FF000E560F00FF000E570F00F8 -:1001B000FF000E580F00FF000E590F00FF000E5AEF -:1001C0000F00FF000E5B0F00FF000E5C0F00FF0032 -:1001D0000E5D0F00FF000E5E0F00FF000E5F0F00B0 -:1001E000FF000E600F00FF000E610F00FF000E62A7 -:1001F0000F00FF000E630F00FF000E640F00FF00F2 -:100200000E650F00FF000E660F00FF000E670F0067 -:10021000FF000E680F00FF000E690F00FF000E6A5E -:100220000F00FF000E6B0F00FF000E6C0F00FF00B1 -:100230000E6D0F00FF000E6E0F00FF000E6F0F001F -:10024000FF000E700F00FF000E710F00FF000E7216 -:100250000F00FF000E730F00FF000E740F00FF0071 -:100260000E750F00FF000E760F00FF000E770F00D7 -:10027000FF000E780F00FF000E790F00FF000E7ACE -:100280000F00FF000E7B0F00FF000E7C0F00FF0031 -:100290000E7D0F00FF000E7E0F00FF000E7F0F008F -:1002A000FF000E800F00FF000E810F00FF000E8286 -:1002B0000F00FF000E830F00FF000E840F00FF00F1 -:1002C0000E850F00FF000E860F00FF000E870F0047 -:1002D000FF000E880F00FF000E890F00FF000E8A3E -:1002E0000F00FF000E8B0F00FF000E8C0F00FF00B1 -:1002F0000E8D0F00FF000E8E0F00FF000E8F0F00FF -:10030000FF000E900F00FF000E910F00FF000E92F5 -:100310000F00FF000E930F00FF000E940F00FF0070 -:100320000E950F00FF000E960F00FF000E970F00B6 -:10033000FF000E980F00FF000E990F00FF000E9AAD -:100340000F00FF000E9B0F00FF000E9C0F00FF0030 -:100350000E9D0F00FF000E9E0F00FF000E9F0F006E -:10036000FF000EA00F00FF000EA10F00FF000EA265 -:100370000F00FF000EA30F00FF000EA40F00FF00F0 -:100380000EA50F00FF000EA60F00FF000EA70F0026 -:10039000FF000EA80F00FF000EA90F00FF000EAA1D -:1003A0000F00FF000EAB0F00FF000EAC0F00FF00B0 -:1003B0000EAD0F00FF000EAE0F00FF000EAF0F00DE -:1003C000FF000EB00F00FF000EB10F00FF000EB2D5 -:1003D0000F00FF000EB30F00FF000EB40F00FF0070 -:1003E0000EB50F00FF000EB60F00FF000EB70F0096 -:1003F000FF000EB80F00FF000EB90F00FF000EBA8D -:100400000F00FF000EBB0F00FF000EBC0F00FF002F -:100410000EBD0F00FF000EBE0F00FF000EBF0F004D -:10042000FF000EC00F00FF000EC10F00FF000EC244 -:100430000F00FF000EC30F00FF000EC40F00FF00EF -:100440000EC50F00FF000EC60F00FF000EC70F0005 -:10045000FF000EC80F00FF000EC90F00FF000ECAFC -:100460000F00FF000ECB0F00FF000ECC0F00FF00AF -:100470000ECD0F00FF000ECE0F00FF000ECF0F00BD -:10048000FF000ED00F00FF000ED10F00FF000ED2B4 -:100490000F00FF000ED30F00FF000ED40F00FF006F -:1004A0000ED50F00FF000ED60F00FF000ED70F0075 -:1004B000FF000ED80F00FF000ED90F00FF000EDA6C -:1004C0000F00FF000EDB0F00FF000EDC0F00FF002F -:1004D0000EDD0F00FF000EDE0F00FF000EDF0F002D -:1004E000FF000EE00F00FF000EE10F00FF000EE224 -:1004F0000F00FF000EE30F00FF000EE40F00FF00EF -:100500000EE50F00FF000EE60F00FF000EE70F00E4 -:10051000FF000EE80F00FF000EE90F00FF000EEADB -:100520000F00FF000EEB0F00FF000EEC0F00FF00AE -:100530000EED0F00FF000EEE0F00FF000EEF0F009C -:10054000FF000EF00F00FF000EF10F00FF000EF293 -:100550000F00FF000EF30F00FF000EF40F00FF006E -:100560000EF50F00FF000EF60F00FF000EF70F0054 -:10057000FF000EF80F00FF000EF90F00FF000EFA4B -:100580000F00FF000EFB0F00FF000EFC0F00FF002E -:100590000EFD0F00FF000EFE0F00FF000EFF0F000C -:1005A000FF000E100F00FF000E110F00FF000E12D3 -:1005B0000F00FF000E130F00FF000E140F00FF00CE -:1005C0000E150F00FF000E160F00FF000E170F0094 -:1005D000FF000E180F00FF000E190F00FF000E1A8B -:1005E0000F00FF000E1B0F00FF000E1C0F00FF008E -:1005F0000E1D0F00FF000E1E0F00FF000E1F0F004C -:10060000FF000E200F00FF000E210F00FF000E2242 -:100610000F00FF000E230F00FF000E240F00FF004D -:100620000E250F00FF000E260F00FF000E270F0003 -:10063000FF000E280F00FF000E290F00FF000E2AFA -:100640000F00FF000E2B0F00FF000E2C0F00FF000D -:100650000E2D0F00FF000E2E0F00FF000E2F0F00BB -:10066000FF000E300F00FF000E310F00FF000E32B2 -:100670000F00FF000E330F00FF000E340F00FF00CD -:100680000E350F00FF000E360F00FF000E370F0073 -:10069000FF000E380F00FF000E390F00FF000E3A6A -:1006A0000F00FF000E3B0F00FF000E3C0F00FF008D -:1006B0000E3D0F00FF000E3E0F00FF000E3F0F002B -:1006C000FF000E400F00FF000E410F00FF000E4222 -:1006D0000F00FF000E430F00FF000E440F00FF004D -:1006E0000E450F00FF000E460F00FF000E470F00E3 -:1006F000FF000E480F00FF000E490F00FF000E4ADA -:100700000F00FF000E4B0F00FF000E4C0F00FF000C -:100710000E4D0F00FF000E4E0F00FF000E4F0F009A -:10072000FF000E500F00FF000E510F00FF000E5291 -:100730000F00FF000E530F00FF000E540F00FF00CC -:100740000E550F00FF000E560F00FF000E570F0052 -:10075000FF000E580F00FF000E590F00FF000E5A49 -:100760000F00FF000E5B0F00FF000E5C0F00FF008C -:100770000E5D0F00FF000E5E0F00FF000E5F0F000A -:10078000FF000E600F00FF000E610F00FF000E6201 -:100790000F00FF000E630F00FF000E640F00FF004C -:1007A0000E650F00FF000E660F00FF000E670F00C2 -:1007B000FF000E680F00FF000E690F00FF000E6AB9 -:1007C0000F00FF000E6B0F00FF000E6C0F00FF000C -:1007D0000E6D0F00FF000E6E0F00FF000E6F0F007A -:1007E000FF000E700F00FF000E710F00FF000E7271 -:1007F0000F00FF000E730F00FF000E740F00FF00CC -:100800000E750F00FF000E760F00FF000E770F0031 -:10081000FF000E780F00FF000E790F00FF000E7A28 -:100820000F00FF000E7B0F00FF000E7C0F00FF008B -:100830000E7D0F00FF000E7E0F00FF000E7F0F00E9 -:10084000FF000E800F00FF000E810F00FF000E82E0 -:100850000F00FF000E830F00FF000E840F00FF004B -:100860000E850F00FF000E860F00FF000E870F00A1 -:10087000FF000E880F00FF000E890F00FF000E8A98 -:100880000F00FF000E8B0F00FF000E8C0F00FF000B -:100890000E8D0F00FF000E8E0F00FF000E8F0F0059 -:1008A000FF000E900F00FF000E910F00FF000E9250 -:1008B0000F00FF000E930F00FF000E940F00FF00CB -:1008C0000E950F00FF000E960F00FF000E970F0011 -:1008D000FF000E980F00FF000E990F00FF000E9A08 -:1008E0000F00FF000E9B0F00FF000E9C0F00FF008B -:1008F0000E9D0F00FF000E9E0F00FF000E9F0F00C9 -:10090000FF000EA00F00FF000EA10F00FF000EA2BF -:100910000F00FF000EA30F00FF000EA40F00FF004A -:100920000EA50F00FF000EA60F00FF000EA70F0080 -:10093000FF000EA80F00FF000EA90F00FF000EAA77 -:100940000F00FF000EAB0F00FF000EAC0F00FF000A -:100950000EAD0F00FF000EAE0F00FF000EAF0F0038 -:10096000FF000EB00F00FF000EB10F00FF000EB22F -:100970000F00FF000EB30F00FF000EB40F00FF00CA -:100980000EB50F00FF000EB60F00FF000EB70F00F0 -:10099000FF000EB80F00FF000EB90F00FF000EBAE7 -:1009A0000F00FF000EBB0F00FF000EBC0F00FF008A -:1009B0000EBD0F00FF000EBE0F00FF000EBF0F00A8 -:1009C000FF000EC00F00FF000EC10F00FF000EC29F -:1009D0000F00FF000EC30F00FF000EC40F00FF004A -:1009E0000EC50F00FF000EC60F00FF000EC70F0060 -:1009F000FF000EC80F00FF000EC90F00FF000ECA57 -:100A00000F00FF000ECB0F00FF000ECC0F00FF0009 -:100A10000ECD0F00FF000ECE0F00FF000ECF0F0017 -:100A2000FF000ED00F00FF000ED10F00FF000ED20E -:100A30000F00FF000ED30F00FF000ED40F00FF00C9 -:100A40000ED50F00FF000ED60F00FF000ED70F00CF -:100A5000FF000ED80F00FF000ED90F00FF000EDAC6 -:100A60000F00FF000EDB0F00FF000EDC0F00FF0089 -:100A70000EDD0F00FF000EDE0F00FF000EDF0F0087 -:100A8000FF000EE00F00FF000EE10F00FF000EE27E -:100A90000F00FF000EE30F00FF000EE40F00FF0049 -:100AA0000EE50F00FF000EE60F00FF000EE70F003F -:100AB000FF000EE80F00FF000EE90F00FF000EEA36 -:100AC0000F00FF000EEB0F00FF000EEC0F00FF0009 -:100AD0000EED0F00FF000EEE0F00FF000EEF0F00F7 -:100AE000FF000EF00F00FF000EF10F00FF000EF2EE -:100AF0000F00FF000EF30F00FF000EF40F00FF00C9 -:100B00000EF50F00FF000EF60F00FF000EF70F00AE -:100B1000FF000EF80F00FF000EF90F00FF000EFAA5 -:100B20000F00FF000EFB0F00FF000EFC0F00FF0088 -:100B30000EFD0F00FF000EFE0F00FF000EFF0F0066 -:100B4000FF000802FF000B070A440D000C00FF0025 -:100B50000B070A420D000C00FF000B070A430D00B3 -:100B60000C00FF000B070A7C0D000C00FF000B07B8 -:100B70000A7E0D000C00FF000B070A460D000C005A -:100B8000FF000B070A490D000C00FF000B070A4786 -:100B90000D000C00FF000B070A4A0D000C00FF00BF -:100BA0000E100F00FF000E110F00FF000E120F00BD -:100BB000FF000E130F00FF000E140F00FF000E15B4 -:100BC0000F00FF000E160F00FF000E170F00FF00B2 -:100BD0000E180F00FF000E190F00FF000E1A0F0075 -:100BE000FF000E1B0F00FF000E1C0F00FF000E1D6C -:100BF0000F00FF000E1E0F00FF000E1F0F00FF0072 -:100C00000E200F00FF000E210F00FF000E220F002C -:100C1000FF000E230F00FF000E240F00FF000E2523 -:100C20000F00FF000E260F00FF000E270F00FF0031 -:100C30000E280F00FF000E290F00FF000E2A0F00E4 -:100C4000FF000E2B0F00FF000E2C0F00FF000E2DDB -:100C50000F00FF000E2E0F00FF000E2F0F00FF00F1 -:100C60000E300F00FF000E310F00FF000E320F009C -:100C7000FF000E330F00FF000E340F00FF000E3593 -:100C80000F00FF000E360F00FF000E370F00FF00B1 -:100C90000E380F00FF000E390F00FF000E3A0F0054 -:100CA000FF000E3B0F00FF000E3C0F00FF000E3D4B -:100CB0000F00FF000E3E0F00FF000E3F0F00FF0071 -:100CC0000E400F00FF000E410F00FF000E420F000C -:100CD000FF000E430F00FF000E440F00FF000E4503 -:100CE0000F00FF000E460F00FF000E470F00FF0031 -:100CF0000E480F00FF000E490F00FF000E4A0F00C4 -:100D0000FF000E4B0F00FF000E4C0F00FF000E4DBA -:100D10000F00FF000E4E0F00FF000E4F0F00FF00F0 -:100D20000E500F00FF000E510F00FF000E520F007B -:100D3000FF000E530F00FF000E540F00FF000E5572 -:100D40000F00FF000E560F00FF000E570F00FF00B0 -:100D50000E580F00FF000E590F00FF000E5A0F0033 -:100D6000FF000E5B0F00FF000E5C0F00FF000E5D2A -:100D70000F00FF000E5E0F00FF000E5F0F00FF0070 -:100D80000E600F00FF000E610F00FF000E620F00EB -:100D9000FF000E630F00FF000E640F00FF000E65E2 -:100DA0000F00FF000E660F00FF000E670F00FF0030 -:100DB0000E680F00FF000E690F00FF000E6A0F00A3 -:100DC000FF000E6B0F00FF000E6C0F00FF000E6D9A -:100DD0000F00FF000E6E0F00FF000E6F0F00FF00F0 -:100DE0000E700F00FF000E710F00FF000E720F005B -:100DF000FF000E730F00FF000E740F00FF000E7552 -:100E00000F00FF000E760F00FF000E770F00FF00AF -:100E10000E780F00FF000E790F00FF000E7A0F0012 -:100E2000FF000E7B0F00FF000E7C0F00FF000E7D09 -:100E30000F00FF000E7E0F00FF000E7F0F00FF006F -:100E40000E800F00FF000E810F00FF000E820F00CA -:100E5000FF000E830F00FF000E840F00FF000E85C1 -:100E60000F00FF000E860F00FF000E870F00FF002F -:100E70000E880F00FF000E890F00FF000E8A0F0082 -:100E8000FF000E8B0F00FF000E8C0F00FF000E8D79 -:100E90000F00FF000E8E0F00FF000E8F0F00FF00EF -:100EA0000E900F00FF000E910F00FF000E920F003A -:100EB000FF000E930F00FF000E940F00FF000E9531 -:100EC0000F00FF000E960F00FF000E970F00FF00AF -:100ED0000E980F00FF000E990F00FF000E9A0F00F2 -:100EE000FF000E9B0F00FF000E9C0F00FF000E9DE9 -:100EF0000F00FF000E9E0F00FF000E9F0F00FF006F -:100F00000EA00F00FF000EA10F00FF000EA20F00A9 -:100F1000FF000EA30F00FF000EA40F00FF000EA5A0 -:100F20000F00FF000EA60F00FF000EA70F00FF002E -:100F30000EA80F00FF000EA90F00FF000EAA0F0061 -:100F4000FF000EAB0F00FF000EAC0F00FF000EAD58 -:100F50000F00FF000EAE0F00FF000EAF0F00FF00EE -:100F60000EB00F00FF000EB10F00FF000EB20F0019 -:100F7000FF000EB30F00FF000EB40F00FF000EB510 -:100F80000F00FF000EB60F00FF000EB70F00FF00AE -:100F90000EB80F00FF000EB90F00FF000EBA0F00D1 -:100FA000FF000EBB0F00FF000EBC0F00FF000EBDC8 -:100FB0000F00FF000EBE0F00FF000EBF0F00FF006E -:100FC0000EC00F00FF000EC10F00FF000EC20F0089 -:100FD000FF000EC30F00FF000EC40F00FF000EC580 -:100FE0000F00FF000EC60F00FF000EC70F00FF002E -:100FF0000EC80F00FF000EC90F00FF000ECA0F0041 -:10100000FF000ECB0F00FF000ECC0F00FF000ECD37 -:101010000F00FF000ECE0F00FF000ECF0F00FF00ED -:101020000ED00F00FF000ED10F00FF000ED20F00F8 -:10103000FF000ED30F00FF000ED40F00FF000ED5EF -:101040000F00FF000ED60F00FF000ED70F00FF00AD -:101050000ED80F00FF000ED90F00FF000EDA0F00B0 -:10106000FF000EDB0F00FF000EDC0F00FF000EDDA7 -:101070000F00FF000EDE0F00FF000EDF0F00FF006D -:101080000EE00F00FF000EE10F00FF000EE20F0068 -:10109000FF000EE30F00FF000EE40F00FF000EE55F -:1010A0000F00FF000EE60F00FF000EE70F00FF002D -:1010B0000EE80F00FF000EE90F00FF000EEA0F0020 -:1010C000FF000EEB0F00FF000EEC0F00FF000EED17 -:1010D0000F00FF000EEE0F00FF000EEF0F00FF00ED -:1010E0000EF00F00FF000EF10F00FF000EF20F00D8 -:1010F000FF000EF30F00FF000EF40F00FF000EF5CF -:101100000F00FF000EF60F00FF000EF70F00FF00AC -:101110000EF80F00FF000EF90F00FF000EFA0F008F -:10112000FF000EFB0F00FF000EFC0F00FF000EFD86 -:101130000F00FF000EFE0F00FF000EFF0F0009055D -:101140000B000A000D010C7CFF000D000C1EFF00BF -:101150000D000C00FF000D000C00FF000D000CF551 -:10116000FF000D000C11FF000D000C20FF000D0012 -:101170000C32FF000D000C40FF000D000C13FF00AF -:101180000D000C00FF000D000C14FF000D020C768A -:10119000FF000D000C60FF000D000C80FF000D0231 -:1011A0000C00FF000D000C00FF000D000C00FF0004 -:1011B0000D020C00FF000D000C00FF000D000C00E4 -:1011C000FF000D000C00FF000D000C00FF000D00E3 -:1011D0000C00FF000D000C00FF000D000C00FF00D4 -:1011E0000D000C00FF000D000C00FF000D000C00B6 -:1011F000FF000D000C00FF000D000C00FF000D00B3 -:101200000C00FF000D000C00FF000D000C00FF00A3 -:101210000D000C00FF000D000C00FF000D000C0085 -:10122000FF000D000C00FF000D000C00FF000D0082 -:101230000C00FF000D000C00FF000D000C00FF0073 -:101240000D000C00FF000D000C00FF000D000C0055 -:10125000FF000D000C00FF000D000C00FF000D0052 -:101260000C00FF000D000C00FF000D000C00FF0043 -:101270000D000C00FF000D000C00FF000D000C0025 -:10128000FF000D000C00FF000D000C00FF000D0022 -:101290000C00FF000D000C00FF000D000C00FF0013 -:1012A0000D000C00FF000D000C00FF000D000C00F5 -:1012B000FF000D000C00FF000D000C00FF000D00F2 -:1012C0000C00FF000D000C18FF000D000C19FF00B2 -:1012D0000D010C1AFF000D010C20FF000D010C4048 -:1012E000FF000D010C17FF000D000C00FF000D01A9 -:1012F0000C80FF000D010C20FF000D000C10FF0002 -:101300000D010CA0FF000D030CD1FF000D000C001F -:10131000FF000D010CF2FF000D020C00FF000D009C -:101320000C13FF000D000C00FF000D000CF4FF007B -:101330000D020CE0FF000D000C15FF000D000C006D -:10134000FF000D000C16FF000D000C00FF000D004B -:101350000C17FF000D000C20FF000D000C00FF001B -:101360000D000C20FF000D000C50FF000D000C00C4 -:10137000FF000D000C40FF000D000C00FF000D00F1 -:101380000C71FF000D020C00FF000D000C60FF004F -:101390000D000C00FF000D000C92FF000D000C0072 -:1013A000FF000D000C80FF000D000C00FF000D0081 -:1013B0000CB3FF000D020C00FF000D000CA0FF009D -:1013C0000D000C00FF000D000CD4FF000D000C0000 -:1013D000FF000D000C40FF000D000C80FF000D0011 -:1013E0000CF5FF000D000C20FF000D000C70FF003D -:1013F0000D000CA0FF000D020C11FF000D000C16DB -:10140000FF000D000C00FF000D000C00FF000D00A0 -:101410000C00FF000D000C20FF000D020C00FF006F -:101420000D000C20FF000D000C10FF000D000C172C -:10143000FF000D000C1BFF000D000C1DFF000D0236 -:101440000CDFFF0009050B010A000D000C00FF0076 -:101450000D000C00FF000D000C00FF000D020C0041 -:10146000FF000D000C19FF000D000C1FFF000D0008 -:101470000C00FF000D000C00FF000D000C00FF0031 -:101480000D030CD8FF000D000C00FF000D020C2016 -:10149000FF000D000C19FF000D000C00FF000D00F7 -:1014A0000C00FF000D000C18FF000D010CC0FF0028 -:1014B0000D010CFAFF000D000C1AFF000D000C00CE -:1014C000FF000D000C00FF000D000C00FF000D00E0 -:1014D0000C00FF000D000C00FF000D000C00FF00D1 -:1014E0000D000C00FF000D000C00FF000D000C00B3 -:1014F000FF000D000C00FF000D000C00FF000D00B0 -:101500000C00FF000D000C00FF000D000C00FF00A0 -:101510000D000C00FF000D000C00FF000D000C0082 -:10152000FF000D000C00FF000D000C00FF000D007F -:101530000C00FF000D000C00FF000D000C00FF0070 -:101540000D000C00FF000D000C00FF000D000C0052 -:10155000FF000D000C00FF000D000C00FF000D004F -:101560000C00FF000D000C00FF000D000C00FF0040 -:101570000D000C00FF000D000C00FF000D000C0022 -:10158000FF000D000C00FF000D000C00FF000D001F -:101590000C00FF000D000C00FF000D000C00FF0010 -:1015A0000D000C00FF000D000C00FF000D000C00F2 -:1015B000FF000D000C00FF000D000C00FF000D00EF -:1015C0000C00FF000D000C00FF000D020C40FF009E -:1015D0000D020C60FF000D000C00FF000D000C0060 -:1015E000FF000D000C00FF000D020CC0FF000D02FB -:1015F0000C80FF000D000C00FF000D020CFBFF0033 -:101600000D020CA0FF000D000C00FF000D000C1BD4 -:10161000FF000D020CD7FF000D000C00FF000D02B3 -:101620000CF7FF000D030C20FF000D030C00FF0062 -:101630000D000C00FF000D000C1CFF000D030C3C06 -:10164000FF000D000C00FF000D030C3FFF000D001C -:101650000C00FF000D030CC0FF000D000C00FF008C -:101660000D030CDFFF000D000C00FF000D000C004F -:10167000FF000D030C5DFF000D000C00FF000D03CB -:101680000CC0FF000D000C00FF000D030C7DFF00DF -:101690000D000C00FF000D030CC0FF000D000C003E -:1016A000FF000D030C9EFF000D000C00FF000D035A -:1016B0000CC0FF000D000C00FF000D030CBEFF006E -:1016C0000D000C00FF000D030CC0FF000D000C000E -:1016D000FF000D000C00FF000D000C00FF000D00CE -:1016E0000C00FF000D000C1BFF000D000C00FF00A4 -:1016F0000D000C00FF000D000C00FF000D020CDBC4 -:10170000FF000D000C00FF000D020CDBFF000D00C0 -:101710000C00FF000D020CE0FF000D000C00FF00AC -:101720000D020CFBFF000D000C00FF000D020CC0B1 -:10173000FF000D020C40FF000D020CFBFF000D022C -:101740000C60FF000D000C1BFF0009050B020A00D6 -:101750000CC4FF000C00FF000C44FF000C07FF004E -:101760000C44FF000C00FF000C40FF000C25FF00A4 -:101770000C01FF000C06FF000CC4FF000C07FF006B -:101780000C40FF000C25FF000C01FF000C00FF00C7 -:101790000C46FF000C46FF000C00FF000C00FF0091 -:1017A0000C00FF000C00FF000C00FF000C00FF000D -:1017B0000C00FF000C00FF000C00FF000C00FF00FD -:1017C0000C00FF000C00FF000C00FF000C00FF00ED -:1017D0000C00FF000C00FF000C00FF000C00FF00DD -:1017E0000C00FF000C00FF000C00FF000C00FF00CD -:1017F0000C00FF000C00FF000C00FF000C00FF00BD -:101800000C00FF000C00FF000C00FF000C00FF00AC -:101810000C00FF000C00FF000C00FF000C00FF009C -:101820000C00FF000C00FF000C00FF000C00FF008C -:101830000C00FF000C00FF000C00FF000C00FF007C -:101840000C00FF000C00FF000C00FF000C00FF006C -:101850000C46FF000C07FF000C05FF000C05FF0005 -:101860000C05FF000C04FF000C07FF000C05FF0037 -:101870000C04FF000C07FF000C05FF000C44FF00E8 -:101880000C46FF000C44FF000C46FF000C46FF0016 -:101890000C07FF000C05FF000C44FF000C46FF0086 -:1018A0000C05FF000C46FF000C05FF000C46FF0076 -:1018B0000C05FF000C46FF000C05FF000C44FF0068 -:1018C0000C46FF000C05FF000C07FF000C44FF0056 -:1018D0000C46FF000C05FF000C07FF000C44FF0046 -:1018E0000C46FF000C05FF000C07FF000C44FF0036 -:1018F0000C46FF000C05FF000C07FF000C44FF0026 -:101900000C05FF000C05FF000C05FF000C44FF0058 -:101910000C05FF000C05FF000C05FF000C46FF0046 -:101920000C05FF000C46FF000C05FF000C46FF00F5 -:101930000C05FF000C46FF000C05FF000C46FF00E5 -:101940000C07FF000C46FF000C07FF000C44FF00D3 -:1019500009050B030A000C07FF000C40FF000C00F8 -:10196000FF000C00FF000C00FF000C47FF000C0004 -:10197000FF000C40FF000C00FF000C40FF000C06B5 -:10198000FF000C40FF000C00FF000C00FF000C00EB -:10199000FF000C00FF000C00FF000C00FF000C001B -:1019A000FF000C00FF000C00FF000C00FF000C000B -:1019B000FF000C00FF000C00FF000C00FF000C00FB -:1019C000FF000C00FF000C00FF000C00FF000C00EB -:1019D000FF000C00FF000C00FF000C00FF000C00DB -:1019E000FF000C00FF000C00FF000C00FF000C00CB -:1019F000FF000C00FF000C00FF000C00FF000C00BB -:101A0000FF000C00FF000C00FF000C00FF000C00AA -:101A1000FF000C00FF000C00FF000C00FF000C009A -:101A2000FF000C00FF000C00FF000C00FF000C008A -:101A3000FF000C00FF000C00FF000C00FF000C007A -:101A4000FF000C00FF000C00FF000C00FF000C006A -:101A5000FF000C00FF000C80FF000C80FF000CC09A -:101A6000FF000C00FF000C00FF000C40FF000C000A -:101A7000FF000C00FF000C00FF000C40FF000C00FA -:101A8000FF000C40FF000C00FF000C60FF000C008A -:101A9000FF000C70FF000C00FF000C40FF000C006A -:101AA000FF000C40FF000C00FF000C42FF000C0088 -:101AB000FF000C40FF000C00FF000C02FF000C00B8 -:101AC000FF000C40FF000C00FF000C00FF000C00AA -:101AD000FF000C40FF000C00FF000C00FF000C009A -:101AE000FF000C40FF000C00FF000C00FF000C008A -:101AF000FF000C40FF000C00FF000C00FF000C007A -:101B0000FF000C40FF000C00FF000C00FF000C0069 -:101B1000FF000C42FF000C00FF000C40FF000C0017 -:101B2000FF000C42FF000C00FF000C02FF000C0045 -:101B3000FF000C02FF000C00FF000C02FF000C0075 -:101B4000FF000C42FF000C00FF000CC0FF000C0067 -:101B5000FF000C40FF0009050B040A000C63FF00A6 -:101B60000C03FF000C26FF000C02FF000C2CFF00F2 -:101B70000C00FF000C24FF000C00FF000C2EFF00E7 -:101B80000C02FF000C02FF000C02FF000C00FF0023 -:101B90000C00FF000C00FF000C00FF000C00FF0019 -:101BA0000C00FF000C00FF000C00FF000C00FF0009 -:101BB0000C00FF000C00FF000C00FF000C00FF00F9 -:101BC0000C00FF000C00FF000C00FF000C00FF00E9 -:101BD0000C00FF000C00FF000C00FF000C00FF00D9 -:101BE0000C00FF000C00FF000C00FF000C00FF00C9 -:101BF0000C00FF000C00FF000C00FF000C00FF00B9 -:101C00000C00FF000C00FF000C00FF000C00FF00A8 -:101C10000C00FF000C00FF000C00FF000C00FF0098 -:101C20000C00FF000C00FF000C00FF000C00FF0088 -:101C30000C00FF000C00FF000C00FF000C00FF0078 -:101C40000C00FF000C00FF000C00FF000C00FF0068 -:101C50000C00FF000C00FF000C00FF000C00FF0058 -:101C60000C01FF000C20FF000C00FF000C60FF00C7 -:101C70000C00FF000C20FF000C00FF000C20FF00F8 -:101C80000C00FF000C20FF000C00FF000C20FF00E8 -:101C90000C00FF000C20FF000C00FF000C20FF00D8 -:101CA0000C00FF000C20FF000C00FF000C20FF00C8 -:101CB0000C00FF000C60FF000C00FF000C20FF0078 -:101CC0000C00FF000C60FF000C00FF000C20FF0068 -:101CD0000C00FF000C60FF000C00FF000C20FF0058 -:101CE0000C00FF000C60FF000C00FF000C20FF0048 -:101CF0000C00FF000C60FF000C00FF000C20FF0038 -:101D00000C00FF000C60FF000C00FF000C20FF0027 -:101D10000C00FF000C20FF000C00FF000C22FF0055 -:101D20000C02FF000C22FF000C02FF000C20FF0041 -:101D30000C00FF000C60FF000C00FF000C22FF00F5 -:101D40000C02FF000C62FF000C02FF000C20FF00E1 -:101D50000C01FF000C21FF000C01FF0009010B0624 -:101D60000A000D000C00FF000A020D000C00FF002D -:101D70000A040D000C00FF000A060D000C00FF0015 -:101D80000A080D000C00FF000A0A0D000C00FF00FD -:101D90000A0C0D000C00FF000A0E0D000C00FF00E5 -:101DA0000A100D000C00FF000A120D000C00FF00CD -:101DB0000A140D000C00FF000A160D000C00FF00B5 -:101DC0000A180D000C00FF000A1A0D000C00FF009D -:101DD0000A1C0D000C00FF000A1E0D000C00FF0085 -:101DE0000A200D000C00FF000A220D000C00FF006D -:101DF0000A240D000C00FF000A260D000C00FF0055 -:101E00000A280D000C00FF000A2A0D000C00FF003C -:101E10000A2C0D000C00FF000A2E0D000C00FF0024 -:101E20000A300D000C00FF000A320D000C00FF000C -:101E30000A340D000C00FF000A360D000C00FF00F4 -:101E40000A380D000C00FF000A3A0D000C00FF00DC -:101E50000A3C0D000C00FF000A3E0D000C00FF00C4 -:101E60000A400D000C00FF000A420D030C00FF00A9 -:101E70000A440D010C00FF000A460D0A0C21FF0068 -:101E80000A480D0D0C23FF000A4A0D230C1BFF000E -:101E90000A4C0D370C8FFF000A4E0D450C77FF00E2 -:101EA0000A500D520CE2FF000A520D1C0C92FF006A -:101EB0000A540D1C0C52FF000A560D070C00FF00BF -:101EC0000A580D2F0CC6FF000A5A0D0B0C00FF001C -:101ED0000A5C0D300C06FF000A5E0D170C00FF00B7 -:101EE0000A600D3D0CDAFF000A620D290C00FF00AC -:101EF0000A640D3E0C41FF000A660D390C00FF001C -:101F00000A680D4C0C48FF000A6A0D490C00FF00DE -:101F10000A6C0D4C0C6CFF000A6E0D110CD2FF0008 -:101F20000A700D160C0CFF000A720D000C00FF0069 -:101F30000A740D000C80FF000A760D0F0C00FF00E4 -:101F40000A780D000C80FF000A7A0D130C00FF00C8 -:101F50000A7C0D800C00FF000A7E0D800C80FF00C3 -:101F600009050B070A000D0F0CFFFF000D000C0008 -:101F7000FF000D080C00FF000D080C00FF000D0213 -:101F80000C00FF000D000C00FF000D000C00FF0016 -:101F90000D0F0CFFFF000D000C00FF000D000C00EA -:101FA000FF000D080C00FF000D080C00FF000D00E5 -:101FB0000C00FF000D0F0CFFFF000D000C00FF00D8 -:101FC0000D000C00FF000D0F0CFFFF000D0F0CFFAC -:101FD000FF000D000C00FF000D000C00FF000D00C5 -:101FE0000C00FF000D000C00FF000D000C00FF00B6 -:101FF0000D000C00FF000D000C00FF000D000C0098 -:10200000FF000D000C00FF000D000C00FF000D0094 -:102010000C00FF000D000C00FF000D000C00FF0085 -:102020000D000C00FF000D000C00FF000D000C0067 -:10203000FF000D000C00FF000D000C00FF000D0064 -:102040000C00FF000D000C00FF000D000C00FF0055 -:102050000D000C00FF000D000C00FF000D000C0037 -:10206000FF000D000C00FF000D000C00FF000D0034 -:102070000C00FF000D000C00FF000D000C00FF0025 -:102080000D000C00FF000D000C00FF000D000C0007 -:10209000FF000D000C00FF000D000C00FF000D0004 -:1020A0000C00FF000D000C00FF000D000C00FF00F5 -:1020B0000D000C00FF000D000C00FF000D000C00D7 -:1020C000FF000D000C00FF000D000C00FF000D00D4 -:1020D0000C00FF000D000C00FF000D000C00FF00C5 -:1020E0000D000C00FF000D000C00FF000D000C00A7 -:1020F000FF000D000C00FF000D000C00FF000D00A4 -:102100000C00FF000D000C00FF000D000C00FF0094 -:102110000D000C00FF000D000C00FF000D000C0076 -:10212000FF000D000C00FF000D0F0CFFFF000D0F56 -:102130000CFFFF000D0F0CFFFF000D0F0CFFFF0049 -:102140000D020CE9FF000D060C8CFF000D060C8C37 -:10215000FF000D0F0CFFFF000D1A0C75FF000D0D99 -:102160000C8BFF000D040CE9FF000D0B0C16FF009B -:102170000D1A0C38FF000D0D0CC8FF000D040C6F7C -:10218000FF000D0B0C91FF000D0F0CFFFF000D0663 -:102190000C40FF000D060C40FF000D020C8FFF00ED -:1021A0000D0F0CFFFF000D060C62FF000D060C6208 -:1021B000FF000D020C7BFF000D0F0CFFFF000D0652 -:1021C0000C97FF000D060C97FF000D020C52FF004C -:1021D0000D0F0CFFFF000D060CF6FF000D060CF6B0 -:1021E000FF000D020C19FF000D050C55FF000D0539 -:1021F0000C55FF000D050C55FF000D050C55FF009B -:102200000D050C55FF000D050C55FF000D050C5577 -:10221000FF000D050C55FF000D140CDAFF000D0D2D -:102220000C93FF000D040CDAFF000D050C93FF006A -:102230000D140CDAFF000D0D0C93FF000D040CDAE9 -:10224000FF000D050C93FF000D000C00FF000D00BA -:102250000C00FF000D000C00FF000D000C00FF0043 -:102260000D020C00FF000E010F00FF000E020F0018 -:10227000FF000E010F01FF000E020F00FF000E0114 -:102280000F02FF000E020F00FF000E010F03FF0000 -:102290000E020F00FF000E010F04FF000E020F00E0 -:1022A000FF000E010F05FF000E020F00FF000E01E0 -:1022B0000F06FF000E020F00FF000E010F07FF00C8 -:1022C0000E020F00FF000E010F08FF000E020F00AC -:1022D000FF000E010F09FF000E020F00FF000E01AC -:1022E0000F0AFF000E020F00FF000E010F0BFF0090 -:1022F0000E020F00FF000E010F0CFF000E020F0078 -:10230000FF000E010F0DFF000E020F00FF000E0177 -:102310000F0EFF000E020F00FF000E010F0FFF0057 -:102320000E020F00FF000EB00F20FF000EB10F20B5 -:10233000FF000EB20F20FF000EB30F20FF000EB4FF -:102340000F20FF000EB50F20FF000EB60F20FF007C -:102350000EB70F20FF000EB80F20FF000EB90F20A0 -:10236000FF000EBA0F20FF000EBB0F20FF000EBCB7 -:102370000F20FF000EBD0F20FF000EBE0F20FF003C -:102380000EBF0F20FF000EF00F20FF000EF10F20F8 -:10239000FF000EF20F20FF000EF30F20FF000EF4DF -:1023A0000F20FF000EF50F20FF000EF60F20FF009C -:1023B0000EF70F20FF000EF80F20FF000EF90F2080 -:1023C000FF000EFA0F20FF000EFB0F20FF000EFC97 -:1023D0000F20FF000EFD0F20FF000EFE0F20FF005C -:1023E0000EFF0F20FF000E100FFFFF000E110FFF5A -:1023F000FF000E120FFFFF000E130FFFFF000E1461 -:102400000FFFFF000E150FFFFF000E160FFFFF005E -:102410000E170FFFFF000E180FFFFF000E190FFF22 -:10242000FF000E1A0FFFFF000E1B0FFFFF000E1C18 -:102430000FFFFF000E1D0FFFFF000E1E0F40FF00DD -:102440000E1F0FFFFF000E200FFFFF000E210FFFDA -:10245000FF000E220FFFFF000E230FFFFF000E24D0 -:102460000FFFFF000E250FFFFF000E260FFFFF00DE -:102470000E270FFFFF000E280FFFFF000E290FFF92 -:10248000FF000E2A0FFFFF000E2B0FFFFF000E2C88 -:102490000FFFFF000E2D0FFFFF000E2E0F00FF009D -:1024A0000E2F0F00FF000E300F00FF000E310F0047 -:1024B000FF000E320F00FF000E330F00FF000E343E -:1024C0000F00FF000E350F00FF000E360F00FF005B -:1024D0000E370F00FF000E380F00FF000E390F00FF -:1024E000FF000E3A0F00FF000E3B0F00FF000E3CF6 -:1024F0000F00FF000E3D0F00FF000E3E0F00FF001B -:102500000E3F0F20FF000E400F00FF000E410F0096 -:10251000FF000E420F00FF000E430F00FF000E44AD -:102520000F00FF000E450F00FF000E460F00FF00DA -:102530000E470F00FF000E480F00FF000E490F006E -:10254000FF000E4A0F00FF000E4B0F00FF000E4C65 -:102550000F00FF000E4D0F00FF000E4E0F0EFF008C -:102560000E4F0F0EFF000E500F00FF000E510F0018 -:10257000FF000E520F00FF000E530F00FF000E541D -:102580000F00FF000E550F00FF000E560F00FF005A -:102590000E570F00FF000E580F00FF000E590F00DE -:1025A000FF000E5A0F00FF000E5B0F00FF000E5CD5 -:1025B0000F00FF000E5D0F00FF000E5E0F00FF001A -:1025C0000E5F0F00FF000E600F00FF000E610F0096 -:1025D000FF000E620F00FF000E630F00FF000E648D -:1025E0000F00FF000E650F00FF000E660F00FF00DA -:1025F0000E670F00FF000E680F00FF000E690F004E -:10260000FF000E6A0F00FF000E6B0F00FF000E6C44 -:102610000F40FF000E6D0F00FF000E6E0F40FF0019 -:102620000E6F0F40FF000E700FC0FF000E710FC045 -:10263000FF000E720FC0FF000E730FC0FF000E747C -:102640000FC0FF000E750FC0FF000E760FC0FF0019 -:102650000E770FC0FF000E780FC0FF000E790FC07D -:10266000FF000E7A0FC0FF000E7B0FC0FF000E7C34 -:102670000FC0FF000E7D0FC0FF000E7E0FC0FF00D9 -:102680000E7F0FC0FF000E800F00FF000E810F00B5 -:10269000FF000E820F00FF000E830F00FF000E846C -:1026A0000F00FF000E850F00FF000E860F00FF00D9 -:1026B0000E870F00FF000E880F00FF000E890F002D -:1026C000FF000E8A0F00FF000E8B0F00FF000E8C24 -:1026D0000F00FF000E8D0F00FF000E8E0F00FF0099 -:1026E0000E8F0F00FF000E900F00FF000E910F00E5 -:1026F000FF000E920F00FF000E930F00FF000E94DC -:102700000F00FF000E950F00FF000E960F00FF0058 -:102710000E970F00FF000E980F00FF000E990F009C -:10272000FF000E9A0F00FF000E9B0F00FF000E9C93 -:102730000F00FF000E9D0F00FF000E9E0F00FF0018 -:102740000E9F0F00FF000EA00F00FF000EA10F0054 -:10275000FF000EA20F00FF000EA30F00FF000EA44B -:102760000F00FF000EA50F00FF000EA60F00FF00D8 -:102770000EA70F00FF000EA80F00FF000EA90F000C -:10278000FF000EAA0F00FF000EAB0F00FF000EAC03 -:102790000F00FF000EAD0F00FF000EAE0F00FF0098 -:1027A0000EAF0F00FF000EC00F00FF000EC10F00A4 -:1027B000FF000EC20F00FF000EC30F00FF000EC48B -:1027C0000F00FF000EC50F00FF000EC60F00FF0038 -:1027D0000EC70F00FF000EC80F00FF000EC90F004C -:1027E000FF000ECA0F00FF000ECB0F00FF000ECC43 -:1027F0000F00FF000ECD0F00FF000ECE0F00FF00F8 -:102800000ECF0F00FF000ED00F00FF000ED10F0003 -:10281000FF000ED20F00FF000ED30F00FF000ED4FA -:102820000F00FF000ED50F00FF000ED60F00FF00B7 -:102830000ED70F00FF000ED80F00FF000ED90F00BB -:10284000FF000EDA0F00FF000EDB0F00FF000EDCB2 -:102850000F00FF000EDD0F00FF000EDE0F10FF0067 -:102860000EDF0F10FF000EE00F00FF000EE10F0063 -:10287000FF000EE20F00FF000EE30F00FF000EE46A -:102880000F00FF000EE50F00FF000EE60F00FF0037 -:102890000EE70F00FF000EE80F00FF000EE90F002B -:1028A000FF000EEA0F00FF000EEB0F00FF000EEC22 -:1028B0000F00FF000EED0F00FF000EEE0F00FF00F7 -:1028C0000EEF0F00FF000E010F000E020F01FF00C0 -:1028D0000E010F010E020F01FF000E010F020E028A -:1028E0000F01FF000E010F030E020F01FF000E018A -:1028F0000F040E020F01FF000E010F050E020F0163 -:10290000FF000E010F060E020F01FF000E010F0760 -:102910000E020F01FF000E010F080E020F01FF0053 -:102920000E010F090E020F01FF000E010F0A0E0229 -:102930000F01FF000E010F0B0E020F01FF000E0131 -:102940000F0C0E020F01FF000E010F0D0E020F0102 -:10295000FF000E010F0E0E020F01FF000E010F0F00 -:102960000E020F01FF0008020B070A460D000C00C3 -:10297000FF000B070A490D000C00FF000B000A4B7B -:102980000D030C11FF000B000A4D0D010C32FF006E -:102990000B070A460D000C00FF000B070A490D004B -:1029A0000C00FF000B070A400D000C00FF000B0796 -:1029B0000A410D000C00FF000B010A400D020C4003 -:1029C000FF000B010A410D020C60FF000B070A40DB -:1029D0000D000C00FF000B070A410D000C00FF006A -:1029E0000B070A470D000C00FF000B070A4A0D00F9 -:1029F0000C00FF000B000A470D010C00FF000B004C -:102A00000A4A0D010C20FF000B070A470D000C00BD -:102A1000FF000B070A4A0D000C00FF000B070A7CA1 -:102A20000D000C00FF000B070A7E0D000C00FF00DC -:102A30000B000A000D010C1CFF000B070A7C0D00A7 -:102A40000C00FF000B070A7E0D000C00FF000B07B7 -:102A50000A440D000C00FF000B000A440D010C009D -:102A6000FF000B070A440D000C00FF000B070A4291 -:102A70000D000C00FF000B070A430D000C00FF00C7 -:102A80000B000A420D010C1AFF000B000A430D0156 -:102A90000C20FF000B070A420D000C00FF000B0783 -:102AA0000A430D000C00FF000B070A400D000C004C -:102AB000FF000B070A410D000C00FF000B010A404C -:102AC0000D020C40FF000B010A410D020C60FF00DB -:102AD0000B070A400D000C00FF000B070A410D0018 -:102AE0000C00FF000B070A440D0F0CFFFF000B0743 -:102AF0000A420D000C00FF000B070A430D000C00FA -:102B0000FF000B070A400D000C00FF000B070A41F5 -:102B10000D000C00FF000B070A510D060C40FF00D2 -:102B20000B070A500D060C40FF000B070A4F0D0360 -:102B30000C81FF000B070A530D1A0C76FF000B07E0 -:102B40000A540D0D0C8BFF000B070A550D040CE900 -:102B5000FF000B070A560D0B0C17FF000B070A5757 -:102B60000D1A0C38FF000B070A580D0D0CC9FF0099 -:102B70000B070A590D040C6FFF000B070A5A0D0BC7 -:102B80000C91FF000B070A730D140CDAFF000B0702 -:102B90000A740D0D0C93FF000B070A750D040CD978 -:102BA000FF000B070A760D050C93FF000B070A7751 -:102BB0000D140CDAFF000B070A780D0D0C93FF00C3 -:102BC0000B070A790D040CD9FF000B070A7A0D05D3 -:102BD0000C93FF000B070A5E0D030C68FF000B0748 -:102BE0000A5C0D040C31FF000B070A5D0D040C316B -:102BF000FF000B070A620D030C52FF000B070A606F -:102C00000D040C76FF000B070A610D040C76FF0023 -:102C10000B070A660D030C2EFF000B070A640D0458 -:102C20000CDAFF000B070A650D040CDAFF000B0736 -:102C30000A6A0D020CF6FF000B070A680D050C620C -:102C4000FF000B070A690D050C62FF000B060A4620 -:102C50000D0A0C22FF000B060A480D0D0C24FF0084 -:102C60000B060A6E0D110CD3FF000B060A700D1532 -:102C70000CCBFF000B060A520D200C93FF000B0635 -:102C80000A540D200C54FF000B060A4A0D270C1D98 -:102C9000FF000B060A580D2F0CC8FF000B060A5C3C -:102CA0000D300C07FF000B060A4C0D370C90FF008F -:102CB0000B060A600D3D0CDBFF000B060A640D3E9F -:102CC0000C42FF000B060A4E0D450C78FF000B0668 -:102CD0000A680D4C0C48FF000B060A6C0D4C0C6C7E -:102CE000FF000B060A500D520CE2FF000B060A42D1 -:102CF0000D020CBAFF00FF000E1E0F14FF000EDEC7 -:102D00000F20FF000EDF0F20FF000B060A780D00DA -:102D10000C40FF000B070A030D0F0CFFFF000B0711 -:102D20000A0B0D0F0CFFFF000B070A020D000C0031 -:102D3000FF000B070A0A0D000C00FF000B070A46F4 -:102D40000D000C00FF000B070A490D000C000905DF -:102D50000B000A100D000C00FF000D000C00FF001E -:102D60000D020C00FF000D000C00FF000D000C0018 -:102D7000FF000D000C00FF000D000C00FF000D0017 -:102D80000C00FF000D000C00FF000D000C00FF0008 -:102D90000D000C00FF000D000C00FF000D000C00EA -:102DA000FF000D000C00FF000D000C00FF000D00E7 -:102DB0000C00FF000D000C00FF000D000C00FF00D8 -:102DC0000D000C00FF000D000C00FF000D000C00BA -:102DD000FF000D000C00FF000D000C00FF000D00B7 -:102DE0000C00FF000D000C00FF000D000C00FF00A8 -:102DF0000D000C00FF000D000C00FF000D000C008A -:102E0000FF000D000C00FF000D000C00FF000D0086 -:102E10000C00FF000D000C00FF000D000C00FF0077 -:102E20000D000C00FF000D000C00FF000D000C0059 -:102E3000FF000D000C00FF000D000C00FF000D0056 -:102E40000C00FF000D000C00FF000D000C00FF0047 -:102E50000D000C00FF000D000C00FF000D000C0029 -:102E6000FF000D000C00FF000D000C00FF000D0026 -:102E70000C00FF0009050B010A100D010CC0FF003A -:102E80000D010CFAFF000D000C1AFF000D000C00E4 -:102E9000FF000D000C00FF000D000C00FF000D00F6 -:102EA0000C00FF000D000C00FF000D000C00FF00E7 -:102EB0000D000C00FF000D000C00FF000D000C00C9 -:102EC000FF000D000C00FF000D000C00FF000D00C6 -:102ED0000C00FF000D000C00FF000D000C00FF00B7 -:102EE0000D000C00FF000D000C00FF000D000C0099 -:102EF000FF000D000C00FF000D000C00FF000D0096 -:102F00000C00FF000D000C00FF000D000C00FF0086 -:102F10000D000C00FF000D000C00FF000D000C0068 -:102F2000FF000D000C00FF000D000C00FF000D0065 -:102F30000C00FF000D000C00FF000D000C00FF0056 -:102F40000D000C00FF000D000C00FF000D000C0038 -:102F5000FF000D000C00FF000D000C00FF000D0035 -:102F60000C00FF000D000C00FF000D000C00FF0026 -:102F70000D000C00FF000D000C00FF000D000C0008 -:102F8000FF000D000C00FF000D000C00FF000D0005 -:102F90000C00FF000D000C00FF00FF00FF00090502 -:102FA0000B020A100C46FF000C46FF000C00FF004D -:102FB0000C00FF000C00FF000C00FF000C00FF00E5 -:102FC0000C00FF000C00FF000C00FF000C00FF00D5 -:102FD0000C00FF000C00FF000C00FF000C00FF00C5 -:102FE0000C00FF000C00FF000C00FF000C00FF00B5 -:102FF0000C00FF000C00FF000C00FF000C00FF00A5 -:103000000C00FF000C00FF000C00FF000C00FF0094 -:103010000C00FF000C00FF000C00FF000C00FF0084 -:103020000C00FF000C00FF000C00FF000C00FF0074 -:103030000C00FF000C00FF000C00FF000C00FF0064 -:103040000C00FF000C00FF000C00FF000C00FF0054 -:103050000C00FF000C00FF000C00FF000C00FF0044 -:103060000C00FF0009050B030A100C00FF000C0008 -:10307000FF000C00FF000C00FF000C00FF000C0024 -:10308000FF000C00FF000C00FF000C00FF000C0014 -:10309000FF000C00FF000C00FF000C00FF000C0004 -:1030A000FF000C00FF000C00FF000C00FF000C00F4 -:1030B000FF000C00FF000C00FF000C00FF000C00E4 -:1030C000FF000C00FF000C00FF000C00FF000C00D4 -:1030D000FF000C00FF000C00FF000C00FF000C00C4 -:1030E000FF000C00FF000C00FF000C00FF000C00B4 -:1030F000FF000C00FF000C00FF000C00FF000C00A4 -:10310000FF000C00FF000C00FF000C00FF000C0093 -:10311000FF000C00FF000C00FF000C00FF000C0083 -:10312000FF000C00FF000C00FF0009050B040A1053 -:103130000C00FF000C00FF000C00FF000C00FF0063 -:103140000C00FF000C00FF000C00FF000C00FF0053 -:103150000C00FF000C00FF000C00FF000C00FF0043 -:103160000C00FF000C00FF000C00FF000C00FF0033 -:103170000C00FF000C00FF000C00FF000C00FF0023 -:103180000C00FF000C00FF000C00FF000C00FF0013 -:103190000C00FF000C00FF000C00FF000C00FF0003 -:1031A0000C00FF000C00FF000C00FF000C00FF00F3 -:1031B0000C00FF000C00FF000C00FF000C00FF00E3 -:1031C0000C00FF000C00FF000C00FF000C00FF00D3 -:1031D0000C00FF000C00FF000C00FF000C00FF00C3 -:1031E0000C00FF000C00FF000C00FF000C00FF00B3 -:1031F00009010B060A100D000C00FF000A120D0059 -:103200000C00FF000A140D000C00FF000A160D0050 -:103210000C00FF000A180D000C00FF000A1A0D0038 -:103220000C00FF000A1C0D000C00FF000A1E0D0020 -:103230000C00FF000A200D000C00FF000A220D0008 -:103240000C00FF000A240D000C00FF000A260D00F0 -:103250000C00FF000A280D000C00FF000A2A0D00D8 -:103260000C00FF000A2C0D000C00FF000A2E0D00C0 -:103270000C00FF000A300D000C00FF000A320D00A8 -:103280000C00FF000A340D000C00FF000A360D0090 -:103290000C00FF000A380D000C00FF000A3A0D0078 -:1032A0000C00FF000A3C0D000C00FF000A3E0D0060 -:1032B0000C00FF0009050B070A100D0F0CFFFF00A3 -:1032C0000D0F0CFFFF000D000C00FF000D000C00A7 -:1032D000FF000D000C00FF000D000C00FF000D00B2 -:1032E0000C00FF000D000C00FF000D000C00FF00A3 -:1032F0000D000C00FF000D000C00FF000D000C0085 -:10330000FF000D000C00FF000D000C00FF000D0081 -:103310000C00FF000D000C00FF000D000C00FF0072 -:103320000D000C00FF000D000C00FF000D000C0054 -:10333000FF000D000C00FF000D000C00FF000D0051 -:103340000C00FF000D000C00FF000D000C00FF0042 -:103350000D000C00FF000D000C00FF000D000C0024 -:10336000FF000D000C00FF000D000C00FF000D0021 -:103370000C00FF000D000C00FF000D000C00FF0012 -:103380000D000C00FF000D000C00FF000D000C00F4 -:10339000FF000D000C00FF000D000C00FF000D00F1 -:1033A0000C00FF000D000C00FF000D000C00FF00E2 -:1033B0000D000C00FF000D000C00FF000D000C00C4 -:1033C000FF000D000C00FF000D000C00FF000D00C1 -:1033D0000C00FF000D000C00FF000E010F00FF00AD -:1033E0000E020F00FF000E010F01FF000E020F0082 -:1033F000FF000E010F02FF000E020F00FF000E0182 -:103400000F03FF000E020F00FF000E010F04FF006C -:103410000E020F00FF000E010F05FF000E020F004D -:10342000FF000E010F06FF000E020F00FF000E014D -:103430000F07FF000E020F00FF000EB00F20FF006D -:103440000EB10F20FF000EB20F20FF000EB30F20B1 -:10345000FF000EB40F20FF000EB50F20FF000EB6C8 -:103460000F20FF000EB70F20FF000EF00F20FF000F -:103470000EF10F20FF000EF20F20FF000EF30F20C1 -:10348000FF000EF40F20FF000EF50F20FF000EF6D8 -:103490000F20FF000EF70F20FF000E100FFFFF00A0 -:1034A0000E110FFFFF000E120FFFFF000E130FFF94 -:1034B000FF000E140FFFFF000E150FFFFF000E168A -:1034C0000FFFFF000E170FFFFF000E200FFFFF0082 -:1034D0000E210FFFFF000E220FFFFF000E230FFF34 -:1034E000FF000E240FFFFF000E250FFFFF000E262A -:1034F0000FFFFF000E270FFFFF000E300F00FF0031 -:103500000E310F00FF000E320F00FF000E330F00D0 -:10351000FF000E340F00FF000E350F00FF000E36C7 -:103520000F00FF000E370F00FF000E400F00FF00DE -:103530000E410F00FF000E420F00FF000E430F0070 -:10354000FF000E440F00FF000E450F00FF000E4667 -:103550000F00FF000E470F00FF000E500F00FF008E -:103560000E510F00FF000E520F00FF000E530F0010 -:10357000FF000E540F00FF000E550F00FF000E5607 -:103580000F00FF000E570F00FF000E600F00FF003E -:103590000E610F00FF000E620F00FF000E630F00B0 -:1035A000FF000E640F00FF000E650F00FF000E66A7 -:1035B0000F00FF000E670F00FF000E700FC0FF002E -:1035C0000E710FC0FF000E720FC0FF000E730FC010 -:1035D000FF000E740FC0FF000E750FC0FF000E76C7 -:1035E0000FC0FF000E770FC0FF000E800F00FF001E -:1035F0000E810F00FF000E820F00FF000E830F00F0 -:10360000FF000E840F00FF000E850F00FF000E86E6 -:103610000F00FF000E870F00FF000E900F00FF004D -:103620000E910F00FF000E920F00FF000E930F008F -:10363000FF000E940F00FF000E950F00FF000E9686 -:103640000F00FF000E970F00FF000EA00F00FF00FD -:103650000EA10F00FF000EA20F00FF000EA30F002F -:10366000FF000EA40F00FF000EA50F00FF000EA626 -:103670000F00FF000EA70F00FF000EC00F00FF009D -:103680000EC10F00FF000EC20F00FF000EC30F009F -:10369000FF000EC40F00FF000EC50F00FF000EC696 -:1036A0000F00FF000EC70F00FF000ED00F00FF003D -:1036B0000ED10F00FF000ED20F00FF000ED30F003F -:1036C000FF000ED40F00FF000ED50F00FF000ED636 -:1036D0000F00FF000ED70F00FF000EE00F00FF00ED -:1036E0000EE10F00FF000EE20F00FF000EE30F00DF -:1036F000FF000EE40F00FF000EE50F00FF000EE6D6 -:103700000F00FF000EE70F00FF000E010F00FF008B -:103710000E020F01FF000E010F01FF000E020F014C -:10372000FF000E010F02FF000E020F01FF000E014D -:103730000F03FF000E020F01FF000E010F04FF0038 -:103740000E020F01FF000E010F05FF000E020F0118 -:10375000FF000E010F06FF000E020F01FF000E0119 -:103760000F07FF000E020F01FF000B070A460D00B6 -:103770000C00FF000B070A490D000C00FF000B07AF -:103780000A450D0F0CFFFF000B070A480D0F0CFF39 -:10379000FF000B070A7B0D040CCCFF000B070A7D12 -:1037A0000D040CCCFF000B070A7C0D000C00FF0081 -:1037B0000B070A7E0D000C00FF000B070A460D00E8 -:1037C0000C00FF000B070A490D000C00FF000B075F -:1037D0000A470D000C00FF000B070A4A0D000C0001 -:1037E000FF000B070A4C0D000C00FF000B070A4EF0 -:1037F0000D000C00FF000B070A4C0D000C000B071E -:103800000A4E0D000C000B070A4C0D000C280B078C -:103810000A4E0D000C280B070A4C0D000C510B072B -:103820000A4E0D000C510B070A4C0D000C7A0B07C9 -:103830000A4E0D000C7A0B070A4C0D000CA30B0767 -:103840000A4E0D000CA30B070A4C0D000CCC0B0705 -:103850000A4E0D000CCC0B070A4C0D000CF50B07A3 -:103860000A4E0D000CF50B070A4C0D010C1E0B0740 -:103870000A4E0D010C1E0B070A4C0D010C470B07DD -:103880000A4E0D010C470B070A4C0D010C700B077B -:103890000A4E0D010C700B070A4C0D010C990B0719 -:1038A0000A4E0D010C990B070A4C0D010CC20B07B7 -:1038B0000A4E0D010CC20B070A4C0D010CEB0B0755 -:1038C0000A4E0D010CEB0B070A4C0D020C140B07F2 -:1038D0000A4E0D020C140B070A4C0D020C3D0B078F -:1038E0000A4E0D020C3D0B070A4C0D020C660B072D -:1038F0000A4E0D020C660B070A4C0D020C8F0B07CB -:103900000A4E0D020C8F0B070A4C0D020CB80B0768 -:103910000A4E0D020CB80B070A4C0D020CE10B0706 -:103920000A4E0D020CE10B070A4C0D030C0A0B07A3 -:103930000A4E0D030C0A0B070A4C0D030C330B0740 -:103940000A4E0D030C330B070A4C0D030C5C0B07DE -:103950000A4E0D030C5C0B070A4C0D030C850B077C -:103960000A4E0D030C850B070A4C0D030CAE0B071A -:103970000A4E0D030CAE0B070A4C0D030CD70B07B8 -:103980000A4E0D030CD70B070A4C0D040C000B0755 -:103990000A4E0D040C000B070A4C0D040C280B07F3 -:1039A0000A4E0D040C280B070A4C0D040C510B0792 -:1039B0000A4E0D040C510B070A4C0D040C7A0B0730 -:1039C0000A4E0D040C7A0B070A4C0D040CA30B07CE -:1039D0000A4E0D040CA30B070A4C0D040CCC0B076C -:1039E0000A4E0D040CCC0B070A4C0D040CF50B070A -:1039F0000A4E0D040CF50B070A4C0D050C1E0B07A7 -:103A00000A4E0D050C1E0B070A4C0D050C470B0743 -:103A10000A4E0D050C470B070A4C0D050C700B07E1 -:103A20000A4E0D050C700B070A4C0D050C990B077F -:103A30000A4E0D050C990B070A4C0D050CC20B071D -:103A40000A4E0D050CC20B070A4C0D050CEB0B07BB -:103A50000A4E0D050CEB0B070A4C0D060C140B0758 -:103A60000A4E0D060C140B070A4C0D060C3D0B07F5 -:103A70000A4E0D060C3D0B070A4C0D060C660B0793 -:103A80000A4E0D060C660B070A4C0D060C8F0B0731 -:103A90000A4E0D060C8F0B070A4C0D060CB80B07CF -:103AA0000A4E0D060CB80B070A4C0D060CE10B076D -:103AB0000A4E0D060CE10B070A4C0D070C0A0B070A -:103AC0000A4E0D070C0A0B070A4C0D070C330B07A7 -:103AD0000A4E0D070C330B070A4C0D070C5C0B0745 -:103AE0000A4E0D070C5C0B070A4C0D070C850B07E3 -:103AF0000A4E0D070C850B070A4C0D070CAE0B0781 -:103B00000A4E0D070CAE0B070A4C0D070CD70B071E -:103B10000A4E0D070CD70B070A4C0D080C000B07BB -:103B20000A4E0D080C000B070A4C0D080C280B0759 -:103B30000A4E0D080C280B070A4C0D080C510B07F8 -:103B40000A4E0D080C510B070A4C0D080C7A0B0796 -:103B50000A4E0D080C7A0B070A4C0D080CA30B0734 -:103B60000A4E0D080CA30B070A4C0D080CCC0B07D2 -:103B70000A4E0D080CCC0B070A4C0D080CF50B0770 -:103B80000A4E0D080CF50B070A4C0D090C1E0B070D -:103B90000A4E0D090C1E0B070A4C0D090C470B07AA -:103BA0000A4E0D090C470B070A4C0D090C700B0748 -:103BB0000A4E0D090C700B070A4C0D090C990B07E6 -:103BC0000A4E0D090C990B070A4C0D090CC20B0784 -:103BD0000A4E0D090CC20B070A4C0D090CEB0B0722 -:103BE0000A4E0D090CEB0B070A4C0D0A0C140B07BF -:103BF0000A4E0D0A0C140B070A4C0D0A0C3D0B075C -:103C00000A4E0D0A0C3D0B070A4C0D0A0C660B07F9 -:103C10000A4E0D0A0C660B070A4C0D0A0C8F0B0797 -:103C20000A4E0D0A0C8F0B070A4C0D0A0CB80B0735 -:103C30000A4E0D0A0CB80B070A4C0D0A0CE10B07D3 -:103C40000A4E0D0A0CE10B070A4C0D0B0C0A0B0770 -:103C50000A4E0D0B0C0A0B070A4C0D0B0C330B070D -:103C60000A4E0D0B0C330B070A4C0D0B0C5C0B07AB -:103C70000A4E0D0B0C5C0B070A4C0D0B0C850B0749 -:103C80000A4E0D0B0C850B070A4C0D0B0CAE0B07E7 -:103C90000A4E0D0B0CAE0B070A4C0D0B0CD70B0785 -:103CA0000A4E0D0B0CD70B070A4C0D0C0C000B0722 -:103CB0000A4E0D0C0C000B070A4C0D0C0C280B07C0 -:103CC0000A4E0D0C0C280B070A4C0D0C0C510B075F -:103CD0000A4E0D0C0C510B070A4C0D0C0C7A0B07FD -:103CE0000A4E0D0C0C7A0B070A4C0D0C0CA30B079B -:103CF0000A4E0D0C0CA30B070A4C0D0C0CCC0B0739 -:103D00000A4E0D0C0CCC0B070A4C0D0C0CF50B07D6 -:103D10000A4E0D0C0CF50B070A4C0D0D0C1E0B0773 -:103D20000A4E0D0D0C1E0B070A4C0D0D0C470B0710 -:103D30000A4E0D0D0C470B070A4C0D0D0C700B07AE -:103D40000A4E0D0D0C700B070A4C0D0D0C990B074C -:103D50000A4E0D0D0C990B070A4C0D0D0CC20B07EA -:103D60000A4E0D0D0CC20B070A4C0D0D0CEB0B0788 -:103D70000A4E0D0D0CEB0B070A4C0D0E0C140B0725 -:103D80000A4E0D0E0C140B070A4C0D0E0C3D0B07C2 -:103D90000A4E0D0E0C3D0B070A4C0D0E0C660B0760 -:103DA0000A4E0D0E0C660B070A4C0D0E0C8F0B07FE -:103DB0000A4E0D0E0C8F0B070A4C0D0E0CB80B079C -:103DC0000A4E0D0E0CB80B070A4C0D0E0CE10B073A -:103DD0000A4E0D0E0CE10B070A4C0D0F0C0A0B07D7 -:103DE0000A4E0D0F0C0A0B070A4C0D0F0C330B0774 -:103DF0000A4E0D0F0C330B070A4C0D0F0C5C0B0712 -:103E00000A4E0D0F0C5C0B070A4C0D0F0C850B07AF -:103E10000A4E0D0F0C850B070A4C0D0F0CAE0B074D -:103E20000A4E0D0F0CAE0B070A4C0D0F0CD70B07EB -:103E30000A4E0D0F0CD70B070A4C0D0F0CFF0B078A -:0A3E40000A4E0D0F0CFF0800FF00F2 -:00000001FF diff --git a/trunk/fs/afs/netdevices.c b/trunk/fs/afs/netdevices.c index 7ad36506c256..49f189423063 100644 --- a/trunk/fs/afs/netdevices.c +++ b/trunk/fs/afs/netdevices.c @@ -20,7 +20,8 @@ int afs_get_MAC_address(u8 *mac, size_t maclen) struct net_device *dev; int ret = -ENODEV; - BUG_ON(maclen != ETH_ALEN); + if (maclen != ETH_ALEN) + BUG(); rtnl_lock(); dev = __dev_getfirstbyhwtype(&init_net, ARPHRD_ETHER); diff --git a/trunk/fs/ext2/inode.c b/trunk/fs/ext2/inode.c index acf678831103..b43b95563663 100644 --- a/trunk/fs/ext2/inode.c +++ b/trunk/fs/ext2/inode.c @@ -590,8 +590,9 @@ static int ext2_get_blocks(struct inode *inode, if (depth == 0) return (err); - +reread: partial = ext2_get_branch(inode, depth, offsets, chain, &err); + /* Simplest case - block found, no allocation needed */ if (!partial) { first_block = le32_to_cpu(chain[depth - 1].key); @@ -601,16 +602,15 @@ static int ext2_get_blocks(struct inode *inode, while (count < maxblocks && count <= blocks_to_boundary) { ext2_fsblk_t blk; - if (!verify_chain(chain, chain + depth - 1)) { + if (!verify_chain(chain, partial)) { /* * Indirect block might be removed by * truncate while we were reading it. * Handling of that case: forget what we've * got now, go to reread. */ - err = -EAGAIN; count = 0; - break; + goto changed; } blk = le32_to_cpu(*(chain[depth-1].p + count)); if (blk == first_block + count) @@ -618,8 +618,7 @@ static int ext2_get_blocks(struct inode *inode, else break; } - if (err != -EAGAIN) - goto got_it; + goto got_it; } /* Next simple case - plain lookup or failed read of indirect block */ @@ -627,33 +626,6 @@ static int ext2_get_blocks(struct inode *inode, goto cleanup; mutex_lock(&ei->truncate_mutex); - /* - * If the indirect block is missing while we are reading - * the chain(ext3_get_branch() returns -EAGAIN err), or - * if the chain has been changed after we grab the semaphore, - * (either because another process truncated this branch, or - * another get_block allocated this branch) re-grab the chain to see if - * the request block has been allocated or not. - * - * Since we already block the truncate/other get_block - * at this point, we will have the current copy of the chain when we - * splice the branch into the tree. - */ - if (err == -EAGAIN || !verify_chain(chain, partial)) { - while (partial > chain) { - brelse(partial->bh); - partial--; - } - partial = ext2_get_branch(inode, depth, offsets, chain, &err); - if (!partial) { - count++; - mutex_unlock(&ei->truncate_mutex); - if (err) - goto cleanup; - clear_buffer_new(bh_result); - goto got_it; - } - } /* * Okay, we need to do block allocation. Lazily initialize the block @@ -711,6 +683,12 @@ static int ext2_get_blocks(struct inode *inode, partial--; } return err; +changed: + while (partial > chain) { + brelse(partial->bh); + partial--; + } + goto reread; } int ext2_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create) diff --git a/trunk/fs/ext4/extents.c b/trunk/fs/ext4/extents.c index 6132353dcf62..ac77d8b8251d 100644 --- a/trunk/fs/ext4/extents.c +++ b/trunk/fs/ext4/extents.c @@ -342,7 +342,7 @@ static int ext4_valid_extent_idx(struct inode *inode, ext4_fsblk_t block = idx_pblock(ext_idx); struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es; if (unlikely(block < le32_to_cpu(es->s_first_data_block) || - (block >= ext4_blocks_count(es)))) + (block > ext4_blocks_count(es)))) return 0; else return 1; diff --git a/trunk/fs/ext4/inode.c b/trunk/fs/ext4/inode.c index c6bd6ced3bb7..a2e7952bc5f9 100644 --- a/trunk/fs/ext4/inode.c +++ b/trunk/fs/ext4/inode.c @@ -372,16 +372,16 @@ static int ext4_block_to_path(struct inode *inode, } static int __ext4_check_blockref(const char *function, struct inode *inode, - __le32 *p, unsigned int max) { + unsigned int *p, unsigned int max) { unsigned int maxblocks = ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es); - __le32 *bref = p; + unsigned int *bref = p; while (bref < p+max) { - if (unlikely(le32_to_cpu(*bref) >= maxblocks)) { + if (unlikely(*bref >= maxblocks)) { ext4_error(inode->i_sb, function, "block reference %u >= max (%u) " "in inode #%lu, offset=%d", - le32_to_cpu(*bref), maxblocks, + *bref, maxblocks, inode->i_ino, (int)(bref-p)); return -EIO; } diff --git a/trunk/fs/ext4/super.c b/trunk/fs/ext4/super.c index 2958f4e6f222..9987bba99db3 100644 --- a/trunk/fs/ext4/super.c +++ b/trunk/fs/ext4/super.c @@ -2508,15 +2508,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) if (EXT4_BLOCKS_PER_GROUP(sb) == 0) goto cantfind_ext4; - /* check blocks count against device size */ - blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits; - if (blocks_count && ext4_blocks_count(es) > blocks_count) { - printk(KERN_WARNING "EXT4-fs: bad geometry: block count %llu " - "exceeds size of device (%llu blocks)\n", - ext4_blocks_count(es), blocks_count); - goto failed_mount; - } - /* * It makes no sense for the first data block to be beyond the end * of the filesystem. diff --git a/trunk/fs/fuse/file.c b/trunk/fs/fuse/file.c index 2b25133524a3..0946861b10b7 100644 --- a/trunk/fs/fuse/file.c +++ b/trunk/fs/fuse/file.c @@ -938,9 +938,9 @@ static void fuse_release_user_pages(struct fuse_req *req, int write) } static int fuse_get_user_pages(struct fuse_req *req, const char __user *buf, - unsigned *nbytesp, int write) + size_t *nbytesp, int write) { - unsigned nbytes = *nbytesp; + size_t nbytes = *nbytesp; unsigned long user_addr = (unsigned long) buf; unsigned offset = user_addr & ~PAGE_MASK; int npages; @@ -955,7 +955,7 @@ static int fuse_get_user_pages(struct fuse_req *req, const char __user *buf, return 0; } - nbytes = min(nbytes, (unsigned) FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT); + nbytes = min_t(size_t, nbytes, FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT); npages = (nbytes + offset + PAGE_SIZE - 1) >> PAGE_SHIFT; npages = clamp(npages, 1, FUSE_MAX_PAGES_PER_REQ); down_read(¤t->mm->mmap_sem); diff --git a/trunk/fs/hfs/inode.c b/trunk/fs/hfs/inode.c index a1cbff2b4d99..9435dda8f1e0 100644 --- a/trunk/fs/hfs/inode.c +++ b/trunk/fs/hfs/inode.c @@ -70,10 +70,6 @@ static int hfs_releasepage(struct page *page, gfp_t mask) BUG(); return 0; } - - if (!tree) - return 0; - if (tree->node_size >= PAGE_CACHE_SIZE) { nidx = page->index >> (tree->node_size_shift - PAGE_CACHE_SHIFT); spin_lock(&tree->hash_lock); diff --git a/trunk/fs/hfs/mdb.c b/trunk/fs/hfs/mdb.c index 7b6165f25fbe..36ca2e1a4fa3 100644 --- a/trunk/fs/hfs/mdb.c +++ b/trunk/fs/hfs/mdb.c @@ -349,7 +349,6 @@ void hfs_mdb_put(struct super_block *sb) if (HFS_SB(sb)->nls_disk) unload_nls(HFS_SB(sb)->nls_disk); - free_pages((unsigned long)HFS_SB(sb)->bitmap, PAGE_SIZE < 8192 ? 1 : 0); kfree(HFS_SB(sb)); sb->s_fs_info = NULL; } diff --git a/trunk/fs/jbd/revoke.c b/trunk/fs/jbd/revoke.c index 3e9afc2a91d2..c7bd649bbbdc 100644 --- a/trunk/fs/jbd/revoke.c +++ b/trunk/fs/jbd/revoke.c @@ -55,25 +55,6 @@ * need do nothing. * RevokeValid set, Revoked set: * buffer has been revoked. - * - * Locking rules: - * We keep two hash tables of revoke records. One hashtable belongs to the - * running transaction (is pointed to by journal->j_revoke), the other one - * belongs to the committing transaction. Accesses to the second hash table - * happen only from the kjournald and no other thread touches this table. Also - * journal_switch_revoke_table() which switches which hashtable belongs to the - * running and which to the committing transaction is called only from - * kjournald. Therefore we need no locks when accessing the hashtable belonging - * to the committing transaction. - * - * All users operating on the hash table belonging to the running transaction - * have a handle to the transaction. Therefore they are safe from kjournald - * switching hash tables under them. For operations on the lists of entries in - * the hash table j_revoke_lock is used. - * - * Finally, also replay code uses the hash tables but at this moment noone else - * can touch them (filesystem isn't mounted yet) and hence no locking is - * needed. */ #ifndef __KERNEL__ @@ -421,6 +402,8 @@ int journal_revoke(handle_t *handle, unsigned long blocknr, * the second time we would still have a pending revoke to cancel. So, * do not trust the Revoked bit on buffers unless RevokeValid is also * set. + * + * The caller must have the journal locked. */ int journal_cancel_revoke(handle_t *handle, struct journal_head *jh) { @@ -498,7 +481,10 @@ void journal_switch_revoke_table(journal_t *journal) /* * Write revoke records to the journal for all entries in the current * revoke hash, deleting the entries as we go. + * + * Called with the journal lock held. */ + void journal_write_revoke_records(journal_t *journal, transaction_t *transaction) { diff --git a/trunk/fs/nilfs2/bmap.c b/trunk/fs/nilfs2/bmap.c index 064279e33bbb..24638e059bf3 100644 --- a/trunk/fs/nilfs2/bmap.c +++ b/trunk/fs/nilfs2/bmap.c @@ -688,8 +688,6 @@ static const struct nilfs_bmap_ptr_operations nilfs_bmap_ptr_ops_gc = { .bpop_translate = NULL, }; -static struct lock_class_key nilfs_bmap_dat_lock_key; - /** * nilfs_bmap_read - read a bmap from an inode * @bmap: bmap @@ -717,7 +715,6 @@ int nilfs_bmap_read(struct nilfs_bmap *bmap, struct nilfs_inode *raw_inode) bmap->b_pops = &nilfs_bmap_ptr_ops_p; bmap->b_last_allocated_key = 0; /* XXX: use macro */ bmap->b_last_allocated_ptr = NILFS_BMAP_NEW_PTR_INIT; - lockdep_set_class(&bmap->b_sem, &nilfs_bmap_dat_lock_key); break; case NILFS_CPFILE_INO: case NILFS_SUFILE_INO: @@ -775,7 +772,6 @@ void nilfs_bmap_init_gcdat(struct nilfs_bmap *gcbmap, struct nilfs_bmap *bmap) { memcpy(gcbmap, bmap, sizeof(union nilfs_bmap_union)); init_rwsem(&gcbmap->b_sem); - lockdep_set_class(&bmap->b_sem, &nilfs_bmap_dat_lock_key); gcbmap->b_inode = &NILFS_BMAP_I(gcbmap)->vfs_inode; } @@ -783,6 +779,5 @@ void nilfs_bmap_commit_gcdat(struct nilfs_bmap *gcbmap, struct nilfs_bmap *bmap) { memcpy(bmap, gcbmap, sizeof(union nilfs_bmap_union)); init_rwsem(&bmap->b_sem); - lockdep_set_class(&bmap->b_sem, &nilfs_bmap_dat_lock_key); bmap->b_inode = &NILFS_BMAP_I(bmap)->vfs_inode; } diff --git a/trunk/fs/nilfs2/nilfs.h b/trunk/fs/nilfs2/nilfs.h index 3d0c18a16db1..7558c977db02 100644 --- a/trunk/fs/nilfs2/nilfs.h +++ b/trunk/fs/nilfs2/nilfs.h @@ -34,6 +34,11 @@ #include "bmap.h" #include "bmap_union.h" +/* + * NILFS filesystem version + */ +#define NILFS_VERSION "2.0.5" + /* * nilfs inode data in memory */ diff --git a/trunk/fs/nilfs2/recovery.c b/trunk/fs/nilfs2/recovery.c index 4fc081e47d70..6ade0963fc1d 100644 --- a/trunk/fs/nilfs2/recovery.c +++ b/trunk/fs/nilfs2/recovery.c @@ -413,6 +413,7 @@ static int nilfs_prepare_segment_for_recovery(struct the_nilfs *nilfs, struct nilfs_segment_entry *ent, *n; struct inode *sufile = nilfs->ns_sufile; __u64 segnum[4]; + time_t mtime; int err; int i; @@ -441,13 +442,24 @@ static int nilfs_prepare_segment_for_recovery(struct the_nilfs *nilfs, * Collecting segments written after the latest super root. * These are marked dirty to avoid being reallocated in the next write. */ + mtime = get_seconds(); list_for_each_entry_safe(ent, n, head, list) { - if (ent->segnum != segnum[0]) { - err = nilfs_sufile_scrap(sufile, ent->segnum); - if (unlikely(err)) - goto failed; + if (ent->segnum == segnum[0]) { + list_del(&ent->list); + nilfs_free_segment_entry(ent); + continue; + } + err = nilfs_open_segment_entry(ent, sufile); + if (unlikely(err)) + goto failed; + if (!nilfs_segment_usage_dirty(ent->raw_su)) { + /* make the segment garbage */ + ent->raw_su->su_nblocks = cpu_to_le32(0); + ent->raw_su->su_lastmod = cpu_to_le32(mtime); + nilfs_segment_usage_set_dirty(ent->raw_su); } list_del(&ent->list); + nilfs_close_segment_entry(ent, sufile); nilfs_free_segment_entry(ent); } diff --git a/trunk/fs/nilfs2/sufile.c b/trunk/fs/nilfs2/sufile.c index 98e68677f045..c774cf397e2f 100644 --- a/trunk/fs/nilfs2/sufile.c +++ b/trunk/fs/nilfs2/sufile.c @@ -93,52 +93,6 @@ nilfs_sufile_get_segment_usage_block(struct inode *sufile, __u64 segnum, create, NULL, bhp); } -static void nilfs_sufile_mod_counter(struct buffer_head *header_bh, - u64 ncleanadd, u64 ndirtyadd) -{ - struct nilfs_sufile_header *header; - void *kaddr; - - kaddr = kmap_atomic(header_bh->b_page, KM_USER0); - header = kaddr + bh_offset(header_bh); - le64_add_cpu(&header->sh_ncleansegs, ncleanadd); - le64_add_cpu(&header->sh_ndirtysegs, ndirtyadd); - kunmap_atomic(kaddr, KM_USER0); - - nilfs_mdt_mark_buffer_dirty(header_bh); -} - -int nilfs_sufile_update(struct inode *sufile, __u64 segnum, int create, - void (*dofunc)(struct inode *, __u64, - struct buffer_head *, - struct buffer_head *)) -{ - struct buffer_head *header_bh, *bh; - int ret; - - if (unlikely(segnum >= nilfs_sufile_get_nsegments(sufile))) { - printk(KERN_WARNING "%s: invalid segment number: %llu\n", - __func__, (unsigned long long)segnum); - return -EINVAL; - } - down_write(&NILFS_MDT(sufile)->mi_sem); - - ret = nilfs_sufile_get_header_block(sufile, &header_bh); - if (ret < 0) - goto out_sem; - - ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, create, &bh); - if (!ret) { - dofunc(sufile, segnum, header_bh, bh); - brelse(bh); - } - brelse(header_bh); - - out_sem: - up_write(&NILFS_MDT(sufile)->mi_sem); - return ret; -} - /** * nilfs_sufile_alloc - allocate a segment * @sufile: inode of segment usage file @@ -159,6 +113,7 @@ int nilfs_sufile_update(struct inode *sufile, __u64 segnum, int create, int nilfs_sufile_alloc(struct inode *sufile, __u64 *segnump) { struct buffer_head *header_bh, *su_bh; + struct the_nilfs *nilfs; struct nilfs_sufile_header *header; struct nilfs_segment_usage *su; size_t susz = NILFS_MDT(sufile)->mi_entry_size; @@ -169,6 +124,8 @@ int nilfs_sufile_alloc(struct inode *sufile, __u64 *segnump) down_write(&NILFS_MDT(sufile)->mi_sem); + nilfs = NILFS_MDT(sufile)->mi_nilfs; + ret = nilfs_sufile_get_header_block(sufile, &header_bh); if (ret < 0) goto out_sem; @@ -235,84 +192,165 @@ int nilfs_sufile_alloc(struct inode *sufile, __u64 *segnump) return ret; } -void nilfs_sufile_do_cancel_free(struct inode *sufile, __u64 segnum, - struct buffer_head *header_bh, - struct buffer_head *su_bh) +/** + * nilfs_sufile_cancel_free - + * @sufile: inode of segment usage file + * @segnum: segment number + * + * Description: + * + * Return Value: On success, 0 is returned. On error, one of the following + * negative error codes is returned. + * + * %-EIO - I/O error. + * + * %-ENOMEM - Insufficient amount of memory available. + */ +int nilfs_sufile_cancel_free(struct inode *sufile, __u64 segnum) { + struct buffer_head *header_bh, *su_bh; + struct the_nilfs *nilfs; + struct nilfs_sufile_header *header; struct nilfs_segment_usage *su; void *kaddr; + int ret; + + down_write(&NILFS_MDT(sufile)->mi_sem); + + nilfs = NILFS_MDT(sufile)->mi_nilfs; + + ret = nilfs_sufile_get_header_block(sufile, &header_bh); + if (ret < 0) + goto out_sem; + + ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &su_bh); + if (ret < 0) + goto out_header; kaddr = kmap_atomic(su_bh->b_page, KM_USER0); - su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); + su = nilfs_sufile_block_get_segment_usage( + sufile, segnum, su_bh, kaddr); if (unlikely(!nilfs_segment_usage_clean(su))) { printk(KERN_WARNING "%s: segment %llu must be clean\n", __func__, (unsigned long long)segnum); kunmap_atomic(kaddr, KM_USER0); - return; + goto out_su_bh; } nilfs_segment_usage_set_dirty(su); kunmap_atomic(kaddr, KM_USER0); - nilfs_sufile_mod_counter(header_bh, -1, 1); + kaddr = kmap_atomic(header_bh->b_page, KM_USER0); + header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr); + le64_add_cpu(&header->sh_ncleansegs, -1); + le64_add_cpu(&header->sh_ndirtysegs, 1); + kunmap_atomic(kaddr, KM_USER0); + + nilfs_mdt_mark_buffer_dirty(header_bh); nilfs_mdt_mark_buffer_dirty(su_bh); nilfs_mdt_mark_dirty(sufile); + + out_su_bh: + brelse(su_bh); + out_header: + brelse(header_bh); + out_sem: + up_write(&NILFS_MDT(sufile)->mi_sem); + return ret; } -void nilfs_sufile_do_scrap(struct inode *sufile, __u64 segnum, - struct buffer_head *header_bh, - struct buffer_head *su_bh) +/** + * nilfs_sufile_freev - free segments + * @sufile: inode of segment usage file + * @segnum: array of segment numbers + * @nsegs: number of segments + * + * Description: nilfs_sufile_freev() frees segments specified by @segnum and + * @nsegs, which must have been returned by a previous call to + * nilfs_sufile_alloc(). + * + * Return Value: On success, 0 is returned. On error, one of the following + * negative error codes is returned. + * + * %-EIO - I/O error. + * + * %-ENOMEM - Insufficient amount of memory available. + */ +#define NILFS_SUFILE_FREEV_PREALLOC 16 +int nilfs_sufile_freev(struct inode *sufile, __u64 *segnum, size_t nsegs) { + struct buffer_head *header_bh, **su_bh, + *su_bh_prealloc[NILFS_SUFILE_FREEV_PREALLOC]; + struct the_nilfs *nilfs; + struct nilfs_sufile_header *header; struct nilfs_segment_usage *su; void *kaddr; - int clean, dirty; + int ret, i; - kaddr = kmap_atomic(su_bh->b_page, KM_USER0); - su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); - if (su->su_flags == cpu_to_le32(1UL << NILFS_SEGMENT_USAGE_DIRTY) && - su->su_nblocks == cpu_to_le32(0)) { - kunmap_atomic(kaddr, KM_USER0); - return; - } - clean = nilfs_segment_usage_clean(su); - dirty = nilfs_segment_usage_dirty(su); + down_write(&NILFS_MDT(sufile)->mi_sem); - /* make the segment garbage */ - su->su_lastmod = cpu_to_le64(0); - su->su_nblocks = cpu_to_le32(0); - su->su_flags = cpu_to_le32(1UL << NILFS_SEGMENT_USAGE_DIRTY); - kunmap_atomic(kaddr, KM_USER0); + nilfs = NILFS_MDT(sufile)->mi_nilfs; - nilfs_sufile_mod_counter(header_bh, clean ? (u64)-1 : 0, dirty ? 0 : 1); - nilfs_mdt_mark_buffer_dirty(su_bh); - nilfs_mdt_mark_dirty(sufile); -} + /* prepare resources */ + if (nsegs <= NILFS_SUFILE_FREEV_PREALLOC) + su_bh = su_bh_prealloc; + else { + su_bh = kmalloc(sizeof(*su_bh) * nsegs, GFP_NOFS); + if (su_bh == NULL) { + ret = -ENOMEM; + goto out_sem; + } + } -void nilfs_sufile_do_free(struct inode *sufile, __u64 segnum, - struct buffer_head *header_bh, - struct buffer_head *su_bh) -{ - struct nilfs_segment_usage *su; - void *kaddr; - int sudirty; + ret = nilfs_sufile_get_header_block(sufile, &header_bh); + if (ret < 0) + goto out_su_bh; + for (i = 0; i < nsegs; i++) { + ret = nilfs_sufile_get_segment_usage_block(sufile, segnum[i], + 0, &su_bh[i]); + if (ret < 0) + goto out_bh; + } - kaddr = kmap_atomic(su_bh->b_page, KM_USER0); - su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); - if (nilfs_segment_usage_clean(su)) { - printk(KERN_WARNING "%s: segment %llu is already clean\n", - __func__, (unsigned long long)segnum); + /* free segments */ + for (i = 0; i < nsegs; i++) { + kaddr = kmap_atomic(su_bh[i]->b_page, KM_USER0); + su = nilfs_sufile_block_get_segment_usage( + sufile, segnum[i], su_bh[i], kaddr); + WARN_ON(nilfs_segment_usage_error(su)); + nilfs_segment_usage_set_clean(su); kunmap_atomic(kaddr, KM_USER0); - return; + nilfs_mdt_mark_buffer_dirty(su_bh[i]); } - WARN_ON(nilfs_segment_usage_error(su)); - WARN_ON(!nilfs_segment_usage_dirty(su)); - - sudirty = nilfs_segment_usage_dirty(su); - nilfs_segment_usage_set_clean(su); + kaddr = kmap_atomic(header_bh->b_page, KM_USER0); + header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr); + le64_add_cpu(&header->sh_ncleansegs, nsegs); + le64_add_cpu(&header->sh_ndirtysegs, -(u64)nsegs); kunmap_atomic(kaddr, KM_USER0); - nilfs_mdt_mark_buffer_dirty(su_bh); - - nilfs_sufile_mod_counter(header_bh, 1, sudirty ? (u64)-1 : 0); + nilfs_mdt_mark_buffer_dirty(header_bh); nilfs_mdt_mark_dirty(sufile); + + out_bh: + for (i--; i >= 0; i--) + brelse(su_bh[i]); + brelse(header_bh); + + out_su_bh: + if (su_bh != su_bh_prealloc) + kfree(su_bh); + + out_sem: + up_write(&NILFS_MDT(sufile)->mi_sem); + return ret; +} + +/** + * nilfs_sufile_free - + * @sufile: + * @segnum: + */ +int nilfs_sufile_free(struct inode *sufile, __u64 segnum) +{ + return nilfs_sufile_freev(sufile, &segnum, 1); } /** @@ -462,28 +500,72 @@ int nilfs_sufile_get_ncleansegs(struct inode *sufile, unsigned long *nsegsp) return ret; } -void nilfs_sufile_do_set_error(struct inode *sufile, __u64 segnum, - struct buffer_head *header_bh, - struct buffer_head *su_bh) +/** + * nilfs_sufile_set_error - mark a segment as erroneous + * @sufile: inode of segment usage file + * @segnum: segment number + * + * Description: nilfs_sufile_set_error() marks the segment specified by + * @segnum as erroneous. The error segment will never be used again. + * + * Return Value: On success, 0 is returned. On error, one of the following + * negative error codes is returned. + * + * %-EIO - I/O error. + * + * %-ENOMEM - Insufficient amount of memory available. + * + * %-EINVAL - Invalid segment usage number. + */ +int nilfs_sufile_set_error(struct inode *sufile, __u64 segnum) { + struct buffer_head *header_bh, *su_bh; struct nilfs_segment_usage *su; + struct nilfs_sufile_header *header; void *kaddr; - int suclean; + int ret; + + if (unlikely(segnum >= nilfs_sufile_get_nsegments(sufile))) { + printk(KERN_WARNING "%s: invalid segment number: %llu\n", + __func__, (unsigned long long)segnum); + return -EINVAL; + } + down_write(&NILFS_MDT(sufile)->mi_sem); + + ret = nilfs_sufile_get_header_block(sufile, &header_bh); + if (ret < 0) + goto out_sem; + ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &su_bh); + if (ret < 0) + goto out_header; kaddr = kmap_atomic(su_bh->b_page, KM_USER0); su = nilfs_sufile_block_get_segment_usage(sufile, segnum, su_bh, kaddr); if (nilfs_segment_usage_error(su)) { kunmap_atomic(kaddr, KM_USER0); - return; + brelse(su_bh); + goto out_header; } - suclean = nilfs_segment_usage_clean(su); + nilfs_segment_usage_set_error(su); kunmap_atomic(kaddr, KM_USER0); + brelse(su_bh); - if (suclean) - nilfs_sufile_mod_counter(header_bh, -1, 0); + kaddr = kmap_atomic(header_bh->b_page, KM_USER0); + header = nilfs_sufile_block_get_header(sufile, header_bh, kaddr); + le64_add_cpu(&header->sh_ndirtysegs, -1); + kunmap_atomic(kaddr, KM_USER0); + nilfs_mdt_mark_buffer_dirty(header_bh); nilfs_mdt_mark_buffer_dirty(su_bh); nilfs_mdt_mark_dirty(sufile); + brelse(su_bh); + + out_header: + brelse(header_bh); + + out_sem: + up_write(&NILFS_MDT(sufile)->mi_sem); + return ret; } /** @@ -543,7 +625,7 @@ ssize_t nilfs_sufile_get_suinfo(struct inode *sufile, __u64 segnum, si[i + j].sui_nblocks = le32_to_cpu(su->su_nblocks); si[i + j].sui_flags = le32_to_cpu(su->su_flags) & ~(1UL << NILFS_SEGMENT_USAGE_ACTIVE); - if (nilfs_segment_is_active(nilfs, segnum + j)) + if (nilfs_segment_is_active(nilfs, segnum + i + j)) si[i + j].sui_flags |= (1UL << NILFS_SEGMENT_USAGE_ACTIVE); } diff --git a/trunk/fs/nilfs2/sufile.h b/trunk/fs/nilfs2/sufile.h index a2e2efd4ade1..d595f33a768d 100644 --- a/trunk/fs/nilfs2/sufile.h +++ b/trunk/fs/nilfs2/sufile.h @@ -36,6 +36,9 @@ static inline unsigned long nilfs_sufile_get_nsegments(struct inode *sufile) } int nilfs_sufile_alloc(struct inode *, __u64 *); +int nilfs_sufile_cancel_free(struct inode *, __u64); +int nilfs_sufile_freev(struct inode *, __u64 *, size_t); +int nilfs_sufile_free(struct inode *, __u64); int nilfs_sufile_get_segment_usage(struct inode *, __u64, struct nilfs_segment_usage **, struct buffer_head **); @@ -43,83 +46,9 @@ void nilfs_sufile_put_segment_usage(struct inode *, __u64, struct buffer_head *); int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *); int nilfs_sufile_get_ncleansegs(struct inode *, unsigned long *); +int nilfs_sufile_set_error(struct inode *, __u64); ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, struct nilfs_suinfo *, size_t); -int nilfs_sufile_update(struct inode *, __u64, int, - void (*dofunc)(struct inode *, __u64, - struct buffer_head *, - struct buffer_head *)); -void nilfs_sufile_do_cancel_free(struct inode *, __u64, struct buffer_head *, - struct buffer_head *); -void nilfs_sufile_do_scrap(struct inode *, __u64, struct buffer_head *, - struct buffer_head *); -void nilfs_sufile_do_free(struct inode *, __u64, struct buffer_head *, - struct buffer_head *); -void nilfs_sufile_do_set_error(struct inode *, __u64, struct buffer_head *, - struct buffer_head *); - -/** - * nilfs_sufile_cancel_free - - * @sufile: inode of segment usage file - * @segnum: segment number - * - * Description: - * - * Return Value: On success, 0 is returned. On error, one of the following - * negative error codes is returned. - * - * %-EIO - I/O error. - * - * %-ENOMEM - Insufficient amount of memory available. - */ -static inline int nilfs_sufile_cancel_free(struct inode *sufile, __u64 segnum) -{ - return nilfs_sufile_update(sufile, segnum, 0, - nilfs_sufile_do_cancel_free); -} - -/** - * nilfs_sufile_scrap - make a segment garbage - * @sufile: inode of segment usage file - * @segnum: segment number to be freed - */ -static inline int nilfs_sufile_scrap(struct inode *sufile, __u64 segnum) -{ - return nilfs_sufile_update(sufile, segnum, 1, nilfs_sufile_do_scrap); -} - -/** - * nilfs_sufile_free - free segment - * @sufile: inode of segment usage file - * @segnum: segment number to be freed - */ -static inline int nilfs_sufile_free(struct inode *sufile, __u64 segnum) -{ - return nilfs_sufile_update(sufile, segnum, 0, nilfs_sufile_do_free); -} - -/** - * nilfs_sufile_set_error - mark a segment as erroneous - * @sufile: inode of segment usage file - * @segnum: segment number - * - * Description: nilfs_sufile_set_error() marks the segment specified by - * @segnum as erroneous. The error segment will never be used again. - * - * Return Value: On success, 0 is returned. On error, one of the following - * negative error codes is returned. - * - * %-EIO - I/O error. - * - * %-ENOMEM - Insufficient amount of memory available. - * - * %-EINVAL - Invalid segment usage number. - */ -static inline int nilfs_sufile_set_error(struct inode *sufile, __u64 segnum) -{ - return nilfs_sufile_update(sufile, segnum, 0, - nilfs_sufile_do_set_error); -} #endif /* _NILFS_SUFILE_H */ diff --git a/trunk/fs/nilfs2/super.c b/trunk/fs/nilfs2/super.c index 6989b03e97ab..e117e1ea9bff 100644 --- a/trunk/fs/nilfs2/super.c +++ b/trunk/fs/nilfs2/super.c @@ -63,6 +63,7 @@ MODULE_AUTHOR("NTT Corp."); MODULE_DESCRIPTION("A New Implementation of the Log-structured Filesystem " "(NILFS)"); +MODULE_VERSION(NILFS_VERSION); MODULE_LICENSE("GPL"); static int nilfs_remount(struct super_block *sb, int *flags, char *data); @@ -475,12 +476,11 @@ static int nilfs_statfs(struct dentry *dentry, struct kstatfs *buf) { struct super_block *sb = dentry->d_sb; struct nilfs_sb_info *sbi = NILFS_SB(sb); - struct the_nilfs *nilfs = sbi->s_nilfs; - u64 id = huge_encode_dev(sb->s_bdev->bd_dev); unsigned long long blocks; unsigned long overhead; unsigned long nrsvblocks; sector_t nfreeblocks; + struct the_nilfs *nilfs = sbi->s_nilfs; int err; /* @@ -514,9 +514,6 @@ static int nilfs_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_files = atomic_read(&sbi->s_inodes_count); buf->f_ffree = 0; /* nilfs_count_free_inodes(sb); */ buf->f_namelen = NILFS_NAME_LEN; - buf->f_fsid.val[0] = (u32)id; - buf->f_fsid.val[1] = (u32)(id >> 32); - return 0; } diff --git a/trunk/fs/nilfs2/the_nilfs.c b/trunk/fs/nilfs2/the_nilfs.c index 7f65b3be4aa9..33400cf0bbe2 100644 --- a/trunk/fs/nilfs2/the_nilfs.c +++ b/trunk/fs/nilfs2/the_nilfs.c @@ -115,7 +115,6 @@ void put_nilfs(struct the_nilfs *nilfs) static int nilfs_load_super_root(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi, sector_t sr_block) { - static struct lock_class_key dat_lock_key; struct buffer_head *bh_sr; struct nilfs_super_root *raw_sr; struct nilfs_super_block **sbp = nilfs->ns_sbp; @@ -164,9 +163,6 @@ static int nilfs_load_super_root(struct the_nilfs *nilfs, if (unlikely(err)) goto failed_sufile; - lockdep_set_class(&NILFS_MDT(nilfs->ns_dat)->mi_sem, &dat_lock_key); - lockdep_set_class(&NILFS_MDT(nilfs->ns_gc_dat)->mi_sem, &dat_lock_key); - nilfs_mdt_set_shadow(nilfs->ns_dat, nilfs->ns_gc_dat); nilfs_mdt_set_entry_size(nilfs->ns_cpfile, checkpoint_size, sizeof(struct nilfs_cpfile_header)); diff --git a/trunk/fs/xfs/linux-2.6/xfs_aops.c b/trunk/fs/xfs/linux-2.6/xfs_aops.c index 7ec89fc05b2b..c13f67300fe7 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_aops.c +++ b/trunk/fs/xfs/linux-2.6/xfs_aops.c @@ -152,6 +152,23 @@ xfs_find_bdev_for_inode( return mp->m_ddev_targp->bt_bdev; } +/* + * Schedule IO completion handling on a xfsdatad if this was + * the final hold on this ioend. If we are asked to wait, + * flush the workqueue. + */ +STATIC void +xfs_finish_ioend( + xfs_ioend_t *ioend, + int wait) +{ + if (atomic_dec_and_test(&ioend->io_remaining)) { + queue_work(xfsdatad_workqueue, &ioend->io_work); + if (wait) + flush_workqueue(xfsdatad_workqueue); + } +} + /* * We're now finished for good with this ioend structure. * Update the page state via the associated buffer_heads, @@ -292,27 +309,6 @@ xfs_end_bio_read( xfs_destroy_ioend(ioend); } -/* - * Schedule IO completion handling on a xfsdatad if this was - * the final hold on this ioend. If we are asked to wait, - * flush the workqueue. - */ -STATIC void -xfs_finish_ioend( - xfs_ioend_t *ioend, - int wait) -{ - if (atomic_dec_and_test(&ioend->io_remaining)) { - struct workqueue_struct *wq = xfsdatad_workqueue; - if (ioend->io_work.func == xfs_end_bio_unwritten) - wq = xfsconvertd_workqueue; - - queue_work(wq, &ioend->io_work); - if (wait) - flush_workqueue(wq); - } -} - /* * Allocate and initialise an IO completion structure. * We need to track unwritten extent write completion here initially. diff --git a/trunk/fs/xfs/linux-2.6/xfs_aops.h b/trunk/fs/xfs/linux-2.6/xfs_aops.h index 221b3e66ceef..1dd528849755 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_aops.h +++ b/trunk/fs/xfs/linux-2.6/xfs_aops.h @@ -19,7 +19,6 @@ #define __XFS_AOPS_H__ extern struct workqueue_struct *xfsdatad_workqueue; -extern struct workqueue_struct *xfsconvertd_workqueue; extern mempool_t *xfs_ioend_pool; /* diff --git a/trunk/fs/xfs/linux-2.6/xfs_buf.c b/trunk/fs/xfs/linux-2.6/xfs_buf.c index e28800a9f2b5..aa1016bb9134 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_buf.c +++ b/trunk/fs/xfs/linux-2.6/xfs_buf.c @@ -51,7 +51,6 @@ static struct shrinker xfs_buf_shake = { static struct workqueue_struct *xfslogd_workqueue; struct workqueue_struct *xfsdatad_workqueue; -struct workqueue_struct *xfsconvertd_workqueue; #ifdef XFS_BUF_TRACE void @@ -1776,7 +1775,6 @@ xfs_flush_buftarg( xfs_buf_t *bp, *n; int pincount = 0; - xfs_buf_runall_queues(xfsconvertd_workqueue); xfs_buf_runall_queues(xfsdatad_workqueue); xfs_buf_runall_queues(xfslogd_workqueue); @@ -1833,15 +1831,9 @@ xfs_buf_init(void) if (!xfsdatad_workqueue) goto out_destroy_xfslogd_workqueue; - xfsconvertd_workqueue = create_workqueue("xfsconvertd"); - if (!xfsconvertd_workqueue) - goto out_destroy_xfsdatad_workqueue; - register_shrinker(&xfs_buf_shake); return 0; - out_destroy_xfsdatad_workqueue: - destroy_workqueue(xfsdatad_workqueue); out_destroy_xfslogd_workqueue: destroy_workqueue(xfslogd_workqueue); out_free_buf_zone: @@ -1857,7 +1849,6 @@ void xfs_buf_terminate(void) { unregister_shrinker(&xfs_buf_shake); - destroy_workqueue(xfsconvertd_workqueue); destroy_workqueue(xfsdatad_workqueue); destroy_workqueue(xfslogd_workqueue); kmem_zone_destroy(xfs_buf_zone); diff --git a/trunk/fs/xfs/linux-2.6/xfs_fs_subr.c b/trunk/fs/xfs/linux-2.6/xfs_fs_subr.c index 08be36d7326c..5aeb77776961 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_fs_subr.c +++ b/trunk/fs/xfs/linux-2.6/xfs_fs_subr.c @@ -74,14 +74,14 @@ xfs_flush_pages( if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) { xfs_iflags_clear(ip, XFS_ITRUNCATED); - ret = -filemap_fdatawrite(mapping); + ret = filemap_fdatawrite(mapping); + if (flags & XFS_B_ASYNC) + return -ret; + ret2 = filemap_fdatawait(mapping); + if (!ret) + ret = ret2; } - if (flags & XFS_B_ASYNC) - return ret; - ret2 = xfs_wait_on_pages(ip, first, last); - if (!ret) - ret = ret2; - return ret; + return -ret; } int diff --git a/trunk/fs/xfs/linux-2.6/xfs_lrw.c b/trunk/fs/xfs/linux-2.6/xfs_lrw.c index 9142192ccbe6..7e90daa0d1d1 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_lrw.c +++ b/trunk/fs/xfs/linux-2.6/xfs_lrw.c @@ -751,26 +751,10 @@ xfs_write( goto relock; } } else { - int enospc = 0; - ssize_t ret2 = 0; - -write_retry: xfs_rw_enter_trace(XFS_WRITE_ENTER, xip, (void *)iovp, segs, *offset, ioflags); - ret2 = generic_file_buffered_write(iocb, iovp, segs, + ret = generic_file_buffered_write(iocb, iovp, segs, pos, offset, count, ret); - /* - * if we just got an ENOSPC, flush the inode now we - * aren't holding any page locks and retry *once* - */ - if (ret2 == -ENOSPC && !enospc) { - error = xfs_flush_pages(xip, 0, -1, 0, FI_NONE); - if (error) - goto out_unlock_internal; - enospc = 1; - goto write_retry; - } - ret = ret2; } current->backing_dev_info = NULL; diff --git a/trunk/fs/xfs/linux-2.6/xfs_sync.c b/trunk/fs/xfs/linux-2.6/xfs_sync.c index f7ba76633c29..a608e72fa405 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_sync.c +++ b/trunk/fs/xfs/linux-2.6/xfs_sync.c @@ -62,6 +62,12 @@ xfs_sync_inodes_ag( uint32_t first_index = 0; int error = 0; int last_error = 0; + int fflag = XFS_B_ASYNC; + + if (flags & SYNC_DELWRI) + fflag = XFS_B_DELWRI; + if (flags & SYNC_WAIT) + fflag = 0; /* synchronous overrides all */ do { struct inode *inode; @@ -122,23 +128,11 @@ xfs_sync_inodes_ag( * If we have to flush data or wait for I/O completion * we need to hold the iolock. */ - if (flags & SYNC_DELWRI) { - if (VN_DIRTY(inode)) { - if (flags & SYNC_TRYLOCK) { - if (xfs_ilock_nowait(ip, XFS_IOLOCK_SHARED)) - lock_flags |= XFS_IOLOCK_SHARED; - } else { - xfs_ilock(ip, XFS_IOLOCK_SHARED); - lock_flags |= XFS_IOLOCK_SHARED; - } - if (lock_flags & XFS_IOLOCK_SHARED) { - error = xfs_flush_pages(ip, 0, -1, - (flags & SYNC_WAIT) ? 0 - : XFS_B_ASYNC, - FI_NONE); - } - } - if (VN_CACHED(inode) && (flags & SYNC_IOWAIT)) + if ((flags & SYNC_DELWRI) && VN_DIRTY(inode)) { + xfs_ilock(ip, XFS_IOLOCK_SHARED); + lock_flags |= XFS_IOLOCK_SHARED; + error = xfs_flush_pages(ip, 0, -1, fflag, FI_NONE); + if (flags & SYNC_IOWAIT) xfs_ioend_wait(ip); } xfs_ilock(ip, XFS_ILOCK_SHARED); @@ -404,17 +398,15 @@ STATIC void xfs_syncd_queue_work( struct xfs_mount *mp, void *data, - void (*syncer)(struct xfs_mount *, void *), - struct completion *completion) + void (*syncer)(struct xfs_mount *, void *)) { - struct xfs_sync_work *work; + struct bhv_vfs_sync_work *work; - work = kmem_alloc(sizeof(struct xfs_sync_work), KM_SLEEP); + work = kmem_alloc(sizeof(struct bhv_vfs_sync_work), KM_SLEEP); INIT_LIST_HEAD(&work->w_list); work->w_syncer = syncer; work->w_data = data; work->w_mount = mp; - work->w_completion = completion; spin_lock(&mp->m_sync_lock); list_add_tail(&work->w_list, &mp->m_sync_list); spin_unlock(&mp->m_sync_lock); @@ -428,26 +420,49 @@ xfs_syncd_queue_work( * heads, looking about for more room... */ STATIC void -xfs_flush_inodes_work( +xfs_flush_inode_work( + struct xfs_mount *mp, + void *arg) +{ + struct inode *inode = arg; + filemap_flush(inode->i_mapping); + iput(inode); +} + +void +xfs_flush_inode( + xfs_inode_t *ip) +{ + struct inode *inode = VFS_I(ip); + + igrab(inode); + xfs_syncd_queue_work(ip->i_mount, inode, xfs_flush_inode_work); + delay(msecs_to_jiffies(500)); +} + +/* + * This is the "bigger hammer" version of xfs_flush_inode_work... + * (IOW, "If at first you don't succeed, use a Bigger Hammer"). + */ +STATIC void +xfs_flush_device_work( struct xfs_mount *mp, void *arg) { struct inode *inode = arg; - xfs_sync_inodes(mp, SYNC_DELWRI | SYNC_TRYLOCK); - xfs_sync_inodes(mp, SYNC_DELWRI | SYNC_TRYLOCK | SYNC_IOWAIT); + sync_blockdev(mp->m_super->s_bdev); iput(inode); } void -xfs_flush_inodes( +xfs_flush_device( xfs_inode_t *ip) { struct inode *inode = VFS_I(ip); - DECLARE_COMPLETION_ONSTACK(completion); igrab(inode); - xfs_syncd_queue_work(ip->i_mount, inode, xfs_flush_inodes_work, &completion); - wait_for_completion(&completion); + xfs_syncd_queue_work(ip->i_mount, inode, xfs_flush_device_work); + delay(msecs_to_jiffies(500)); xfs_log_force(ip->i_mount, (xfs_lsn_t)0, XFS_LOG_FORCE|XFS_LOG_SYNC); } @@ -482,7 +497,7 @@ xfssyncd( { struct xfs_mount *mp = arg; long timeleft; - xfs_sync_work_t *work, *n; + bhv_vfs_sync_work_t *work, *n; LIST_HEAD (tmp); set_freezable(); @@ -517,8 +532,6 @@ xfssyncd( list_del(&work->w_list); if (work == &mp->m_sync_work) continue; - if (work->w_completion) - complete(work->w_completion); kmem_free(work); } } @@ -532,7 +545,6 @@ xfs_syncd_init( { mp->m_sync_work.w_syncer = xfs_sync_worker; mp->m_sync_work.w_mount = mp; - mp->m_sync_work.w_completion = NULL; mp->m_sync_task = kthread_run(xfssyncd, mp, "xfssyncd"); if (IS_ERR(mp->m_sync_task)) return -PTR_ERR(mp->m_sync_task); diff --git a/trunk/fs/xfs/linux-2.6/xfs_sync.h b/trunk/fs/xfs/linux-2.6/xfs_sync.h index 308d5bf6dfbd..04f058c848ae 100644 --- a/trunk/fs/xfs/linux-2.6/xfs_sync.h +++ b/trunk/fs/xfs/linux-2.6/xfs_sync.h @@ -21,20 +21,18 @@ struct xfs_mount; struct xfs_perag; -typedef struct xfs_sync_work { +typedef struct bhv_vfs_sync_work { struct list_head w_list; struct xfs_mount *w_mount; void *w_data; /* syncer routine argument */ void (*w_syncer)(struct xfs_mount *, void *); - struct completion *w_completion; -} xfs_sync_work_t; +} bhv_vfs_sync_work_t; #define SYNC_ATTR 0x0001 /* sync attributes */ #define SYNC_DELWRI 0x0002 /* look at delayed writes */ #define SYNC_WAIT 0x0004 /* wait for i/o to complete */ #define SYNC_BDFLUSH 0x0008 /* BDFLUSH is calling -- don't block */ #define SYNC_IOWAIT 0x0010 /* wait for all I/O to complete */ -#define SYNC_TRYLOCK 0x0020 /* only try to lock inodes */ int xfs_syncd_init(struct xfs_mount *mp); void xfs_syncd_stop(struct xfs_mount *mp); @@ -45,7 +43,8 @@ int xfs_sync_fsdata(struct xfs_mount *mp, int flags); int xfs_quiesce_data(struct xfs_mount *mp); void xfs_quiesce_attr(struct xfs_mount *mp); -void xfs_flush_inodes(struct xfs_inode *ip); +void xfs_flush_inode(struct xfs_inode *ip); +void xfs_flush_device(struct xfs_inode *ip); int xfs_reclaim_inode(struct xfs_inode *ip, int locked, int sync_mode); int xfs_reclaim_inodes(struct xfs_mount *mp, int noblock, int mode); diff --git a/trunk/fs/xfs/xfs_iget.c b/trunk/fs/xfs/xfs_iget.c index 89b81eedce6a..478e587087fe 100644 --- a/trunk/fs/xfs/xfs_iget.c +++ b/trunk/fs/xfs/xfs_iget.c @@ -69,6 +69,15 @@ xfs_inode_alloc( ASSERT(!spin_is_locked(&ip->i_flags_lock)); ASSERT(completion_done(&ip->i_flush)); + /* + * initialise the VFS inode here to get failures + * out of the way early. + */ + if (!inode_init_always(mp->m_super, VFS_I(ip))) { + kmem_zone_free(xfs_inode_zone, ip); + return NULL; + } + /* initialise the xfs inode */ ip->i_ino = ino; ip->i_mount = mp; @@ -104,20 +113,6 @@ xfs_inode_alloc( #ifdef XFS_DIR2_TRACE ip->i_dir_trace = ktrace_alloc(XFS_DIR2_KTRACE_SIZE, KM_NOFS); #endif - /* - * Now initialise the VFS inode. We do this after the xfs_inode - * initialisation as internal failures will result in ->destroy_inode - * being called and that will pass down through the reclaim path and - * free the XFS inode. This path requires the XFS inode to already be - * initialised. Hence if this call fails, the xfs_inode has already - * been freed and we should not reference it at all in the error - * handling. - */ - if (!inode_init_always(mp->m_super, VFS_I(ip))) - return NULL; - - /* prevent anyone from using this yet */ - VFS_I(ip)->i_state = I_NEW|I_LOCK; return ip; } diff --git a/trunk/fs/xfs/xfs_iomap.c b/trunk/fs/xfs/xfs_iomap.c index 5aaa2d7ec155..08ce72316bfe 100644 --- a/trunk/fs/xfs/xfs_iomap.c +++ b/trunk/fs/xfs/xfs_iomap.c @@ -337,6 +337,38 @@ xfs_iomap_eof_align_last_fsb( return 0; } +STATIC int +xfs_flush_space( + xfs_inode_t *ip, + int *fsynced, + int *ioflags) +{ + switch (*fsynced) { + case 0: + if (ip->i_delayed_blks) { + xfs_iunlock(ip, XFS_ILOCK_EXCL); + xfs_flush_inode(ip); + xfs_ilock(ip, XFS_ILOCK_EXCL); + *fsynced = 1; + } else { + *ioflags |= BMAPI_SYNC; + *fsynced = 2; + } + return 0; + case 1: + *fsynced = 2; + *ioflags |= BMAPI_SYNC; + return 0; + case 2: + xfs_iunlock(ip, XFS_ILOCK_EXCL); + xfs_flush_device(ip); + xfs_ilock(ip, XFS_ILOCK_EXCL); + *fsynced = 3; + return 0; + } + return 1; +} + STATIC int xfs_cmn_err_fsblock_zero( xfs_inode_t *ip, @@ -506,9 +538,15 @@ xfs_iomap_write_direct( } /* - * If the caller is doing a write at the end of the file, then extend the - * allocation out to the file system's write iosize. We clean up any extra - * space left over when the file is closed in xfs_inactive(). + * If the caller is doing a write at the end of the file, + * then extend the allocation out to the file system's write + * iosize. We clean up any extra space left over when the + * file is closed in xfs_inactive(). + * + * For sync writes, we are flushing delayed allocate space to + * try to make additional space available for allocation near + * the filesystem full boundary - preallocation hurts in that + * situation, of course. */ STATIC int xfs_iomap_eof_want_preallocate( @@ -527,7 +565,7 @@ xfs_iomap_eof_want_preallocate( int n, error, imaps; *prealloc = 0; - if ((offset + count) <= ip->i_size) + if ((ioflag & BMAPI_SYNC) || (offset + count) <= ip->i_size) return 0; /* @@ -573,7 +611,7 @@ xfs_iomap_write_delay( xfs_extlen_t extsz; int nimaps; xfs_bmbt_irec_t imap[XFS_WRITE_IMAPS]; - int prealloc, flushed = 0; + int prealloc, fsynced = 0; int error; ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); @@ -589,12 +627,12 @@ xfs_iomap_write_delay( extsz = xfs_get_extsz_hint(ip); offset_fsb = XFS_B_TO_FSBT(mp, offset); +retry: error = xfs_iomap_eof_want_preallocate(mp, ip, offset, count, ioflag, imap, XFS_WRITE_IMAPS, &prealloc); if (error) return error; -retry: if (prealloc) { aligned_offset = XFS_WRITEIO_ALIGN(mp, (offset + count - 1)); ioalign = XFS_B_TO_FSBT(mp, aligned_offset); @@ -621,22 +659,15 @@ xfs_iomap_write_delay( /* * If bmapi returned us nothing, and if we didn't get back EDQUOT, - * then we must have run out of space - flush all other inodes with - * delalloc blocks and retry without EOF preallocation. + * then we must have run out of space - flush delalloc, and retry.. */ if (nimaps == 0) { xfs_iomap_enter_trace(XFS_IOMAP_WRITE_NOSPACE, ip, offset, count); - if (flushed) + if (xfs_flush_space(ip, &fsynced, &ioflag)) return XFS_ERROR(ENOSPC); - xfs_iunlock(ip, XFS_ILOCK_EXCL); - xfs_flush_inodes(ip); - xfs_ilock(ip, XFS_ILOCK_EXCL); - - flushed = 1; error = 0; - prealloc = 0; goto retry; } diff --git a/trunk/fs/xfs/xfs_iomap.h b/trunk/fs/xfs/xfs_iomap.h index fdcf7b82747f..a1cc1322fc0f 100644 --- a/trunk/fs/xfs/xfs_iomap.h +++ b/trunk/fs/xfs/xfs_iomap.h @@ -40,7 +40,8 @@ typedef enum { BMAPI_IGNSTATE = (1 << 4), /* ignore unwritten state on read */ BMAPI_DIRECT = (1 << 5), /* direct instead of buffered write */ BMAPI_MMAP = (1 << 6), /* allocate for mmap write */ - BMAPI_TRYLOCK = (1 << 7), /* non-blocking request */ + BMAPI_SYNC = (1 << 7), /* sync write to flush delalloc space */ + BMAPI_TRYLOCK = (1 << 8), /* non-blocking request */ } bmapi_flags_t; diff --git a/trunk/fs/xfs/xfs_log.c b/trunk/fs/xfs/xfs_log.c index 3750f04ede0b..f76c6d7cea21 100644 --- a/trunk/fs/xfs/xfs_log.c +++ b/trunk/fs/xfs/xfs_log.c @@ -562,8 +562,9 @@ xfs_log_mount( } mp->m_log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks); - if (IS_ERR(mp->m_log)) { - error = -PTR_ERR(mp->m_log); + if (!mp->m_log) { + cmn_err(CE_WARN, "XFS: Log allocation failed: No memory!"); + error = ENOMEM; goto out; } @@ -1179,13 +1180,10 @@ xlog_alloc_log(xfs_mount_t *mp, xfs_buf_t *bp; int i; int iclogsize; - int error = ENOMEM; log = kmem_zalloc(sizeof(xlog_t), KM_MAYFAIL); - if (!log) { - xlog_warn("XFS: Log allocation failed: No memory!"); - goto out; - } + if (!log) + return NULL; log->l_mp = mp; log->l_targ = log_target; @@ -1203,35 +1201,19 @@ xlog_alloc_log(xfs_mount_t *mp, log->l_grant_reserve_cycle = 1; log->l_grant_write_cycle = 1; - error = EFSCORRUPTED; if (xfs_sb_version_hassector(&mp->m_sb)) { log->l_sectbb_log = mp->m_sb.sb_logsectlog - BBSHIFT; - if (log->l_sectbb_log < 0 || - log->l_sectbb_log > mp->m_sectbb_log) { - xlog_warn("XFS: Log sector size (0x%x) out of range.", - log->l_sectbb_log); - goto out_free_log; - } - + ASSERT(log->l_sectbb_log <= mp->m_sectbb_log); /* for larger sector sizes, must have v2 or external log */ - if (log->l_sectbb_log != 0 && - (log->l_logBBstart != 0 && - !xfs_sb_version_haslogv2(&mp->m_sb))) { - xlog_warn("XFS: log sector size (0x%x) invalid " - "for configuration.", log->l_sectbb_log); - goto out_free_log; - } - if (mp->m_sb.sb_logsectlog < BBSHIFT) { - xlog_warn("XFS: Log sector log (0x%x) too small.", - mp->m_sb.sb_logsectlog); - goto out_free_log; - } + ASSERT(log->l_sectbb_log == 0 || + log->l_logBBstart == 0 || + xfs_sb_version_haslogv2(&mp->m_sb)); + ASSERT(mp->m_sb.sb_logsectlog >= BBSHIFT); } log->l_sectbb_mask = (1 << log->l_sectbb_log) - 1; xlog_get_iclog_buffer_size(mp, log); - error = ENOMEM; bp = xfs_buf_get_empty(log->l_iclog_size, mp->m_logdev_targp); if (!bp) goto out_free_log; @@ -1331,8 +1313,7 @@ xlog_alloc_log(xfs_mount_t *mp, xfs_buf_free(log->l_xbuf); out_free_log: kmem_free(log); -out: - return ERR_PTR(-error); + return NULL; } /* xlog_alloc_log */ @@ -2560,19 +2541,18 @@ xlog_grant_log_space(xlog_t *log, xlog_ins_ticketq(&log->l_reserve_headq, tic); xlog_trace_loggrant(log, tic, "xlog_grant_log_space: sleep 2"); - spin_unlock(&log->l_grant_lock); - xlog_grant_push_ail(log->l_mp, need_bytes); - spin_lock(&log->l_grant_lock); - XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_wait, PINOD|PLTWAIT, &log->l_grant_lock, s); - spin_lock(&log->l_grant_lock); - if (XLOG_FORCED_SHUTDOWN(log)) + if (XLOG_FORCED_SHUTDOWN(log)) { + spin_lock(&log->l_grant_lock); goto error_return; + } xlog_trace_loggrant(log, tic, "xlog_grant_log_space: wake 2"); + xlog_grant_push_ail(log->l_mp, need_bytes); + spin_lock(&log->l_grant_lock); goto redo; } else if (tic->t_flags & XLOG_TIC_IN_Q) xlog_del_ticketq(&log->l_reserve_headq, tic); @@ -2651,7 +2631,7 @@ xlog_regrant_write_log_space(xlog_t *log, * for more free space, otherwise try to get some space for * this transaction. */ - need_bytes = tic->t_unit_res; + if ((ntic = log->l_write_headq)) { free_bytes = xlog_space_left(log, log->l_grant_write_cycle, log->l_grant_write_bytes); @@ -2671,25 +2651,26 @@ xlog_regrant_write_log_space(xlog_t *log, xlog_trace_loggrant(log, tic, "xlog_regrant_write_log_space: sleep 1"); - spin_unlock(&log->l_grant_lock); - xlog_grant_push_ail(log->l_mp, need_bytes); - spin_lock(&log->l_grant_lock); - XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_wait, PINOD|PLTWAIT, &log->l_grant_lock, s); /* If we're shutting down, this tic is already * off the queue */ - spin_lock(&log->l_grant_lock); - if (XLOG_FORCED_SHUTDOWN(log)) + if (XLOG_FORCED_SHUTDOWN(log)) { + spin_lock(&log->l_grant_lock); goto error_return; + } xlog_trace_loggrant(log, tic, "xlog_regrant_write_log_space: wake 1"); + xlog_grant_push_ail(log->l_mp, tic->t_unit_res); + spin_lock(&log->l_grant_lock); } } + need_bytes = tic->t_unit_res; + redo: if (XLOG_FORCED_SHUTDOWN(log)) goto error_return; @@ -2699,20 +2680,19 @@ xlog_regrant_write_log_space(xlog_t *log, if (free_bytes < need_bytes) { if ((tic->t_flags & XLOG_TIC_IN_Q) == 0) xlog_ins_ticketq(&log->l_write_headq, tic); - spin_unlock(&log->l_grant_lock); - xlog_grant_push_ail(log->l_mp, need_bytes); - spin_lock(&log->l_grant_lock); - XFS_STATS_INC(xs_sleep_logspace); sv_wait(&tic->t_wait, PINOD|PLTWAIT, &log->l_grant_lock, s); /* If we're shutting down, this tic is already off the queue */ - spin_lock(&log->l_grant_lock); - if (XLOG_FORCED_SHUTDOWN(log)) + if (XLOG_FORCED_SHUTDOWN(log)) { + spin_lock(&log->l_grant_lock); goto error_return; + } xlog_trace_loggrant(log, tic, "xlog_regrant_write_log_space: wake 2"); + xlog_grant_push_ail(log->l_mp, need_bytes); + spin_lock(&log->l_grant_lock); goto redo; } else if (tic->t_flags & XLOG_TIC_IN_Q) xlog_del_ticketq(&log->l_write_headq, tic); diff --git a/trunk/fs/xfs/xfs_mount.h b/trunk/fs/xfs/xfs_mount.h index d6a64392f983..7af44adffc8f 100644 --- a/trunk/fs/xfs/xfs_mount.h +++ b/trunk/fs/xfs/xfs_mount.h @@ -313,7 +313,7 @@ typedef struct xfs_mount { #endif struct xfs_mru_cache *m_filestream; /* per-mount filestream data */ struct task_struct *m_sync_task; /* generalised sync thread */ - xfs_sync_work_t m_sync_work; /* work item for VFS_SYNC */ + bhv_vfs_sync_work_t m_sync_work; /* work item for VFS_SYNC */ struct list_head m_sync_list; /* sync thread work item list */ spinlock_t m_sync_lock; /* work item list lock */ int m_sync_seq; /* sync thread generation no. */ diff --git a/trunk/fs/xfs/xfs_vnodeops.c b/trunk/fs/xfs/xfs_vnodeops.c index 19cf90a9c762..7394c7af5de5 100644 --- a/trunk/fs/xfs/xfs_vnodeops.c +++ b/trunk/fs/xfs/xfs_vnodeops.c @@ -1457,13 +1457,6 @@ xfs_create( error = xfs_trans_reserve(tp, resblks, log_res, 0, XFS_TRANS_PERM_LOG_RES, log_count); if (error == ENOSPC) { - /* flush outstanding delalloc blocks and retry */ - xfs_flush_inodes(dp); - error = xfs_trans_reserve(tp, resblks, XFS_CREATE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_CREATE_LOG_COUNT); - } - if (error == ENOSPC) { - /* No space at all so try a "no-allocation" reservation */ resblks = 0; error = xfs_trans_reserve(tp, 0, log_res, 0, XFS_TRANS_PERM_LOG_RES, log_count); diff --git a/trunk/arch/frv/include/asm/Kbuild b/trunk/include/asm-frv/Kbuild similarity index 100% rename from trunk/arch/frv/include/asm/Kbuild rename to trunk/include/asm-frv/Kbuild diff --git a/trunk/arch/frv/include/asm/atomic.h b/trunk/include/asm-frv/atomic.h similarity index 100% rename from trunk/arch/frv/include/asm/atomic.h rename to trunk/include/asm-frv/atomic.h diff --git a/trunk/arch/frv/include/asm/auxvec.h b/trunk/include/asm-frv/auxvec.h similarity index 100% rename from trunk/arch/frv/include/asm/auxvec.h rename to trunk/include/asm-frv/auxvec.h diff --git a/trunk/arch/frv/include/asm/ax88796.h b/trunk/include/asm-frv/ax88796.h similarity index 100% rename from trunk/arch/frv/include/asm/ax88796.h rename to trunk/include/asm-frv/ax88796.h diff --git a/trunk/arch/frv/include/asm/bitops.h b/trunk/include/asm-frv/bitops.h similarity index 100% rename from trunk/arch/frv/include/asm/bitops.h rename to trunk/include/asm-frv/bitops.h diff --git a/trunk/arch/frv/include/asm/bug.h b/trunk/include/asm-frv/bug.h similarity index 100% rename from trunk/arch/frv/include/asm/bug.h rename to trunk/include/asm-frv/bug.h diff --git a/trunk/arch/frv/include/asm/bugs.h b/trunk/include/asm-frv/bugs.h similarity index 100% rename from trunk/arch/frv/include/asm/bugs.h rename to trunk/include/asm-frv/bugs.h diff --git a/trunk/arch/frv/include/asm/busctl-regs.h b/trunk/include/asm-frv/busctl-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/busctl-regs.h rename to trunk/include/asm-frv/busctl-regs.h diff --git a/trunk/arch/frv/include/asm/byteorder.h b/trunk/include/asm-frv/byteorder.h similarity index 100% rename from trunk/arch/frv/include/asm/byteorder.h rename to trunk/include/asm-frv/byteorder.h diff --git a/trunk/arch/frv/include/asm/cache.h b/trunk/include/asm-frv/cache.h similarity index 100% rename from trunk/arch/frv/include/asm/cache.h rename to trunk/include/asm-frv/cache.h diff --git a/trunk/arch/frv/include/asm/cacheflush.h b/trunk/include/asm-frv/cacheflush.h similarity index 100% rename from trunk/arch/frv/include/asm/cacheflush.h rename to trunk/include/asm-frv/cacheflush.h diff --git a/trunk/arch/frv/include/asm/checksum.h b/trunk/include/asm-frv/checksum.h similarity index 100% rename from trunk/arch/frv/include/asm/checksum.h rename to trunk/include/asm-frv/checksum.h diff --git a/trunk/arch/frv/include/asm/cpu-irqs.h b/trunk/include/asm-frv/cpu-irqs.h similarity index 100% rename from trunk/arch/frv/include/asm/cpu-irqs.h rename to trunk/include/asm-frv/cpu-irqs.h diff --git a/trunk/arch/frv/include/asm/cpumask.h b/trunk/include/asm-frv/cpumask.h similarity index 100% rename from trunk/arch/frv/include/asm/cpumask.h rename to trunk/include/asm-frv/cpumask.h diff --git a/trunk/arch/frv/include/asm/cputime.h b/trunk/include/asm-frv/cputime.h similarity index 100% rename from trunk/arch/frv/include/asm/cputime.h rename to trunk/include/asm-frv/cputime.h diff --git a/trunk/arch/frv/include/asm/current.h b/trunk/include/asm-frv/current.h similarity index 100% rename from trunk/arch/frv/include/asm/current.h rename to trunk/include/asm-frv/current.h diff --git a/trunk/arch/frv/include/asm/delay.h b/trunk/include/asm-frv/delay.h similarity index 100% rename from trunk/arch/frv/include/asm/delay.h rename to trunk/include/asm-frv/delay.h diff --git a/trunk/arch/frv/include/asm/device.h b/trunk/include/asm-frv/device.h similarity index 100% rename from trunk/arch/frv/include/asm/device.h rename to trunk/include/asm-frv/device.h diff --git a/trunk/arch/frv/include/asm/div64.h b/trunk/include/asm-frv/div64.h similarity index 100% rename from trunk/arch/frv/include/asm/div64.h rename to trunk/include/asm-frv/div64.h diff --git a/trunk/arch/frv/include/asm/dm9000.h b/trunk/include/asm-frv/dm9000.h similarity index 100% rename from trunk/arch/frv/include/asm/dm9000.h rename to trunk/include/asm-frv/dm9000.h diff --git a/trunk/arch/frv/include/asm/dma-mapping.h b/trunk/include/asm-frv/dma-mapping.h similarity index 100% rename from trunk/arch/frv/include/asm/dma-mapping.h rename to trunk/include/asm-frv/dma-mapping.h diff --git a/trunk/arch/frv/include/asm/dma.h b/trunk/include/asm-frv/dma.h similarity index 100% rename from trunk/arch/frv/include/asm/dma.h rename to trunk/include/asm-frv/dma.h diff --git a/trunk/arch/frv/include/asm/elf.h b/trunk/include/asm-frv/elf.h similarity index 100% rename from trunk/arch/frv/include/asm/elf.h rename to trunk/include/asm-frv/elf.h diff --git a/trunk/arch/frv/include/asm/emergency-restart.h b/trunk/include/asm-frv/emergency-restart.h similarity index 100% rename from trunk/arch/frv/include/asm/emergency-restart.h rename to trunk/include/asm-frv/emergency-restart.h diff --git a/trunk/arch/frv/include/asm/errno.h b/trunk/include/asm-frv/errno.h similarity index 100% rename from trunk/arch/frv/include/asm/errno.h rename to trunk/include/asm-frv/errno.h diff --git a/trunk/arch/frv/include/asm/fb.h b/trunk/include/asm-frv/fb.h similarity index 100% rename from trunk/arch/frv/include/asm/fb.h rename to trunk/include/asm-frv/fb.h diff --git a/trunk/arch/frv/include/asm/fcntl.h b/trunk/include/asm-frv/fcntl.h similarity index 100% rename from trunk/arch/frv/include/asm/fcntl.h rename to trunk/include/asm-frv/fcntl.h diff --git a/trunk/arch/frv/include/asm/fpu.h b/trunk/include/asm-frv/fpu.h similarity index 100% rename from trunk/arch/frv/include/asm/fpu.h rename to trunk/include/asm-frv/fpu.h diff --git a/trunk/arch/frv/include/asm/ftrace.h b/trunk/include/asm-frv/ftrace.h similarity index 100% rename from trunk/arch/frv/include/asm/ftrace.h rename to trunk/include/asm-frv/ftrace.h diff --git a/trunk/arch/frv/include/asm/futex.h b/trunk/include/asm-frv/futex.h similarity index 100% rename from trunk/arch/frv/include/asm/futex.h rename to trunk/include/asm-frv/futex.h diff --git a/trunk/arch/frv/include/asm/gdb-stub.h b/trunk/include/asm-frv/gdb-stub.h similarity index 100% rename from trunk/arch/frv/include/asm/gdb-stub.h rename to trunk/include/asm-frv/gdb-stub.h diff --git a/trunk/arch/frv/include/asm/gpio-regs.h b/trunk/include/asm-frv/gpio-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/gpio-regs.h rename to trunk/include/asm-frv/gpio-regs.h diff --git a/trunk/arch/frv/include/asm/hardirq.h b/trunk/include/asm-frv/hardirq.h similarity index 100% rename from trunk/arch/frv/include/asm/hardirq.h rename to trunk/include/asm-frv/hardirq.h diff --git a/trunk/arch/frv/include/asm/highmem.h b/trunk/include/asm-frv/highmem.h similarity index 100% rename from trunk/arch/frv/include/asm/highmem.h rename to trunk/include/asm-frv/highmem.h diff --git a/trunk/arch/frv/include/asm/hw_irq.h b/trunk/include/asm-frv/hw_irq.h similarity index 100% rename from trunk/arch/frv/include/asm/hw_irq.h rename to trunk/include/asm-frv/hw_irq.h diff --git a/trunk/arch/frv/include/asm/init.h b/trunk/include/asm-frv/init.h similarity index 100% rename from trunk/arch/frv/include/asm/init.h rename to trunk/include/asm-frv/init.h diff --git a/trunk/arch/frv/include/asm/io.h b/trunk/include/asm-frv/io.h similarity index 100% rename from trunk/arch/frv/include/asm/io.h rename to trunk/include/asm-frv/io.h diff --git a/trunk/arch/frv/include/asm/ioctl.h b/trunk/include/asm-frv/ioctl.h similarity index 100% rename from trunk/arch/frv/include/asm/ioctl.h rename to trunk/include/asm-frv/ioctl.h diff --git a/trunk/arch/frv/include/asm/ioctls.h b/trunk/include/asm-frv/ioctls.h similarity index 100% rename from trunk/arch/frv/include/asm/ioctls.h rename to trunk/include/asm-frv/ioctls.h diff --git a/trunk/arch/frv/include/asm/ipcbuf.h b/trunk/include/asm-frv/ipcbuf.h similarity index 100% rename from trunk/arch/frv/include/asm/ipcbuf.h rename to trunk/include/asm-frv/ipcbuf.h diff --git a/trunk/arch/frv/include/asm/irc-regs.h b/trunk/include/asm-frv/irc-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/irc-regs.h rename to trunk/include/asm-frv/irc-regs.h diff --git a/trunk/arch/frv/include/asm/irq.h b/trunk/include/asm-frv/irq.h similarity index 100% rename from trunk/arch/frv/include/asm/irq.h rename to trunk/include/asm-frv/irq.h diff --git a/trunk/arch/frv/include/asm/irq_regs.h b/trunk/include/asm-frv/irq_regs.h similarity index 100% rename from trunk/arch/frv/include/asm/irq_regs.h rename to trunk/include/asm-frv/irq_regs.h diff --git a/trunk/arch/frv/include/asm/kdebug.h b/trunk/include/asm-frv/kdebug.h similarity index 100% rename from trunk/arch/frv/include/asm/kdebug.h rename to trunk/include/asm-frv/kdebug.h diff --git a/trunk/arch/frv/include/asm/kmap_types.h b/trunk/include/asm-frv/kmap_types.h similarity index 100% rename from trunk/arch/frv/include/asm/kmap_types.h rename to trunk/include/asm-frv/kmap_types.h diff --git a/trunk/arch/frv/include/asm/linkage.h b/trunk/include/asm-frv/linkage.h similarity index 100% rename from trunk/arch/frv/include/asm/linkage.h rename to trunk/include/asm-frv/linkage.h diff --git a/trunk/arch/frv/include/asm/local.h b/trunk/include/asm-frv/local.h similarity index 100% rename from trunk/arch/frv/include/asm/local.h rename to trunk/include/asm-frv/local.h diff --git a/trunk/arch/frv/include/asm/math-emu.h b/trunk/include/asm-frv/math-emu.h similarity index 100% rename from trunk/arch/frv/include/asm/math-emu.h rename to trunk/include/asm-frv/math-emu.h diff --git a/trunk/arch/frv/include/asm/mb-regs.h b/trunk/include/asm-frv/mb-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/mb-regs.h rename to trunk/include/asm-frv/mb-regs.h diff --git a/trunk/arch/frv/include/asm/mb86943a.h b/trunk/include/asm-frv/mb86943a.h similarity index 100% rename from trunk/arch/frv/include/asm/mb86943a.h rename to trunk/include/asm-frv/mb86943a.h diff --git a/trunk/arch/frv/include/asm/mb93091-fpga-irqs.h b/trunk/include/asm-frv/mb93091-fpga-irqs.h similarity index 100% rename from trunk/arch/frv/include/asm/mb93091-fpga-irqs.h rename to trunk/include/asm-frv/mb93091-fpga-irqs.h diff --git a/trunk/arch/frv/include/asm/mb93093-fpga-irqs.h b/trunk/include/asm-frv/mb93093-fpga-irqs.h similarity index 100% rename from trunk/arch/frv/include/asm/mb93093-fpga-irqs.h rename to trunk/include/asm-frv/mb93093-fpga-irqs.h diff --git a/trunk/arch/frv/include/asm/mb93493-irqs.h b/trunk/include/asm-frv/mb93493-irqs.h similarity index 100% rename from trunk/arch/frv/include/asm/mb93493-irqs.h rename to trunk/include/asm-frv/mb93493-irqs.h diff --git a/trunk/arch/frv/include/asm/mb93493-regs.h b/trunk/include/asm-frv/mb93493-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/mb93493-regs.h rename to trunk/include/asm-frv/mb93493-regs.h diff --git a/trunk/arch/frv/include/asm/mc146818rtc.h b/trunk/include/asm-frv/mc146818rtc.h similarity index 100% rename from trunk/arch/frv/include/asm/mc146818rtc.h rename to trunk/include/asm-frv/mc146818rtc.h diff --git a/trunk/arch/frv/include/asm/mem-layout.h b/trunk/include/asm-frv/mem-layout.h similarity index 100% rename from trunk/arch/frv/include/asm/mem-layout.h rename to trunk/include/asm-frv/mem-layout.h diff --git a/trunk/arch/frv/include/asm/mman.h b/trunk/include/asm-frv/mman.h similarity index 100% rename from trunk/arch/frv/include/asm/mman.h rename to trunk/include/asm-frv/mman.h diff --git a/trunk/arch/frv/include/asm/mmu.h b/trunk/include/asm-frv/mmu.h similarity index 100% rename from trunk/arch/frv/include/asm/mmu.h rename to trunk/include/asm-frv/mmu.h diff --git a/trunk/arch/frv/include/asm/mmu_context.h b/trunk/include/asm-frv/mmu_context.h similarity index 100% rename from trunk/arch/frv/include/asm/mmu_context.h rename to trunk/include/asm-frv/mmu_context.h diff --git a/trunk/arch/frv/include/asm/module.h b/trunk/include/asm-frv/module.h similarity index 100% rename from trunk/arch/frv/include/asm/module.h rename to trunk/include/asm-frv/module.h diff --git a/trunk/arch/frv/include/asm/msgbuf.h b/trunk/include/asm-frv/msgbuf.h similarity index 100% rename from trunk/arch/frv/include/asm/msgbuf.h rename to trunk/include/asm-frv/msgbuf.h diff --git a/trunk/arch/frv/include/asm/mutex.h b/trunk/include/asm-frv/mutex.h similarity index 100% rename from trunk/arch/frv/include/asm/mutex.h rename to trunk/include/asm-frv/mutex.h diff --git a/trunk/arch/frv/include/asm/page.h b/trunk/include/asm-frv/page.h similarity index 100% rename from trunk/arch/frv/include/asm/page.h rename to trunk/include/asm-frv/page.h diff --git a/trunk/arch/frv/include/asm/param.h b/trunk/include/asm-frv/param.h similarity index 100% rename from trunk/arch/frv/include/asm/param.h rename to trunk/include/asm-frv/param.h diff --git a/trunk/arch/frv/include/asm/pci.h b/trunk/include/asm-frv/pci.h similarity index 100% rename from trunk/arch/frv/include/asm/pci.h rename to trunk/include/asm-frv/pci.h diff --git a/trunk/arch/frv/include/asm/percpu.h b/trunk/include/asm-frv/percpu.h similarity index 100% rename from trunk/arch/frv/include/asm/percpu.h rename to trunk/include/asm-frv/percpu.h diff --git a/trunk/arch/frv/include/asm/pgalloc.h b/trunk/include/asm-frv/pgalloc.h similarity index 100% rename from trunk/arch/frv/include/asm/pgalloc.h rename to trunk/include/asm-frv/pgalloc.h diff --git a/trunk/arch/frv/include/asm/pgtable.h b/trunk/include/asm-frv/pgtable.h similarity index 98% rename from trunk/arch/frv/include/asm/pgtable.h rename to trunk/include/asm-frv/pgtable.h index 33233011b1c1..e16fdb1f4f4f 100644 --- a/trunk/arch/frv/include/asm/pgtable.h +++ b/trunk/include/asm-frv/pgtable.h @@ -71,8 +71,10 @@ static inline int pte_file(pte_t pte) { return 0; } #define swapper_pg_dir ((pgd_t *) NULL) #define pgtable_cache_init() do {} while (0) - -#include +#define arch_enter_lazy_mmu_mode() do {} while (0) +#define arch_leave_lazy_mmu_mode() do {} while (0) +#define arch_enter_lazy_cpu_mode() do {} while (0) +#define arch_leave_lazy_cpu_mode() do {} while (0) #else /* !CONFIG_MMU */ /*****************************************************************************/ diff --git a/trunk/arch/frv/include/asm/poll.h b/trunk/include/asm-frv/poll.h similarity index 100% rename from trunk/arch/frv/include/asm/poll.h rename to trunk/include/asm-frv/poll.h diff --git a/trunk/arch/frv/include/asm/posix_types.h b/trunk/include/asm-frv/posix_types.h similarity index 100% rename from trunk/arch/frv/include/asm/posix_types.h rename to trunk/include/asm-frv/posix_types.h diff --git a/trunk/arch/frv/include/asm/processor.h b/trunk/include/asm-frv/processor.h similarity index 100% rename from trunk/arch/frv/include/asm/processor.h rename to trunk/include/asm-frv/processor.h diff --git a/trunk/arch/frv/include/asm/ptrace.h b/trunk/include/asm-frv/ptrace.h similarity index 100% rename from trunk/arch/frv/include/asm/ptrace.h rename to trunk/include/asm-frv/ptrace.h diff --git a/trunk/arch/frv/include/asm/registers.h b/trunk/include/asm-frv/registers.h similarity index 100% rename from trunk/arch/frv/include/asm/registers.h rename to trunk/include/asm-frv/registers.h diff --git a/trunk/arch/frv/include/asm/resource.h b/trunk/include/asm-frv/resource.h similarity index 100% rename from trunk/arch/frv/include/asm/resource.h rename to trunk/include/asm-frv/resource.h diff --git a/trunk/arch/frv/include/asm/scatterlist.h b/trunk/include/asm-frv/scatterlist.h similarity index 100% rename from trunk/arch/frv/include/asm/scatterlist.h rename to trunk/include/asm-frv/scatterlist.h diff --git a/trunk/arch/frv/include/asm/sections.h b/trunk/include/asm-frv/sections.h similarity index 100% rename from trunk/arch/frv/include/asm/sections.h rename to trunk/include/asm-frv/sections.h diff --git a/trunk/arch/frv/include/asm/segment.h b/trunk/include/asm-frv/segment.h similarity index 100% rename from trunk/arch/frv/include/asm/segment.h rename to trunk/include/asm-frv/segment.h diff --git a/trunk/arch/frv/include/asm/sembuf.h b/trunk/include/asm-frv/sembuf.h similarity index 100% rename from trunk/arch/frv/include/asm/sembuf.h rename to trunk/include/asm-frv/sembuf.h diff --git a/trunk/arch/frv/include/asm/serial-regs.h b/trunk/include/asm-frv/serial-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/serial-regs.h rename to trunk/include/asm-frv/serial-regs.h diff --git a/trunk/arch/frv/include/asm/serial.h b/trunk/include/asm-frv/serial.h similarity index 100% rename from trunk/arch/frv/include/asm/serial.h rename to trunk/include/asm-frv/serial.h diff --git a/trunk/arch/frv/include/asm/setup.h b/trunk/include/asm-frv/setup.h similarity index 100% rename from trunk/arch/frv/include/asm/setup.h rename to trunk/include/asm-frv/setup.h diff --git a/trunk/arch/frv/include/asm/shmbuf.h b/trunk/include/asm-frv/shmbuf.h similarity index 100% rename from trunk/arch/frv/include/asm/shmbuf.h rename to trunk/include/asm-frv/shmbuf.h diff --git a/trunk/arch/frv/include/asm/shmparam.h b/trunk/include/asm-frv/shmparam.h similarity index 100% rename from trunk/arch/frv/include/asm/shmparam.h rename to trunk/include/asm-frv/shmparam.h diff --git a/trunk/arch/frv/include/asm/sigcontext.h b/trunk/include/asm-frv/sigcontext.h similarity index 100% rename from trunk/arch/frv/include/asm/sigcontext.h rename to trunk/include/asm-frv/sigcontext.h diff --git a/trunk/arch/frv/include/asm/siginfo.h b/trunk/include/asm-frv/siginfo.h similarity index 100% rename from trunk/arch/frv/include/asm/siginfo.h rename to trunk/include/asm-frv/siginfo.h diff --git a/trunk/arch/frv/include/asm/signal.h b/trunk/include/asm-frv/signal.h similarity index 100% rename from trunk/arch/frv/include/asm/signal.h rename to trunk/include/asm-frv/signal.h diff --git a/trunk/arch/frv/include/asm/smp.h b/trunk/include/asm-frv/smp.h similarity index 100% rename from trunk/arch/frv/include/asm/smp.h rename to trunk/include/asm-frv/smp.h diff --git a/trunk/arch/frv/include/asm/socket.h b/trunk/include/asm-frv/socket.h similarity index 100% rename from trunk/arch/frv/include/asm/socket.h rename to trunk/include/asm-frv/socket.h diff --git a/trunk/arch/frv/include/asm/sockios.h b/trunk/include/asm-frv/sockios.h similarity index 100% rename from trunk/arch/frv/include/asm/sockios.h rename to trunk/include/asm-frv/sockios.h diff --git a/trunk/arch/frv/include/asm/spinlock.h b/trunk/include/asm-frv/spinlock.h similarity index 100% rename from trunk/arch/frv/include/asm/spinlock.h rename to trunk/include/asm-frv/spinlock.h diff --git a/trunk/arch/frv/include/asm/spr-regs.h b/trunk/include/asm-frv/spr-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/spr-regs.h rename to trunk/include/asm-frv/spr-regs.h diff --git a/trunk/arch/frv/include/asm/stat.h b/trunk/include/asm-frv/stat.h similarity index 100% rename from trunk/arch/frv/include/asm/stat.h rename to trunk/include/asm-frv/stat.h diff --git a/trunk/arch/frv/include/asm/statfs.h b/trunk/include/asm-frv/statfs.h similarity index 100% rename from trunk/arch/frv/include/asm/statfs.h rename to trunk/include/asm-frv/statfs.h diff --git a/trunk/arch/frv/include/asm/string.h b/trunk/include/asm-frv/string.h similarity index 100% rename from trunk/arch/frv/include/asm/string.h rename to trunk/include/asm-frv/string.h diff --git a/trunk/arch/frv/include/asm/suspend.h b/trunk/include/asm-frv/suspend.h similarity index 100% rename from trunk/arch/frv/include/asm/suspend.h rename to trunk/include/asm-frv/suspend.h diff --git a/trunk/arch/frv/include/asm/swab.h b/trunk/include/asm-frv/swab.h similarity index 100% rename from trunk/arch/frv/include/asm/swab.h rename to trunk/include/asm-frv/swab.h diff --git a/trunk/arch/frv/include/asm/system.h b/trunk/include/asm-frv/system.h similarity index 100% rename from trunk/arch/frv/include/asm/system.h rename to trunk/include/asm-frv/system.h diff --git a/trunk/arch/frv/include/asm/termbits.h b/trunk/include/asm-frv/termbits.h similarity index 100% rename from trunk/arch/frv/include/asm/termbits.h rename to trunk/include/asm-frv/termbits.h diff --git a/trunk/arch/frv/include/asm/termios.h b/trunk/include/asm-frv/termios.h similarity index 100% rename from trunk/arch/frv/include/asm/termios.h rename to trunk/include/asm-frv/termios.h diff --git a/trunk/arch/frv/include/asm/thread_info.h b/trunk/include/asm-frv/thread_info.h similarity index 97% rename from trunk/arch/frv/include/asm/thread_info.h rename to trunk/include/asm-frv/thread_info.h index bb53ab753ffb..b7ac6bf2844c 100644 --- a/trunk/arch/frv/include/asm/thread_info.h +++ b/trunk/include/asm-frv/thread_info.h @@ -38,9 +38,9 @@ struct thread_info { int preempt_count; /* 0 => preemptable, <0 => BUG */ mm_segment_t addr_limit; /* thread address space: - * 0-0xBFFFFFFF for user-thead - * 0-0xFFFFFFFF for kernel-thread - */ + 0-0xBFFFFFFF for user-thead + 0-0xFFFFFFFF for kernel-thread + */ struct restart_block restart_block; __u8 supervisor_stack[0]; diff --git a/trunk/arch/frv/include/asm/timer-regs.h b/trunk/include/asm-frv/timer-regs.h similarity index 100% rename from trunk/arch/frv/include/asm/timer-regs.h rename to trunk/include/asm-frv/timer-regs.h diff --git a/trunk/arch/frv/include/asm/timex.h b/trunk/include/asm-frv/timex.h similarity index 100% rename from trunk/arch/frv/include/asm/timex.h rename to trunk/include/asm-frv/timex.h diff --git a/trunk/arch/frv/include/asm/tlb.h b/trunk/include/asm-frv/tlb.h similarity index 100% rename from trunk/arch/frv/include/asm/tlb.h rename to trunk/include/asm-frv/tlb.h diff --git a/trunk/arch/frv/include/asm/tlbflush.h b/trunk/include/asm-frv/tlbflush.h similarity index 100% rename from trunk/arch/frv/include/asm/tlbflush.h rename to trunk/include/asm-frv/tlbflush.h diff --git a/trunk/arch/frv/include/asm/topology.h b/trunk/include/asm-frv/topology.h similarity index 100% rename from trunk/arch/frv/include/asm/topology.h rename to trunk/include/asm-frv/topology.h diff --git a/trunk/arch/frv/include/asm/types.h b/trunk/include/asm-frv/types.h similarity index 100% rename from trunk/arch/frv/include/asm/types.h rename to trunk/include/asm-frv/types.h diff --git a/trunk/arch/frv/include/asm/uaccess.h b/trunk/include/asm-frv/uaccess.h similarity index 100% rename from trunk/arch/frv/include/asm/uaccess.h rename to trunk/include/asm-frv/uaccess.h diff --git a/trunk/arch/frv/include/asm/ucontext.h b/trunk/include/asm-frv/ucontext.h similarity index 100% rename from trunk/arch/frv/include/asm/ucontext.h rename to trunk/include/asm-frv/ucontext.h diff --git a/trunk/arch/frv/include/asm/unaligned.h b/trunk/include/asm-frv/unaligned.h similarity index 100% rename from trunk/arch/frv/include/asm/unaligned.h rename to trunk/include/asm-frv/unaligned.h diff --git a/trunk/arch/frv/include/asm/unistd.h b/trunk/include/asm-frv/unistd.h similarity index 100% rename from trunk/arch/frv/include/asm/unistd.h rename to trunk/include/asm-frv/unistd.h diff --git a/trunk/arch/frv/include/asm/user.h b/trunk/include/asm-frv/user.h similarity index 100% rename from trunk/arch/frv/include/asm/user.h rename to trunk/include/asm-frv/user.h diff --git a/trunk/arch/frv/include/asm/vga.h b/trunk/include/asm-frv/vga.h similarity index 100% rename from trunk/arch/frv/include/asm/vga.h rename to trunk/include/asm-frv/vga.h diff --git a/trunk/arch/frv/include/asm/virtconvert.h b/trunk/include/asm-frv/virtconvert.h similarity index 100% rename from trunk/arch/frv/include/asm/virtconvert.h rename to trunk/include/asm-frv/virtconvert.h diff --git a/trunk/arch/frv/include/asm/xor.h b/trunk/include/asm-frv/xor.h similarity index 100% rename from trunk/arch/frv/include/asm/xor.h rename to trunk/include/asm-frv/xor.h diff --git a/trunk/include/asm-generic/percpu.h b/trunk/include/asm-generic/percpu.h index b0e63c672ebd..00f45ff081a6 100644 --- a/trunk/include/asm-generic/percpu.h +++ b/trunk/include/asm-generic/percpu.h @@ -80,4 +80,56 @@ extern void setup_per_cpu_areas(void); #define DECLARE_PER_CPU(type, name) extern PER_CPU_ATTRIBUTES \ __typeof__(type) per_cpu_var(name) +/* + * Optional methods for optimized non-lvalue per-cpu variable access. + * + * @var can be a percpu variable or a field of it and its size should + * equal char, int or long. percpu_read() evaluates to a lvalue and + * all others to void. + * + * These operations are guaranteed to be atomic w.r.t. preemption. + * The generic versions use plain get/put_cpu_var(). Archs are + * encouraged to implement single-instruction alternatives which don't + * require preemption protection. + */ +#ifndef percpu_read +# define percpu_read(var) \ + ({ \ + typeof(per_cpu_var(var)) __tmp_var__; \ + __tmp_var__ = get_cpu_var(var); \ + put_cpu_var(var); \ + __tmp_var__; \ + }) +#endif + +#define __percpu_generic_to_op(var, val, op) \ +do { \ + get_cpu_var(var) op val; \ + put_cpu_var(var); \ +} while (0) + +#ifndef percpu_write +# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =) +#endif + +#ifndef percpu_add +# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=) +#endif + +#ifndef percpu_sub +# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=) +#endif + +#ifndef percpu_and +# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=) +#endif + +#ifndef percpu_or +# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=) +#endif + +#ifndef percpu_xor +# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=) +#endif + #endif /* _ASM_GENERIC_PERCPU_H_ */ diff --git a/trunk/include/asm-generic/siginfo.h b/trunk/include/asm-generic/siginfo.h index c840719a8c59..35752dadd6df 100644 --- a/trunk/include/asm-generic/siginfo.h +++ b/trunk/include/asm-generic/siginfo.h @@ -201,7 +201,7 @@ typedef struct siginfo { #define TRAP_TRACE (__SI_FAULT|2) /* process trace trap */ #define TRAP_BRANCH (__SI_FAULT|3) /* process taken branch trap */ #define TRAP_HWBKPT (__SI_FAULT|4) /* hardware breakpoint/watchpoint */ -#define NSIGTRAP 4 +#define NSIGTRAP 2 /* * SIGCHLD si_codes diff --git a/trunk/include/asm-mn10300/.gitignore b/trunk/include/asm-mn10300/.gitignore new file mode 100644 index 000000000000..0f87ba790e26 --- /dev/null +++ b/trunk/include/asm-mn10300/.gitignore @@ -0,0 +1,2 @@ +proc +unit diff --git a/trunk/arch/mn10300/include/asm/Kbuild b/trunk/include/asm-mn10300/Kbuild similarity index 100% rename from trunk/arch/mn10300/include/asm/Kbuild rename to trunk/include/asm-mn10300/Kbuild diff --git a/trunk/arch/mn10300/include/asm/atomic.h b/trunk/include/asm-mn10300/atomic.h similarity index 100% rename from trunk/arch/mn10300/include/asm/atomic.h rename to trunk/include/asm-mn10300/atomic.h diff --git a/trunk/arch/mn10300/include/asm/auxvec.h b/trunk/include/asm-mn10300/auxvec.h similarity index 100% rename from trunk/arch/mn10300/include/asm/auxvec.h rename to trunk/include/asm-mn10300/auxvec.h diff --git a/trunk/arch/mn10300/include/asm/bitops.h b/trunk/include/asm-mn10300/bitops.h similarity index 100% rename from trunk/arch/mn10300/include/asm/bitops.h rename to trunk/include/asm-mn10300/bitops.h diff --git a/trunk/arch/mn10300/include/asm/bug.h b/trunk/include/asm-mn10300/bug.h similarity index 100% rename from trunk/arch/mn10300/include/asm/bug.h rename to trunk/include/asm-mn10300/bug.h diff --git a/trunk/arch/mn10300/include/asm/bugs.h b/trunk/include/asm-mn10300/bugs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/bugs.h rename to trunk/include/asm-mn10300/bugs.h diff --git a/trunk/arch/mn10300/include/asm/busctl-regs.h b/trunk/include/asm-mn10300/busctl-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/busctl-regs.h rename to trunk/include/asm-mn10300/busctl-regs.h diff --git a/trunk/arch/mn10300/include/asm/byteorder.h b/trunk/include/asm-mn10300/byteorder.h similarity index 100% rename from trunk/arch/mn10300/include/asm/byteorder.h rename to trunk/include/asm-mn10300/byteorder.h diff --git a/trunk/arch/mn10300/include/asm/cache.h b/trunk/include/asm-mn10300/cache.h similarity index 98% rename from trunk/arch/mn10300/include/asm/cache.h rename to trunk/include/asm-mn10300/cache.h index e03cfa2e997e..9e01122208a9 100644 --- a/trunk/arch/mn10300/include/asm/cache.h +++ b/trunk/include/asm-mn10300/cache.h @@ -13,7 +13,7 @@ #define _ASM_CACHE_H #include -#include +#include #ifndef __ASSEMBLY__ #define L1_CACHE_DISPARITY (L1_CACHE_NENTRIES * L1_CACHE_BYTES) diff --git a/trunk/arch/mn10300/include/asm/cacheflush.h b/trunk/include/asm-mn10300/cacheflush.h similarity index 100% rename from trunk/arch/mn10300/include/asm/cacheflush.h rename to trunk/include/asm-mn10300/cacheflush.h diff --git a/trunk/arch/mn10300/include/asm/checksum.h b/trunk/include/asm-mn10300/checksum.h similarity index 100% rename from trunk/arch/mn10300/include/asm/checksum.h rename to trunk/include/asm-mn10300/checksum.h diff --git a/trunk/arch/mn10300/include/asm/cpu-regs.h b/trunk/include/asm-mn10300/cpu-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/cpu-regs.h rename to trunk/include/asm-mn10300/cpu-regs.h diff --git a/trunk/arch/microblaze/include/asm/cputime.h b/trunk/include/asm-mn10300/cputime.h similarity index 100% rename from trunk/arch/microblaze/include/asm/cputime.h rename to trunk/include/asm-mn10300/cputime.h diff --git a/trunk/arch/mn10300/include/asm/current.h b/trunk/include/asm-mn10300/current.h similarity index 100% rename from trunk/arch/mn10300/include/asm/current.h rename to trunk/include/asm-mn10300/current.h diff --git a/trunk/arch/mn10300/include/asm/delay.h b/trunk/include/asm-mn10300/delay.h similarity index 100% rename from trunk/arch/mn10300/include/asm/delay.h rename to trunk/include/asm-mn10300/delay.h diff --git a/trunk/arch/mn10300/include/asm/device.h b/trunk/include/asm-mn10300/device.h similarity index 100% rename from trunk/arch/mn10300/include/asm/device.h rename to trunk/include/asm-mn10300/device.h diff --git a/trunk/arch/mn10300/include/asm/div64.h b/trunk/include/asm-mn10300/div64.h similarity index 100% rename from trunk/arch/mn10300/include/asm/div64.h rename to trunk/include/asm-mn10300/div64.h diff --git a/trunk/arch/mn10300/include/asm/dma-mapping.h b/trunk/include/asm-mn10300/dma-mapping.h similarity index 100% rename from trunk/arch/mn10300/include/asm/dma-mapping.h rename to trunk/include/asm-mn10300/dma-mapping.h diff --git a/trunk/arch/mn10300/include/asm/dma.h b/trunk/include/asm-mn10300/dma.h similarity index 100% rename from trunk/arch/mn10300/include/asm/dma.h rename to trunk/include/asm-mn10300/dma.h diff --git a/trunk/arch/mn10300/include/asm/dmactl-regs.h b/trunk/include/asm-mn10300/dmactl-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/dmactl-regs.h rename to trunk/include/asm-mn10300/dmactl-regs.h diff --git a/trunk/arch/mn10300/include/asm/elf.h b/trunk/include/asm-mn10300/elf.h similarity index 100% rename from trunk/arch/mn10300/include/asm/elf.h rename to trunk/include/asm-mn10300/elf.h diff --git a/trunk/arch/microblaze/include/asm/emergency-restart.h b/trunk/include/asm-mn10300/emergency-restart.h similarity index 100% rename from trunk/arch/microblaze/include/asm/emergency-restart.h rename to trunk/include/asm-mn10300/emergency-restart.h diff --git a/trunk/arch/microblaze/include/asm/errno.h b/trunk/include/asm-mn10300/errno.h similarity index 100% rename from trunk/arch/microblaze/include/asm/errno.h rename to trunk/include/asm-mn10300/errno.h diff --git a/trunk/arch/mn10300/include/asm/exceptions.h b/trunk/include/asm-mn10300/exceptions.h similarity index 100% rename from trunk/arch/mn10300/include/asm/exceptions.h rename to trunk/include/asm-mn10300/exceptions.h diff --git a/trunk/arch/mn10300/include/asm/fb.h b/trunk/include/asm-mn10300/fb.h similarity index 100% rename from trunk/arch/mn10300/include/asm/fb.h rename to trunk/include/asm-mn10300/fb.h diff --git a/trunk/arch/microblaze/include/asm/fcntl.h b/trunk/include/asm-mn10300/fcntl.h similarity index 100% rename from trunk/arch/microblaze/include/asm/fcntl.h rename to trunk/include/asm-mn10300/fcntl.h diff --git a/trunk/arch/mn10300/include/asm/fpu.h b/trunk/include/asm-mn10300/fpu.h similarity index 100% rename from trunk/arch/mn10300/include/asm/fpu.h rename to trunk/include/asm-mn10300/fpu.h diff --git a/trunk/arch/mn10300/include/asm/frame.inc b/trunk/include/asm-mn10300/frame.inc similarity index 100% rename from trunk/arch/mn10300/include/asm/frame.inc rename to trunk/include/asm-mn10300/frame.inc diff --git a/trunk/arch/mn10300/include/asm/ftrace.h b/trunk/include/asm-mn10300/ftrace.h similarity index 100% rename from trunk/arch/mn10300/include/asm/ftrace.h rename to trunk/include/asm-mn10300/ftrace.h diff --git a/trunk/arch/microblaze/include/asm/futex.h b/trunk/include/asm-mn10300/futex.h similarity index 100% rename from trunk/arch/microblaze/include/asm/futex.h rename to trunk/include/asm-mn10300/futex.h diff --git a/trunk/arch/mn10300/include/asm/gdb-stub.h b/trunk/include/asm-mn10300/gdb-stub.h similarity index 100% rename from trunk/arch/mn10300/include/asm/gdb-stub.h rename to trunk/include/asm-mn10300/gdb-stub.h diff --git a/trunk/arch/mn10300/include/asm/hardirq.h b/trunk/include/asm-mn10300/hardirq.h similarity index 100% rename from trunk/arch/mn10300/include/asm/hardirq.h rename to trunk/include/asm-mn10300/hardirq.h diff --git a/trunk/arch/mn10300/include/asm/highmem.h b/trunk/include/asm-mn10300/highmem.h similarity index 100% rename from trunk/arch/mn10300/include/asm/highmem.h rename to trunk/include/asm-mn10300/highmem.h diff --git a/trunk/arch/mn10300/include/asm/hw_irq.h b/trunk/include/asm-mn10300/hw_irq.h similarity index 100% rename from trunk/arch/mn10300/include/asm/hw_irq.h rename to trunk/include/asm-mn10300/hw_irq.h diff --git a/trunk/arch/mn10300/include/asm/intctl-regs.h b/trunk/include/asm-mn10300/intctl-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/intctl-regs.h rename to trunk/include/asm-mn10300/intctl-regs.h diff --git a/trunk/arch/mn10300/include/asm/io.h b/trunk/include/asm-mn10300/io.h similarity index 100% rename from trunk/arch/mn10300/include/asm/io.h rename to trunk/include/asm-mn10300/io.h diff --git a/trunk/arch/microblaze/include/asm/ioctl.h b/trunk/include/asm-mn10300/ioctl.h similarity index 100% rename from trunk/arch/microblaze/include/asm/ioctl.h rename to trunk/include/asm-mn10300/ioctl.h diff --git a/trunk/arch/mn10300/include/asm/ioctls.h b/trunk/include/asm-mn10300/ioctls.h similarity index 100% rename from trunk/arch/mn10300/include/asm/ioctls.h rename to trunk/include/asm-mn10300/ioctls.h diff --git a/trunk/arch/microblaze/include/asm/ipc.h b/trunk/include/asm-mn10300/ipc.h similarity index 100% rename from trunk/arch/microblaze/include/asm/ipc.h rename to trunk/include/asm-mn10300/ipc.h diff --git a/trunk/arch/mn10300/include/asm/ipcbuf.h b/trunk/include/asm-mn10300/ipcbuf.h similarity index 100% rename from trunk/arch/mn10300/include/asm/ipcbuf.h rename to trunk/include/asm-mn10300/ipcbuf.h diff --git a/trunk/arch/mn10300/include/asm/irq.h b/trunk/include/asm-mn10300/irq.h similarity index 97% rename from trunk/arch/mn10300/include/asm/irq.h rename to trunk/include/asm-mn10300/irq.h index 25c045d16d1c..53b380116901 100644 --- a/trunk/arch/mn10300/include/asm/irq.h +++ b/trunk/include/asm-mn10300/irq.h @@ -16,7 +16,7 @@ #include #include -#include +#include /* this number is used when no interrupt has been assigned */ #define NO_IRQ INT_MAX diff --git a/trunk/arch/mn10300/include/asm/irq_regs.h b/trunk/include/asm-mn10300/irq_regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/irq_regs.h rename to trunk/include/asm-mn10300/irq_regs.h diff --git a/trunk/arch/mn10300/include/asm/kdebug.h b/trunk/include/asm-mn10300/kdebug.h similarity index 100% rename from trunk/arch/mn10300/include/asm/kdebug.h rename to trunk/include/asm-mn10300/kdebug.h diff --git a/trunk/arch/mn10300/include/asm/kmap_types.h b/trunk/include/asm-mn10300/kmap_types.h similarity index 100% rename from trunk/arch/mn10300/include/asm/kmap_types.h rename to trunk/include/asm-mn10300/kmap_types.h diff --git a/trunk/arch/mn10300/include/asm/kprobes.h b/trunk/include/asm-mn10300/kprobes.h similarity index 100% rename from trunk/arch/mn10300/include/asm/kprobes.h rename to trunk/include/asm-mn10300/kprobes.h diff --git a/trunk/arch/mn10300/include/asm/linkage.h b/trunk/include/asm-mn10300/linkage.h similarity index 100% rename from trunk/arch/mn10300/include/asm/linkage.h rename to trunk/include/asm-mn10300/linkage.h diff --git a/trunk/arch/microblaze/include/asm/local.h b/trunk/include/asm-mn10300/local.h similarity index 100% rename from trunk/arch/microblaze/include/asm/local.h rename to trunk/include/asm-mn10300/local.h diff --git a/trunk/arch/mn10300/include/asm/mc146818rtc.h b/trunk/include/asm-mn10300/mc146818rtc.h similarity index 100% rename from trunk/arch/mn10300/include/asm/mc146818rtc.h rename to trunk/include/asm-mn10300/mc146818rtc.h diff --git a/trunk/arch/mn10300/include/asm/mman.h b/trunk/include/asm-mn10300/mman.h similarity index 100% rename from trunk/arch/mn10300/include/asm/mman.h rename to trunk/include/asm-mn10300/mman.h diff --git a/trunk/arch/mn10300/include/asm/mmu.h b/trunk/include/asm-mn10300/mmu.h similarity index 100% rename from trunk/arch/mn10300/include/asm/mmu.h rename to trunk/include/asm-mn10300/mmu.h diff --git a/trunk/arch/mn10300/include/asm/mmu_context.h b/trunk/include/asm-mn10300/mmu_context.h similarity index 100% rename from trunk/arch/mn10300/include/asm/mmu_context.h rename to trunk/include/asm-mn10300/mmu_context.h diff --git a/trunk/arch/mn10300/include/asm/module.h b/trunk/include/asm-mn10300/module.h similarity index 100% rename from trunk/arch/mn10300/include/asm/module.h rename to trunk/include/asm-mn10300/module.h diff --git a/trunk/arch/mn10300/include/asm/msgbuf.h b/trunk/include/asm-mn10300/msgbuf.h similarity index 100% rename from trunk/arch/mn10300/include/asm/msgbuf.h rename to trunk/include/asm-mn10300/msgbuf.h diff --git a/trunk/arch/mn10300/include/asm/mutex.h b/trunk/include/asm-mn10300/mutex.h similarity index 100% rename from trunk/arch/mn10300/include/asm/mutex.h rename to trunk/include/asm-mn10300/mutex.h diff --git a/trunk/arch/mn10300/include/asm/nmi.h b/trunk/include/asm-mn10300/nmi.h similarity index 100% rename from trunk/arch/mn10300/include/asm/nmi.h rename to trunk/include/asm-mn10300/nmi.h diff --git a/trunk/arch/mn10300/include/asm/page.h b/trunk/include/asm-mn10300/page.h similarity index 100% rename from trunk/arch/mn10300/include/asm/page.h rename to trunk/include/asm-mn10300/page.h diff --git a/trunk/arch/mn10300/include/asm/page_offset.h b/trunk/include/asm-mn10300/page_offset.h similarity index 100% rename from trunk/arch/mn10300/include/asm/page_offset.h rename to trunk/include/asm-mn10300/page_offset.h diff --git a/trunk/arch/mn10300/include/asm/param.h b/trunk/include/asm-mn10300/param.h similarity index 100% rename from trunk/arch/mn10300/include/asm/param.h rename to trunk/include/asm-mn10300/param.h diff --git a/trunk/arch/mn10300/include/asm/pci.h b/trunk/include/asm-mn10300/pci.h similarity index 100% rename from trunk/arch/mn10300/include/asm/pci.h rename to trunk/include/asm-mn10300/pci.h diff --git a/trunk/arch/microblaze/include/asm/percpu.h b/trunk/include/asm-mn10300/percpu.h similarity index 100% rename from trunk/arch/microblaze/include/asm/percpu.h rename to trunk/include/asm-mn10300/percpu.h diff --git a/trunk/arch/mn10300/include/asm/pgalloc.h b/trunk/include/asm-mn10300/pgalloc.h similarity index 100% rename from trunk/arch/mn10300/include/asm/pgalloc.h rename to trunk/include/asm-mn10300/pgalloc.h diff --git a/trunk/arch/mn10300/include/asm/pgtable.h b/trunk/include/asm-mn10300/pgtable.h similarity index 100% rename from trunk/arch/mn10300/include/asm/pgtable.h rename to trunk/include/asm-mn10300/pgtable.h diff --git a/trunk/arch/mn10300/include/asm/pio-regs.h b/trunk/include/asm-mn10300/pio-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/pio-regs.h rename to trunk/include/asm-mn10300/pio-regs.h diff --git a/trunk/arch/microblaze/include/asm/poll.h b/trunk/include/asm-mn10300/poll.h similarity index 100% rename from trunk/arch/microblaze/include/asm/poll.h rename to trunk/include/asm-mn10300/poll.h diff --git a/trunk/arch/mn10300/include/asm/posix_types.h b/trunk/include/asm-mn10300/posix_types.h similarity index 100% rename from trunk/arch/mn10300/include/asm/posix_types.h rename to trunk/include/asm-mn10300/posix_types.h diff --git a/trunk/arch/mn10300/proc-mn103e010/include/proc/cache.h b/trunk/include/asm-mn10300/proc-mn103e010/cache.h similarity index 100% rename from trunk/arch/mn10300/proc-mn103e010/include/proc/cache.h rename to trunk/include/asm-mn10300/proc-mn103e010/cache.h diff --git a/trunk/arch/mn10300/proc-mn103e010/include/proc/clock.h b/trunk/include/asm-mn10300/proc-mn103e010/clock.h similarity index 94% rename from trunk/arch/mn10300/proc-mn103e010/include/proc/clock.h rename to trunk/include/asm-mn10300/proc-mn103e010/clock.h index aa23e147d620..caf998350633 100644 --- a/trunk/arch/mn10300/proc-mn103e010/include/proc/clock.h +++ b/trunk/include/asm-mn10300/proc-mn103e010/clock.h @@ -11,7 +11,7 @@ #ifndef _ASM_PROC_CLOCK_H #define _ASM_PROC_CLOCK_H -#include +#include #define MN10300_WDCLK MN10300_IOCLK diff --git a/trunk/arch/mn10300/proc-mn103e010/include/proc/irq.h b/trunk/include/asm-mn10300/proc-mn103e010/irq.h similarity index 100% rename from trunk/arch/mn10300/proc-mn103e010/include/proc/irq.h rename to trunk/include/asm-mn10300/proc-mn103e010/irq.h diff --git a/trunk/arch/mn10300/proc-mn103e010/include/proc/proc.h b/trunk/include/asm-mn10300/proc-mn103e010/proc.h similarity index 100% rename from trunk/arch/mn10300/proc-mn103e010/include/proc/proc.h rename to trunk/include/asm-mn10300/proc-mn103e010/proc.h diff --git a/trunk/arch/mn10300/include/asm/processor.h b/trunk/include/asm-mn10300/processor.h similarity index 100% rename from trunk/arch/mn10300/include/asm/processor.h rename to trunk/include/asm-mn10300/processor.h diff --git a/trunk/arch/mn10300/include/asm/ptrace.h b/trunk/include/asm-mn10300/ptrace.h similarity index 100% rename from trunk/arch/mn10300/include/asm/ptrace.h rename to trunk/include/asm-mn10300/ptrace.h diff --git a/trunk/arch/mn10300/include/asm/reset-regs.h b/trunk/include/asm-mn10300/reset-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/reset-regs.h rename to trunk/include/asm-mn10300/reset-regs.h diff --git a/trunk/arch/microblaze/include/asm/resource.h b/trunk/include/asm-mn10300/resource.h similarity index 100% rename from trunk/arch/microblaze/include/asm/resource.h rename to trunk/include/asm-mn10300/resource.h diff --git a/trunk/arch/mn10300/include/asm/rtc-regs.h b/trunk/include/asm-mn10300/rtc-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/rtc-regs.h rename to trunk/include/asm-mn10300/rtc-regs.h diff --git a/trunk/arch/mn10300/include/asm/rtc.h b/trunk/include/asm-mn10300/rtc.h similarity index 100% rename from trunk/arch/mn10300/include/asm/rtc.h rename to trunk/include/asm-mn10300/rtc.h diff --git a/trunk/arch/mn10300/include/asm/scatterlist.h b/trunk/include/asm-mn10300/scatterlist.h similarity index 100% rename from trunk/arch/mn10300/include/asm/scatterlist.h rename to trunk/include/asm-mn10300/scatterlist.h diff --git a/trunk/arch/mn10300/include/asm/sections.h b/trunk/include/asm-mn10300/sections.h similarity index 100% rename from trunk/arch/mn10300/include/asm/sections.h rename to trunk/include/asm-mn10300/sections.h diff --git a/trunk/arch/mn10300/include/asm/sembuf.h b/trunk/include/asm-mn10300/sembuf.h similarity index 100% rename from trunk/arch/mn10300/include/asm/sembuf.h rename to trunk/include/asm-mn10300/sembuf.h diff --git a/trunk/arch/mn10300/include/asm/serial-regs.h b/trunk/include/asm-mn10300/serial-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/serial-regs.h rename to trunk/include/asm-mn10300/serial-regs.h diff --git a/trunk/arch/mn10300/include/asm/serial.h b/trunk/include/asm-mn10300/serial.h similarity index 97% rename from trunk/arch/mn10300/include/asm/serial.h rename to trunk/include/asm-mn10300/serial.h index a29445cddd6f..99785a9deadb 100644 --- a/trunk/arch/mn10300/include/asm/serial.h +++ b/trunk/include/asm-mn10300/serial.h @@ -33,4 +33,4 @@ #define RS_TABLE_SIZE #endif -#include +#include diff --git a/trunk/arch/mn10300/include/asm/setup.h b/trunk/include/asm-mn10300/setup.h similarity index 100% rename from trunk/arch/mn10300/include/asm/setup.h rename to trunk/include/asm-mn10300/setup.h diff --git a/trunk/arch/mn10300/include/asm/shmbuf.h b/trunk/include/asm-mn10300/shmbuf.h similarity index 100% rename from trunk/arch/mn10300/include/asm/shmbuf.h rename to trunk/include/asm-mn10300/shmbuf.h diff --git a/trunk/arch/mn10300/include/asm/shmparam.h b/trunk/include/asm-mn10300/shmparam.h similarity index 100% rename from trunk/arch/mn10300/include/asm/shmparam.h rename to trunk/include/asm-mn10300/shmparam.h diff --git a/trunk/arch/mn10300/include/asm/sigcontext.h b/trunk/include/asm-mn10300/sigcontext.h similarity index 100% rename from trunk/arch/mn10300/include/asm/sigcontext.h rename to trunk/include/asm-mn10300/sigcontext.h diff --git a/trunk/arch/mn10300/include/asm/siginfo.h b/trunk/include/asm-mn10300/siginfo.h similarity index 100% rename from trunk/arch/mn10300/include/asm/siginfo.h rename to trunk/include/asm-mn10300/siginfo.h diff --git a/trunk/arch/mn10300/include/asm/signal.h b/trunk/include/asm-mn10300/signal.h similarity index 100% rename from trunk/arch/mn10300/include/asm/signal.h rename to trunk/include/asm-mn10300/signal.h diff --git a/trunk/arch/mn10300/include/asm/smp.h b/trunk/include/asm-mn10300/smp.h similarity index 100% rename from trunk/arch/mn10300/include/asm/smp.h rename to trunk/include/asm-mn10300/smp.h diff --git a/trunk/arch/mn10300/include/asm/socket.h b/trunk/include/asm-mn10300/socket.h similarity index 100% rename from trunk/arch/mn10300/include/asm/socket.h rename to trunk/include/asm-mn10300/socket.h diff --git a/trunk/arch/mn10300/include/asm/sockios.h b/trunk/include/asm-mn10300/sockios.h similarity index 100% rename from trunk/arch/mn10300/include/asm/sockios.h rename to trunk/include/asm-mn10300/sockios.h diff --git a/trunk/arch/mn10300/include/asm/spinlock.h b/trunk/include/asm-mn10300/spinlock.h similarity index 100% rename from trunk/arch/mn10300/include/asm/spinlock.h rename to trunk/include/asm-mn10300/spinlock.h diff --git a/trunk/arch/mn10300/include/asm/stat.h b/trunk/include/asm-mn10300/stat.h similarity index 100% rename from trunk/arch/mn10300/include/asm/stat.h rename to trunk/include/asm-mn10300/stat.h diff --git a/trunk/arch/microblaze/include/asm/statfs.h b/trunk/include/asm-mn10300/statfs.h similarity index 100% rename from trunk/arch/microblaze/include/asm/statfs.h rename to trunk/include/asm-mn10300/statfs.h diff --git a/trunk/arch/mn10300/include/asm/string.h b/trunk/include/asm-mn10300/string.h similarity index 100% rename from trunk/arch/mn10300/include/asm/string.h rename to trunk/include/asm-mn10300/string.h diff --git a/trunk/arch/mn10300/include/asm/swab.h b/trunk/include/asm-mn10300/swab.h similarity index 100% rename from trunk/arch/mn10300/include/asm/swab.h rename to trunk/include/asm-mn10300/swab.h diff --git a/trunk/arch/mn10300/include/asm/system.h b/trunk/include/asm-mn10300/system.h similarity index 100% rename from trunk/arch/mn10300/include/asm/system.h rename to trunk/include/asm-mn10300/system.h diff --git a/trunk/arch/mn10300/include/asm/termbits.h b/trunk/include/asm-mn10300/termbits.h similarity index 100% rename from trunk/arch/mn10300/include/asm/termbits.h rename to trunk/include/asm-mn10300/termbits.h diff --git a/trunk/arch/mn10300/include/asm/termios.h b/trunk/include/asm-mn10300/termios.h similarity index 100% rename from trunk/arch/mn10300/include/asm/termios.h rename to trunk/include/asm-mn10300/termios.h diff --git a/trunk/arch/mn10300/include/asm/thread_info.h b/trunk/include/asm-mn10300/thread_info.h similarity index 100% rename from trunk/arch/mn10300/include/asm/thread_info.h rename to trunk/include/asm-mn10300/thread_info.h diff --git a/trunk/arch/mn10300/include/asm/timer-regs.h b/trunk/include/asm-mn10300/timer-regs.h similarity index 100% rename from trunk/arch/mn10300/include/asm/timer-regs.h rename to trunk/include/asm-mn10300/timer-regs.h diff --git a/trunk/arch/mn10300/include/asm/timex.h b/trunk/include/asm-mn10300/timex.h similarity index 96% rename from trunk/arch/mn10300/include/asm/timex.h rename to trunk/include/asm-mn10300/timex.h index 8d031f9e117d..3944277dab67 100644 --- a/trunk/arch/mn10300/include/asm/timex.h +++ b/trunk/include/asm-mn10300/timex.h @@ -12,7 +12,7 @@ #define _ASM_TIMEX_H #include -#include +#include #define TICK_SIZE (tick_nsec / 1000) diff --git a/trunk/arch/mn10300/include/asm/tlb.h b/trunk/include/asm-mn10300/tlb.h similarity index 100% rename from trunk/arch/mn10300/include/asm/tlb.h rename to trunk/include/asm-mn10300/tlb.h diff --git a/trunk/arch/mn10300/include/asm/tlbflush.h b/trunk/include/asm-mn10300/tlbflush.h similarity index 100% rename from trunk/arch/mn10300/include/asm/tlbflush.h rename to trunk/include/asm-mn10300/tlbflush.h diff --git a/trunk/arch/mn10300/include/asm/topology.h b/trunk/include/asm-mn10300/topology.h similarity index 100% rename from trunk/arch/mn10300/include/asm/topology.h rename to trunk/include/asm-mn10300/topology.h diff --git a/trunk/arch/mn10300/include/asm/types.h b/trunk/include/asm-mn10300/types.h similarity index 100% rename from trunk/arch/mn10300/include/asm/types.h rename to trunk/include/asm-mn10300/types.h diff --git a/trunk/arch/mn10300/include/asm/uaccess.h b/trunk/include/asm-mn10300/uaccess.h similarity index 100% rename from trunk/arch/mn10300/include/asm/uaccess.h rename to trunk/include/asm-mn10300/uaccess.h diff --git a/trunk/arch/mn10300/include/asm/ucontext.h b/trunk/include/asm-mn10300/ucontext.h similarity index 100% rename from trunk/arch/mn10300/include/asm/ucontext.h rename to trunk/include/asm-mn10300/ucontext.h diff --git a/trunk/arch/mn10300/include/asm/unaligned.h b/trunk/include/asm-mn10300/unaligned.h similarity index 100% rename from trunk/arch/mn10300/include/asm/unaligned.h rename to trunk/include/asm-mn10300/unaligned.h diff --git a/trunk/arch/mn10300/include/asm/unistd.h b/trunk/include/asm-mn10300/unistd.h similarity index 100% rename from trunk/arch/mn10300/include/asm/unistd.h rename to trunk/include/asm-mn10300/unistd.h diff --git a/trunk/arch/mn10300/unit-asb2303/include/unit/clock.h b/trunk/include/asm-mn10300/unit-asb2303/clock.h similarity index 100% rename from trunk/arch/mn10300/unit-asb2303/include/unit/clock.h rename to trunk/include/asm-mn10300/unit-asb2303/clock.h diff --git a/trunk/arch/mn10300/unit-asb2303/include/unit/leds.h b/trunk/include/asm-mn10300/unit-asb2303/leds.h similarity index 100% rename from trunk/arch/mn10300/unit-asb2303/include/unit/leds.h rename to trunk/include/asm-mn10300/unit-asb2303/leds.h diff --git a/trunk/arch/mn10300/unit-asb2303/include/unit/serial.h b/trunk/include/asm-mn10300/unit-asb2303/serial.h similarity index 99% rename from trunk/arch/mn10300/unit-asb2303/include/unit/serial.h rename to trunk/include/asm-mn10300/unit-asb2303/serial.h index 047566cd2e36..0d55cf5896ac 100644 --- a/trunk/arch/mn10300/unit-asb2303/include/unit/serial.h +++ b/trunk/include/asm-mn10300/unit-asb2303/serial.h @@ -13,7 +13,7 @@ #define _ASM_UNIT_SERIAL_H #include -#include +#include #include #define SERIAL_PORT0_BASE_ADDRESS 0xA6FB0000 diff --git a/trunk/arch/mn10300/unit-asb2303/include/unit/smc91111.h b/trunk/include/asm-mn10300/unit-asb2303/smc91111.h similarity index 100% rename from trunk/arch/mn10300/unit-asb2303/include/unit/smc91111.h rename to trunk/include/asm-mn10300/unit-asb2303/smc91111.h diff --git a/trunk/arch/mn10300/unit-asb2303/include/unit/timex.h b/trunk/include/asm-mn10300/unit-asb2303/timex.h similarity index 98% rename from trunk/arch/mn10300/unit-asb2303/include/unit/timex.h rename to trunk/include/asm-mn10300/unit-asb2303/timex.h index f206b63c95b4..7e54b0cfdd03 100644 --- a/trunk/arch/mn10300/unit-asb2303/include/unit/timex.h +++ b/trunk/include/asm-mn10300/unit-asb2303/timex.h @@ -16,7 +16,7 @@ #endif /* __ASSEMBLY__ */ #include -#include +#include /* * jiffies counter specifications diff --git a/trunk/arch/mn10300/unit-asb2305/include/unit/clock.h b/trunk/include/asm-mn10300/unit-asb2305/clock.h similarity index 100% rename from trunk/arch/mn10300/unit-asb2305/include/unit/clock.h rename to trunk/include/asm-mn10300/unit-asb2305/clock.h diff --git a/trunk/arch/mn10300/unit-asb2305/include/unit/leds.h b/trunk/include/asm-mn10300/unit-asb2305/leds.h similarity index 100% rename from trunk/arch/mn10300/unit-asb2305/include/unit/leds.h rename to trunk/include/asm-mn10300/unit-asb2305/leds.h diff --git a/trunk/arch/mn10300/unit-asb2305/include/unit/serial.h b/trunk/include/asm-mn10300/unit-asb2305/serial.h similarity index 99% rename from trunk/arch/mn10300/unit-asb2305/include/unit/serial.h rename to trunk/include/asm-mn10300/unit-asb2305/serial.h index 3bfc90938787..73d31d67bb71 100644 --- a/trunk/arch/mn10300/unit-asb2305/include/unit/serial.h +++ b/trunk/include/asm-mn10300/unit-asb2305/serial.h @@ -12,7 +12,7 @@ #define _ASM_UNIT_SERIAL_H #include -#include +#include #include #define SERIAL_PORT0_BASE_ADDRESS 0xA6FB0000 diff --git a/trunk/arch/mn10300/unit-asb2305/include/unit/timex.h b/trunk/include/asm-mn10300/unit-asb2305/timex.h similarity index 98% rename from trunk/arch/mn10300/unit-asb2305/include/unit/timex.h rename to trunk/include/asm-mn10300/unit-asb2305/timex.h index a71c49aa85eb..10e1bfe34463 100644 --- a/trunk/arch/mn10300/unit-asb2305/include/unit/timex.h +++ b/trunk/include/asm-mn10300/unit-asb2305/timex.h @@ -16,7 +16,7 @@ #endif /* __ASSEMBLY__ */ #include -#include +#include /* * jiffies counter specifications diff --git a/trunk/arch/mn10300/include/asm/user.h b/trunk/include/asm-mn10300/user.h similarity index 100% rename from trunk/arch/mn10300/include/asm/user.h rename to trunk/include/asm-mn10300/user.h diff --git a/trunk/arch/mn10300/include/asm/vga.h b/trunk/include/asm-mn10300/vga.h similarity index 100% rename from trunk/arch/mn10300/include/asm/vga.h rename to trunk/include/asm-mn10300/vga.h diff --git a/trunk/arch/microblaze/include/asm/xor.h b/trunk/include/asm-mn10300/xor.h similarity index 100% rename from trunk/arch/microblaze/include/asm/xor.h rename to trunk/include/asm-mn10300/xor.h diff --git a/trunk/include/drm/drm_pciids.h b/trunk/include/drm/drm_pciids.h index 9477af01a639..2df74eb09563 100644 --- a/trunk/include/drm/drm_pciids.h +++ b/trunk/include/drm/drm_pciids.h @@ -472,7 +472,6 @@ {0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ {0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ {0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ - {0x8086, 0x358e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ {0, 0, 0} #define gamma_PCI_IDS \ @@ -534,5 +533,4 @@ {0x8086, 0x2e22, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ {0x8086, 0xa001, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ {0x8086, 0xa011, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ - {0x8086, 0x35e8, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, 0xffff00, 0}, \ {0, 0, 0} diff --git a/trunk/include/linux/capability.h b/trunk/include/linux/capability.h index c3021105edc0..4864a43b2b45 100644 --- a/trunk/include/linux/capability.h +++ b/trunk/include/linux/capability.h @@ -377,21 +377,7 @@ struct cpu_vfs_cap_data { #define CAP_FOR_EACH_U32(__capi) \ for (__capi = 0; __capi < _KERNEL_CAPABILITY_U32S; ++__capi) -/* - * CAP_FS_MASK and CAP_NFSD_MASKS: - * - * The fs mask is all the privileges that fsuid==0 historically meant. - * At one time in the past, that included CAP_MKNOD and CAP_LINUX_IMMUTABLE. - * - * It has never meant setting security.* and trusted.* xattrs. - * - * We could also define fsmask as follows: - * 1. CAP_FS_MASK is the privilege to bypass all fs-related DAC permissions - * 2. The security.* and trusted.* xattrs are fs-related MAC permissions - */ - # define CAP_FS_MASK_B0 (CAP_TO_MASK(CAP_CHOWN) \ - | CAP_TO_MASK(CAP_MKNOD) \ | CAP_TO_MASK(CAP_DAC_OVERRIDE) \ | CAP_TO_MASK(CAP_DAC_READ_SEARCH) \ | CAP_TO_MASK(CAP_FOWNER) \ @@ -406,12 +392,11 @@ struct cpu_vfs_cap_data { # define CAP_EMPTY_SET ((kernel_cap_t){{ 0, 0 }}) # define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }}) # define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }}) -# define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \ - | CAP_TO_MASK(CAP_LINUX_IMMUTABLE), \ - CAP_FS_MASK_B1 } }) +# define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } }) # define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \ - | CAP_TO_MASK(CAP_SYS_RESOURCE), \ - CAP_FS_MASK_B1 } }) + | CAP_TO_MASK(CAP_SYS_RESOURCE) \ + | CAP_TO_MASK(CAP_MKNOD), \ + CAP_FS_MASK_B1 } }) #endif /* _KERNEL_CAPABILITY_U32S != 2 */ diff --git a/trunk/include/linux/debug_locks.h b/trunk/include/linux/debug_locks.h index 493dedb7a67b..096476f1fb35 100644 --- a/trunk/include/linux/debug_locks.h +++ b/trunk/include/linux/debug_locks.h @@ -2,19 +2,12 @@ #define __LINUX_DEBUG_LOCKING_H #include -#include struct task_struct; extern int debug_locks; extern int debug_locks_silent; - -static inline int __debug_locks_off(void) -{ - return xchg(&debug_locks, 0); -} - /* * Generic 'turn off all lock debugging' function: */ diff --git a/trunk/include/linux/device-mapper.h b/trunk/include/linux/device-mapper.h index ded2d7c42668..66ec05a57955 100644 --- a/trunk/include/linux/device-mapper.h +++ b/trunk/include/linux/device-mapper.h @@ -116,6 +116,7 @@ void dm_put_device(struct dm_target *ti, struct dm_dev *d); /* * Target features */ +#define DM_TARGET_SUPPORTS_BARRIERS 0x00000001 struct target_type { uint64_t features; diff --git a/trunk/include/linux/fb.h b/trunk/include/linux/fb.h index 330c4b1bfcaa..f563c5013932 100644 --- a/trunk/include/linux/fb.h +++ b/trunk/include/linux/fb.h @@ -173,12 +173,8 @@ struct fb_fix_screeninfo { /* Interpretation of offset for color fields: All offsets are from the right, * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you * can use the offset as right argument to <<). A pixel afterwards is a bit - * stream and is written to video memory as that unmodified. - * - * For pseudocolor: offset and length should be the same for all color - * components. Offset specifies the position of the least significant bit - * of the pallette index in a pixel value. Length indicates the number - * of available palette entries (i.e. # of entries = 1 << length). + * stream and is written to video memory as that unmodified. This implies + * big-endian byte order if bits_per_pixel is greater than 8. */ struct fb_bitfield { __u32 offset; /* beginning of bitfield */ diff --git a/trunk/include/linux/fiemap.h b/trunk/include/linux/fiemap.h index 934e22d65801..671decbd2aeb 100644 --- a/trunk/include/linux/fiemap.h +++ b/trunk/include/linux/fiemap.h @@ -11,8 +11,6 @@ #ifndef _LINUX_FIEMAP_H #define _LINUX_FIEMAP_H -#include - struct fiemap_extent { __u64 fe_logical; /* logical offset in bytes for the start of * the extent from the beginning of the file */ diff --git a/trunk/include/linux/ftrace.h b/trunk/include/linux/ftrace.h index 8a0c2f221e6b..da5405dce347 100644 --- a/trunk/include/linux/ftrace.h +++ b/trunk/include/linux/ftrace.h @@ -357,7 +357,7 @@ struct ftrace_graph_ret { #ifdef CONFIG_FUNCTION_GRAPH_TRACER /* for init task */ -#define INIT_FTRACE_GRAPH .ret_stack = NULL, +#define INIT_FTRACE_GRAPH .ret_stack = NULL /* * Stack of return addresses for functions @@ -511,4 +511,33 @@ static inline void trace_hw_branch_oops(void) {} #endif /* CONFIG_HW_BRANCH_TRACER */ +/* + * A syscall entry in the ftrace syscalls array. + * + * @name: name of the syscall + * @nb_args: number of parameters it takes + * @types: list of types as strings + * @args: list of args as strings (args[i] matches types[i]) + */ +struct syscall_metadata { + const char *name; + int nb_args; + const char **types; + const char **args; +}; + +#ifdef CONFIG_FTRACE_SYSCALLS +extern void arch_init_ftrace_syscalls(void); +extern struct syscall_metadata *syscall_nr_to_meta(int nr); +extern void start_ftrace_syscalls(void); +extern void stop_ftrace_syscalls(void); +extern void ftrace_syscall_enter(struct pt_regs *regs); +extern void ftrace_syscall_exit(struct pt_regs *regs); +#else +static inline void start_ftrace_syscalls(void) { } +static inline void stop_ftrace_syscalls(void) { } +static inline void ftrace_syscall_enter(struct pt_regs *regs) { } +static inline void ftrace_syscall_exit(struct pt_regs *regs) { } +#endif + #endif /* _LINUX_FTRACE_H */ diff --git a/trunk/include/linux/i2c.h b/trunk/include/linux/i2c.h index ad2580596033..00ee11eb9092 100644 --- a/trunk/include/linux/i2c.h +++ b/trunk/include/linux/i2c.h @@ -274,7 +274,7 @@ struct i2c_board_info { * are provided using conventional syntax. */ #define I2C_BOARD_INFO(dev_type, dev_addr) \ - .type = dev_type, .addr = (dev_addr) + .type = (dev_type), .addr = (dev_addr) /* Add-on boards should register/unregister their devices; e.g. a board diff --git a/trunk/include/linux/ide.h b/trunk/include/linux/ide.h index ff65fffb078f..a5d26f66ef78 100644 --- a/trunk/include/linux/ide.h +++ b/trunk/include/linux/ide.h @@ -239,39 +239,66 @@ typedef enum { ide_started, /* a drive operation was started, handler was set */ } ide_startstop_t; -enum { - IDE_VALID_ERROR = (1 << 1), - IDE_VALID_FEATURE = IDE_VALID_ERROR, - IDE_VALID_NSECT = (1 << 2), - IDE_VALID_LBAL = (1 << 3), - IDE_VALID_LBAM = (1 << 4), - IDE_VALID_LBAH = (1 << 5), - IDE_VALID_DEVICE = (1 << 6), - IDE_VALID_LBA = IDE_VALID_LBAL | - IDE_VALID_LBAM | - IDE_VALID_LBAH, - IDE_VALID_OUT_TF = IDE_VALID_FEATURE | - IDE_VALID_NSECT | - IDE_VALID_LBA, - IDE_VALID_IN_TF = IDE_VALID_NSECT | - IDE_VALID_LBA, - IDE_VALID_OUT_HOB = IDE_VALID_OUT_TF, - IDE_VALID_IN_HOB = IDE_VALID_ERROR | - IDE_VALID_NSECT | - IDE_VALID_LBA, -}; - enum { IDE_TFLAG_LBA48 = (1 << 0), - IDE_TFLAG_WRITE = (1 << 1), - IDE_TFLAG_CUSTOM_HANDLER = (1 << 2), - IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 3), + IDE_TFLAG_OUT_HOB_FEATURE = (1 << 1), + IDE_TFLAG_OUT_HOB_NSECT = (1 << 2), + IDE_TFLAG_OUT_HOB_LBAL = (1 << 3), + IDE_TFLAG_OUT_HOB_LBAM = (1 << 4), + IDE_TFLAG_OUT_HOB_LBAH = (1 << 5), + IDE_TFLAG_OUT_HOB = IDE_TFLAG_OUT_HOB_FEATURE | + IDE_TFLAG_OUT_HOB_NSECT | + IDE_TFLAG_OUT_HOB_LBAL | + IDE_TFLAG_OUT_HOB_LBAM | + IDE_TFLAG_OUT_HOB_LBAH, + IDE_TFLAG_OUT_FEATURE = (1 << 6), + IDE_TFLAG_OUT_NSECT = (1 << 7), + IDE_TFLAG_OUT_LBAL = (1 << 8), + IDE_TFLAG_OUT_LBAM = (1 << 9), + IDE_TFLAG_OUT_LBAH = (1 << 10), + IDE_TFLAG_OUT_TF = IDE_TFLAG_OUT_FEATURE | + IDE_TFLAG_OUT_NSECT | + IDE_TFLAG_OUT_LBAL | + IDE_TFLAG_OUT_LBAM | + IDE_TFLAG_OUT_LBAH, + IDE_TFLAG_OUT_DEVICE = (1 << 11), + IDE_TFLAG_WRITE = (1 << 12), + IDE_TFLAG_CUSTOM_HANDLER = (1 << 13), + IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 14), + IDE_TFLAG_IN_HOB_ERROR = (1 << 15), + IDE_TFLAG_IN_HOB_NSECT = (1 << 16), + IDE_TFLAG_IN_HOB_LBAL = (1 << 17), + IDE_TFLAG_IN_HOB_LBAM = (1 << 18), + IDE_TFLAG_IN_HOB_LBAH = (1 << 19), + IDE_TFLAG_IN_HOB_LBA = IDE_TFLAG_IN_HOB_LBAL | + IDE_TFLAG_IN_HOB_LBAM | + IDE_TFLAG_IN_HOB_LBAH, + IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_ERROR | + IDE_TFLAG_IN_HOB_NSECT | + IDE_TFLAG_IN_HOB_LBA, + IDE_TFLAG_IN_ERROR = (1 << 20), + IDE_TFLAG_IN_NSECT = (1 << 21), + IDE_TFLAG_IN_LBAL = (1 << 22), + IDE_TFLAG_IN_LBAM = (1 << 23), + IDE_TFLAG_IN_LBAH = (1 << 24), + IDE_TFLAG_IN_LBA = IDE_TFLAG_IN_LBAL | + IDE_TFLAG_IN_LBAM | + IDE_TFLAG_IN_LBAH, + IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT | + IDE_TFLAG_IN_LBA, + IDE_TFLAG_IN_DEVICE = (1 << 25), + IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB | + IDE_TFLAG_IN_HOB, + IDE_TFLAG_TF = IDE_TFLAG_OUT_TF | + IDE_TFLAG_IN_TF, + IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE | + IDE_TFLAG_IN_DEVICE, /* force 16-bit I/O operations */ - IDE_TFLAG_IO_16BIT = (1 << 4), + IDE_TFLAG_IO_16BIT = (1 << 26), /* struct ide_cmd was allocated using kmalloc() */ - IDE_TFLAG_DYN = (1 << 5), - IDE_TFLAG_FS = (1 << 6), - IDE_TFLAG_MULTI_PIO = (1 << 7), + IDE_TFLAG_DYN = (1 << 27), + IDE_TFLAG_FS = (1 << 28), + IDE_TFLAG_MULTI_PIO = (1 << 29), }; enum { @@ -282,34 +309,45 @@ enum { }; struct ide_taskfile { - u8 data; /* 0: data byte (for TASKFILE ioctl) */ - union { /* 1: */ - u8 error; /* read: error */ - u8 feature; /* write: feature */ + u8 hob_data; /* 0: high data byte (for TASKFILE IOCTL) */ + /* 1-5: additional data to support LBA48 */ + union { + u8 hob_error; /* read: error */ + u8 hob_feature; /* write: feature */ + }; + + u8 hob_nsect; + u8 hob_lbal; + u8 hob_lbam; + u8 hob_lbah; + + u8 data; /* 6: low data byte (for TASKFILE IOCTL) */ + + union { /*  7: */ + u8 error; /* read: error */ + u8 feature; /* write: feature */ }; - u8 nsect; /* 2: number of sectors */ - u8 lbal; /* 3: LBA low */ - u8 lbam; /* 4: LBA mid */ - u8 lbah; /* 5: LBA high */ - u8 device; /* 6: device select */ - union { /* 7: */ - u8 status; /* read: status */ + + u8 nsect; /* 8: number of sectors */ + u8 lbal; /* 9: LBA low */ + u8 lbam; /* 10: LBA mid */ + u8 lbah; /* 11: LBA high */ + + u8 device; /* 12: device select */ + + union { /* 13: */ + u8 status; /*  read: status  */ u8 command; /* write: command */ }; }; struct ide_cmd { - struct ide_taskfile tf; - struct ide_taskfile hob; - struct { - struct { - u8 tf; - u8 hob; - } out, in; - } valid; - - u8 tf_flags; + union { + struct ide_taskfile tf; + u8 tf_array[14]; + }; u8 ftf_flags; /* for TASKFILE ioctl */ + u32 tf_flags; int protocol; int sg_nents; /* number of sg entries */ @@ -624,8 +662,8 @@ struct ide_tp_ops { void (*write_devctl)(struct hwif_s *, u8); void (*dev_select)(ide_drive_t *); - void (*tf_load)(ide_drive_t *, struct ide_taskfile *, u8); - void (*tf_read)(ide_drive_t *, struct ide_taskfile *, u8); + void (*tf_load)(ide_drive_t *, struct ide_cmd *); + void (*tf_read)(ide_drive_t *, struct ide_cmd *); void (*input_data)(ide_drive_t *, struct ide_cmd *, void *, unsigned int); @@ -1124,8 +1162,7 @@ extern int ide_devset_execute(ide_drive_t *drive, void ide_complete_cmd(ide_drive_t *, struct ide_cmd *, u8, u8); int ide_complete_rq(ide_drive_t *, int, unsigned int); -void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd); -void ide_tf_dump(const char *, struct ide_cmd *); +void ide_tf_dump(const char *, struct ide_taskfile *); void ide_exec_command(ide_hwif_t *, u8); u8 ide_read_status(ide_hwif_t *); @@ -1133,8 +1170,8 @@ u8 ide_read_altstatus(ide_hwif_t *); void ide_write_devctl(ide_hwif_t *, u8); void ide_dev_select(ide_drive_t *); -void ide_tf_load(ide_drive_t *, struct ide_taskfile *, u8); -void ide_tf_read(ide_drive_t *, struct ide_taskfile *, u8); +void ide_tf_load(ide_drive_t *, struct ide_cmd *); +void ide_tf_read(ide_drive_t *, struct ide_cmd *); void ide_input_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int); void ide_output_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int); @@ -1492,7 +1529,7 @@ static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data) extern void ide_toggle_bounce(ide_drive_t *drive, int on); -u64 ide_get_lba_addr(struct ide_cmd *, int); +u64 ide_get_lba_addr(struct ide_taskfile *, int); u8 ide_dump_status(ide_drive_t *, const char *, u8); struct ide_timing { diff --git a/trunk/include/linux/init_task.h b/trunk/include/linux/init_task.h index d87247d2641f..dcfb93337e9a 100644 --- a/trunk/include/linux/init_task.h +++ b/trunk/include/linux/init_task.h @@ -15,6 +15,19 @@ extern struct files_struct init_files; extern struct fs_struct init_fs; +#define INIT_KIOCTX(name, which_mm) \ +{ \ + .users = ATOMIC_INIT(1), \ + .dead = 0, \ + .mm = &which_mm, \ + .user_id = 0, \ + .next = NULL, \ + .wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait), \ + .ctx_lock = __SPIN_LOCK_UNLOCKED(name.ctx_lock), \ + .reqs_active = 0U, \ + .max_reqs = ~0U, \ +} + #define INIT_MM(name) \ { \ .mm_rb = RB_ROOT, \ diff --git a/trunk/include/linux/irq.h b/trunk/include/linux/irq.h index b7cbeed972e4..ca507c9426b0 100644 --- a/trunk/include/linux/irq.h +++ b/trunk/include/linux/irq.h @@ -487,16 +487,6 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc, #endif } -static inline void free_desc_masks(struct irq_desc *old_desc, - struct irq_desc *new_desc) -{ - free_cpumask_var(old_desc->affinity); - -#ifdef CONFIG_GENERIC_PENDING_IRQ - free_cpumask_var(old_desc->pending_mask); -#endif -} - #else /* !CONFIG_SMP */ static inline bool init_alloc_desc_masks(struct irq_desc *desc, int cpu, @@ -510,10 +500,6 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc, { } -static inline void free_desc_masks(struct irq_desc *old_desc, - struct irq_desc *new_desc) -{ -} #endif /* CONFIG_SMP */ #endif /* _LINUX_IRQ_H */ diff --git a/trunk/include/linux/kmod.h b/trunk/include/linux/kmod.h index 384ca8bbf1ac..d5fa565086d1 100644 --- a/trunk/include/linux/kmod.h +++ b/trunk/include/linux/kmod.h @@ -34,7 +34,7 @@ extern int __request_module(bool wait, const char *name, ...) \ #define request_module(mod...) __request_module(true, mod) #define request_module_nowait(mod...) __request_module(false, mod) #define try_then_request_module(x, mod...) \ - ((x) ?: (__request_module(true, mod), (x))) + ((x) ?: (__request_module(false, mod), (x))) #else static inline int request_module(const char *name, ...) { return -ENOSYS; } static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; } diff --git a/trunk/include/linux/pci_ids.h b/trunk/include/linux/pci_ids.h index 06ba90c211a5..ee98cd570885 100644 --- a/trunk/include/linux/pci_ids.h +++ b/trunk/include/linux/pci_ids.h @@ -2514,8 +2514,6 @@ #define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433 #define PCI_DEVICE_ID_INTEL_82830_HB 0x3575 #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577 -#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c -#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e #define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580 #define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582 #define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590 diff --git a/trunk/include/linux/percpu.h b/trunk/include/linux/percpu.h index cfda2d5ad319..ee5615d65211 100644 --- a/trunk/include/linux/percpu.h +++ b/trunk/include/linux/percpu.h @@ -168,56 +168,4 @@ static inline void free_percpu(void *p) #define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \ __alignof__(type)) -/* - * Optional methods for optimized non-lvalue per-cpu variable access. - * - * @var can be a percpu variable or a field of it and its size should - * equal char, int or long. percpu_read() evaluates to a lvalue and - * all others to void. - * - * These operations are guaranteed to be atomic w.r.t. preemption. - * The generic versions use plain get/put_cpu_var(). Archs are - * encouraged to implement single-instruction alternatives which don't - * require preemption protection. - */ -#ifndef percpu_read -# define percpu_read(var) \ - ({ \ - typeof(per_cpu_var(var)) __tmp_var__; \ - __tmp_var__ = get_cpu_var(var); \ - put_cpu_var(var); \ - __tmp_var__; \ - }) -#endif - -#define __percpu_generic_to_op(var, val, op) \ -do { \ - get_cpu_var(var) op val; \ - put_cpu_var(var); \ -} while (0) - -#ifndef percpu_write -# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =) -#endif - -#ifndef percpu_add -# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=) -#endif - -#ifndef percpu_sub -# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=) -#endif - -#ifndef percpu_and -# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=) -#endif - -#ifndef percpu_or -# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=) -#endif - -#ifndef percpu_xor -# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=) -#endif - #endif /* __LINUX_PERCPU_H */ diff --git a/trunk/include/linux/rotary_encoder.h b/trunk/include/linux/rotary_encoder.h deleted file mode 100644 index 12d63a30c347..000000000000 --- a/trunk/include/linux/rotary_encoder.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __ROTARY_ENCODER_H__ -#define __ROTARY_ENCODER_H__ - -struct rotary_encoder_platform_data { - unsigned int steps; - unsigned int axis; - unsigned int gpio_a; - unsigned int gpio_b; - unsigned int inverted_a; - unsigned int inverted_b; -}; - -#endif /* __ROTARY_ENCODER_H__ */ diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index b4c38bc8049c..98e1fe51601d 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -205,8 +205,7 @@ extern unsigned long long time_sync_thresh; #define task_is_stopped_or_traced(task) \ ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) #define task_contributes_to_load(task) \ - ((task->state & TASK_UNINTERRUPTIBLE) != 0 && \ - (task->flags & PF_FROZEN) == 0) + ((task->state & TASK_UNINTERRUPTIBLE) != 0) #define __set_task_state(tsk, state_value) \ do { (tsk)->state = (state_value); } while (0) diff --git a/trunk/include/linux/sht15.h b/trunk/include/linux/sht15.h deleted file mode 100644 index 046bce05ecab..000000000000 --- a/trunk/include/linux/sht15.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * sht15.h - support for the SHT15 Temperature and Humidity Sensor - * - * Copyright (c) 2009 Jonathan Cameron - * - * Copyright (c) 2007 Wouter Horre - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/** - * struct sht15_platform_data - sht15 connectivity info - * @gpio_data: no. of gpio to which bidirectional data line is connected - * @gpio_sck: no. of gpio to which the data clock is connected. - * @supply_mv: supply voltage in mv. Overridden by regulator if available. - **/ -struct sht15_platform_data { - int gpio_data; - int gpio_sck; - int supply_mv; -}; - diff --git a/trunk/include/linux/spi/ad7879.h b/trunk/include/linux/spi/ad7879.h deleted file mode 100644 index 4231104c9afa..000000000000 --- a/trunk/include/linux/spi/ad7879.h +++ /dev/null @@ -1,35 +0,0 @@ -/* linux/spi/ad7879.h */ - -/* Touchscreen characteristics vary between boards and models. The - * platform_data for the device's "struct device" holds this information. - * - * It's OK if the min/max values are zero. - */ -struct ad7879_platform_data { - u16 model; /* 7879 */ - u16 x_plate_ohms; - u16 x_min, x_max; - u16 y_min, y_max; - u16 pressure_min, pressure_max; - - /* [0..255] 0=OFF Starts at 1=550us and goes - * all the way to 9.440ms in steps of 35us. - */ - u8 pen_down_acc_interval; - /* [0..15] Starts at 0=128us and goes all the - * way to 4.096ms in steps of 128us. - */ - u8 first_conversion_delay; - /* [0..3] 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */ - u8 acquisition_time; - /* [0..3] Average X middle samples 0 = 2, 1 = 4, 2 = 8, 3 = 16 */ - u8 averaging; - /* [0..3] Perform X measurements 0 = OFF, - * 1 = 4, 2 = 8, 3 = 16 (median > averaging) - */ - u8 median; - /* 1 = AUX/VBAT/GPIO set to GPIO Output */ - u8 gpio_output; - /* Initial GPIO pin state (valid if gpio_output = 1) */ - u8 gpio_default; -}; diff --git a/trunk/include/linux/stringify.h b/trunk/include/linux/stringify.h index 841cec8ed525..0b4388356c87 100644 --- a/trunk/include/linux/stringify.h +++ b/trunk/include/linux/stringify.h @@ -6,7 +6,7 @@ * converts to "bar". */ -#define __stringify_1(x...) #x -#define __stringify(x...) __stringify_1(x) +#define __stringify_1(x) #x +#define __stringify(x) __stringify_1(x) #endif /* !__LINUX_STRINGIFY_H */ diff --git a/trunk/include/linux/syscalls.h b/trunk/include/linux/syscalls.h index dabe4ad89141..6470f74074af 100644 --- a/trunk/include/linux/syscalls.h +++ b/trunk/include/linux/syscalls.h @@ -65,7 +65,7 @@ struct old_linux_dirent; #include #include #include -#include +#include #define __SC_DECL1(t1, a1) t1 a1 #define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__) diff --git a/trunk/include/linux/usb/serial.h b/trunk/include/linux/usb/serial.h index 625e9e4639c6..b95842542590 100644 --- a/trunk/include/linux/usb/serial.h +++ b/trunk/include/linux/usb/serial.h @@ -29,7 +29,7 @@ /** * usb_serial_port: structure for the specific ports of a device. * @serial: pointer back to the struct usb_serial owner of this port. - * @port: pointer to the corresponding tty_port for this port. + * @tty: pointer to the corresponding tty for this port. * @lock: spinlock to grab when updating portions of this structure. * @mutex: mutex used to synchronize serial_open() and serial_close() * access for this port. @@ -44,22 +44,19 @@ * @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe * for this port. * @bulk_in_buffer: pointer to the bulk in buffer for this port. - * @bulk_in_size: the size of the bulk_in_buffer, in bytes. * @read_urb: pointer to the bulk in struct urb for this port. * @bulk_in_endpointAddress: endpoint address for the bulk in pipe for this * port. * @bulk_out_buffer: pointer to the bulk out buffer for this port. * @bulk_out_size: the size of the bulk_out_buffer, in bytes. * @write_urb: pointer to the bulk out struct urb for this port. - * @write_urb_busy: port`s writing status * @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this * port. * @write_wait: a wait_queue_head_t used by the port. * @work: work queue entry for the line discipline waking up. + * @open_count: number of times this port has been opened. * @throttled: nonzero if the read urb is inactive to throttle the device * @throttle_req: nonzero if the tty wants to throttle us - * @console: attached usb serial console - * @dev: pointer to the serial device * * This structure is used by the usb-serial core and drivers for the specific * ports of a device. diff --git a/trunk/include/scsi/scsi_scan.h b/trunk/include/scsi/scsi_scan.h deleted file mode 100644 index 78898889243d..000000000000 --- a/trunk/include/scsi/scsi_scan.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _SCSI_SCSI_SCAN_H -#define _SCSI_SCSI_SCAN_H - -#ifdef CONFIG_SCSI -/* drivers/scsi/scsi_scan.c */ -extern int scsi_complete_async_scans(void); -#else -static inline int scsi_complete_async_scans(void) { return 0; } -#endif - -#endif /* _SCSI_SCSI_SCAN_H */ diff --git a/trunk/include/trace/syscall.h b/trunk/include/trace/syscall.h deleted file mode 100644 index 8cfe515cbc47..000000000000 --- a/trunk/include/trace/syscall.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _TRACE_SYSCALL_H -#define _TRACE_SYSCALL_H - -#include - -/* - * A syscall entry in the ftrace syscalls array. - * - * @name: name of the syscall - * @nb_args: number of parameters it takes - * @types: list of types as strings - * @args: list of args as strings (args[i] matches types[i]) - */ -struct syscall_metadata { - const char *name; - int nb_args; - const char **types; - const char **args; -}; - -#ifdef CONFIG_FTRACE_SYSCALLS -extern void arch_init_ftrace_syscalls(void); -extern struct syscall_metadata *syscall_nr_to_meta(int nr); -extern void start_ftrace_syscalls(void); -extern void stop_ftrace_syscalls(void); -extern void ftrace_syscall_enter(struct pt_regs *regs); -extern void ftrace_syscall_exit(struct pt_regs *regs); -#else -static inline void start_ftrace_syscalls(void) { } -static inline void stop_ftrace_syscalls(void) { } -static inline void ftrace_syscall_enter(struct pt_regs *regs) { } -static inline void ftrace_syscall_exit(struct pt_regs *regs) { } -#endif - -#endif /* _TRACE_SYSCALL_H */ diff --git a/trunk/include/video/cyblafb.h b/trunk/include/video/cyblafb.h new file mode 100644 index 000000000000..d3c1d4e2c8e3 --- /dev/null +++ b/trunk/include/video/cyblafb.h @@ -0,0 +1,175 @@ + +#ifndef CYBLAFB_DEBUG +#define CYBLAFB_DEBUG 0 +#endif + +#if CYBLAFB_DEBUG +#define debug(f,a...) printk("%s:" f, __func__ , ## a); +#else +#define debug(f,a...) +#endif + +#define output(f, a...) printk("cyblafb: " f, ## a) + +#define Kb (1024) +#define Mb (Kb*Kb) + +/* PCI IDS of supported cards temporarily here */ + +#define CYBERBLADEi1 0x8500 + +/* these defines are for 'lcd' variable */ +#define LCD_STRETCH 0 +#define LCD_CENTER 1 +#define LCD_BIOS 2 + +/* display types */ +#define DISPLAY_CRT 0 +#define DISPLAY_FP 1 + +#define ROP_S 0xCC + +#define point(x,y) ((y)<<16|(x)) + +// +// Attribute Regs, ARxx, 3c0/3c1 +// +#define AR00 0x00 +#define AR01 0x01 +#define AR02 0x02 +#define AR03 0x03 +#define AR04 0x04 +#define AR05 0x05 +#define AR06 0x06 +#define AR07 0x07 +#define AR08 0x08 +#define AR09 0x09 +#define AR0A 0x0A +#define AR0B 0x0B +#define AR0C 0x0C +#define AR0D 0x0D +#define AR0E 0x0E +#define AR0F 0x0F +#define AR10 0x10 +#define AR12 0x12 +#define AR13 0x13 + +// +// Sequencer Regs, SRxx, 3c4/3c5 +// +#define SR00 0x00 +#define SR01 0x01 +#define SR02 0x02 +#define SR03 0x03 +#define SR04 0x04 +#define SR0D 0x0D +#define SR0E 0x0E +#define SR11 0x11 +#define SR18 0x18 +#define SR19 0x19 + +// +// +// +#define CR00 0x00 +#define CR01 0x01 +#define CR02 0x02 +#define CR03 0x03 +#define CR04 0x04 +#define CR05 0x05 +#define CR06 0x06 +#define CR07 0x07 +#define CR08 0x08 +#define CR09 0x09 +#define CR0A 0x0A +#define CR0B 0x0B +#define CR0C 0x0C +#define CR0D 0x0D +#define CR0E 0x0E +#define CR0F 0x0F +#define CR10 0x10 +#define CR11 0x11 +#define CR12 0x12 +#define CR13 0x13 +#define CR14 0x14 +#define CR15 0x15 +#define CR16 0x16 +#define CR17 0x17 +#define CR18 0x18 +#define CR19 0x19 +#define CR1A 0x1A +#define CR1B 0x1B +#define CR1C 0x1C +#define CR1D 0x1D +#define CR1E 0x1E +#define CR1F 0x1F +#define CR20 0x20 +#define CR21 0x21 +#define CR27 0x27 +#define CR29 0x29 +#define CR2A 0x2A +#define CR2B 0x2B +#define CR2D 0x2D +#define CR2F 0x2F +#define CR36 0x36 +#define CR38 0x38 +#define CR39 0x39 +#define CR3A 0x3A +#define CR55 0x55 +#define CR56 0x56 +#define CR57 0x57 +#define CR58 0x58 + +// +// +// + +#define GR00 0x01 +#define GR01 0x01 +#define GR02 0x02 +#define GR03 0x03 +#define GR04 0x04 +#define GR05 0x05 +#define GR06 0x06 +#define GR07 0x07 +#define GR08 0x08 +#define GR0F 0x0F +#define GR20 0x20 +#define GR23 0x23 +#define GR2F 0x2F +#define GR30 0x30 +#define GR31 0x31 +#define GR33 0x33 +#define GR52 0x52 +#define GR53 0x53 +#define GR5D 0x5d + + +// +// Graphics Engine +// +#define GEBase 0x2100 // could be mapped elsewhere if we like it +#define GE00 (GEBase+0x00) // source 1, p 111 +#define GE04 (GEBase+0x04) // source 2, p 111 +#define GE08 (GEBase+0x08) // destination 1, p 111 +#define GE0C (GEBase+0x0C) // destination 2, p 112 +#define GE10 (GEBase+0x10) // right view base & enable, p 112 +#define GE13 (GEBase+0x13) // left view base & enable, p 112 +#define GE18 (GEBase+0x18) // block write start address, p 112 +#define GE1C (GEBase+0x1C) // block write end address, p 112 +#define GE20 (GEBase+0x20) // engine status, p 113 +#define GE24 (GEBase+0x24) // reset all GE pointers +#define GE44 (GEBase+0x44) // command register, p 126 +#define GE48 (GEBase+0x48) // raster operation, p 127 +#define GE60 (GEBase+0x60) // foreground color, p 128 +#define GE64 (GEBase+0x64) // background color, p 128 +#define GE6C (GEBase+0x6C) // Pattern and Style, p 129, ok +#define GE9C (GEBase+0x9C) // pixel engine data port, p 125 +#define GEB8 (GEBase+0xB8) // Destination Stride / Buffer Base 0, p 133 +#define GEBC (GEBase+0xBC) // Destination Stride / Buffer Base 1, p 133 +#define GEC0 (GEBase+0xC0) // Destination Stride / Buffer Base 2, p 133 +#define GEC4 (GEBase+0xC4) // Destination Stride / Buffer Base 3, p 133 +#define GEC8 (GEBase+0xC8) // Source Stride / Buffer Base 0, p 133 +#define GECC (GEBase+0xCC) // Source Stride / Buffer Base 1, p 133 +#define GED0 (GEBase+0xD0) // Source Stride / Buffer Base 2, p 133 +#define GED4 (GEBase+0xD4) // Source Stride / Buffer Base 3, p 133 diff --git a/trunk/init/Kconfig b/trunk/init/Kconfig index 7be4d3836745..f2f9b5362b48 100644 --- a/trunk/init/Kconfig +++ b/trunk/init/Kconfig @@ -808,14 +808,6 @@ config KALLSYMS_EXTRA_PASS you wait for kallsyms to be fixed. -config STRIP_ASM_SYMS - bool "Strip assembler-generated symbols during link" - default n - help - Strip internal assembler-generated symbols during a link (symbols - that look like '.Lxxx') so they don't pollute the output of - get_wchan() and suchlike. - config HOTPLUG bool "Support for hot-pluggable devices" if EMBEDDED default y diff --git a/trunk/init/initramfs.c b/trunk/init/initramfs.c index 9ee7b7810417..80cd713f6cc5 100644 --- a/trunk/init/initramfs.c +++ b/trunk/init/initramfs.c @@ -310,8 +310,7 @@ static int __init do_name(void) if (wfd >= 0) { sys_fchown(wfd, uid, gid); sys_fchmod(wfd, mode); - if (body_len) - sys_ftruncate(wfd, body_len); + sys_ftruncate(wfd, body_len); vcollected = kstrdup(collected, GFP_KERNEL); state = CopyFile; } @@ -516,7 +515,6 @@ static void __init free_initrd(void) initrd_end = 0; } -#ifdef CONFIG_BLK_DEV_RAM #define BUF_SIZE 1024 static void __init clean_rootfs(void) { @@ -563,7 +561,6 @@ static void __init clean_rootfs(void) sys_close(fd); kfree(buf); } -#endif static int __init populate_rootfs(void) { diff --git a/trunk/ipc/mq_sysctl.c b/trunk/ipc/mq_sysctl.c index 24ae46dfe45d..89f60ec8ee54 100644 --- a/trunk/ipc/mq_sysctl.c +++ b/trunk/ipc/mq_sysctl.c @@ -22,7 +22,6 @@ #define MIN_MSGSIZEMAX 128 /* min value for msgsize_max */ #define MAX_MSGSIZEMAX (8192*128) /* max value for msgsize_max */ -#ifdef CONFIG_PROC_SYSCTL static void *get_mq(ctl_table *table) { char *which = table->data; @@ -31,6 +30,7 @@ static void *get_mq(ctl_table *table) return which; } +#ifdef CONFIG_PROC_SYSCTL static int proc_mq_dointvec(ctl_table *table, int write, struct file *filp, void __user *buffer, size_t *lenp, loff_t *ppos) { diff --git a/trunk/kernel/fork.c b/trunk/kernel/fork.c index b9e2edd00726..989c7c202b3d 100644 --- a/trunk/kernel/fork.c +++ b/trunk/kernel/fork.c @@ -800,12 +800,6 @@ static void posix_cpu_timers_init_group(struct signal_struct *sig) sig->cputime_expires.virt_exp = cputime_zero; sig->cputime_expires.sched_exp = 0; - if (sig->rlim[RLIMIT_CPU].rlim_cur != RLIM_INFINITY) { - sig->cputime_expires.prof_exp = - secs_to_cputime(sig->rlim[RLIMIT_CPU].rlim_cur); - sig->cputimer.running = 1; - } - /* The timer lists. */ INIT_LIST_HEAD(&sig->cpu_timers[0]); INIT_LIST_HEAD(&sig->cpu_timers[1]); @@ -821,8 +815,11 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk) atomic_inc(¤t->signal->live); return 0; } - sig = kmem_cache_alloc(signal_cachep, GFP_KERNEL); + + if (sig) + posix_cpu_timers_init_group(sig); + tsk->signal = sig; if (!sig) return -ENOMEM; @@ -862,8 +859,6 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk) memcpy(sig->rlim, current->signal->rlim, sizeof sig->rlim); task_unlock(current->group_leader); - posix_cpu_timers_init_group(sig); - acct_init_pacct(&sig->pacct); tty_audit_fork(sig); diff --git a/trunk/kernel/futex.c b/trunk/kernel/futex.c index eef8cd26b5e5..6b50a024bca2 100644 --- a/trunk/kernel/futex.c +++ b/trunk/kernel/futex.c @@ -883,12 +883,7 @@ static int futex_requeue(u32 __user *uaddr1, int fshared, u32 __user *uaddr2, out_unlock: double_unlock_hb(hb1, hb2); - /* - * drop_futex_key_refs() must be called outside the spinlocks. During - * the requeue we moved futex_q's from the hash bucket at key1 to the - * one at key2 and updated their key pointer. We no longer need to - * hold the references to key1. - */ + /* drop_futex_key_refs() must be called outside the spinlocks. */ while (--drop_count >= 0) drop_futex_key_refs(&key1); diff --git a/trunk/kernel/irq/numa_migrate.c b/trunk/kernel/irq/numa_migrate.c index 44bbdcbaf8d2..243d6121e50e 100644 --- a/trunk/kernel/irq/numa_migrate.c +++ b/trunk/kernel/irq/numa_migrate.c @@ -54,7 +54,6 @@ static bool init_copy_one_irq_desc(int irq, struct irq_desc *old_desc, static void free_one_irq_desc(struct irq_desc *old_desc, struct irq_desc *desc) { free_kstat_irqs(old_desc, desc); - free_desc_masks(old_desc, desc); arch_free_chip_data(old_desc, desc); } diff --git a/trunk/kernel/module.c b/trunk/kernel/module.c index e797812a4d95..05f014efa32c 100644 --- a/trunk/kernel/module.c +++ b/trunk/kernel/module.c @@ -2388,9 +2388,6 @@ SYSCALL_DEFINE3(init_module, void __user *, umod, blocking_notifier_call_chain(&module_notify_list, MODULE_STATE_LIVE, mod); - /* We need to finish all async code before the module init sequence is done */ - async_synchronize_full(); - mutex_lock(&module_mutex); /* Drop initial reference. */ module_put(mod); diff --git a/trunk/kernel/mutex.c b/trunk/kernel/mutex.c index 507cf2b5e9f1..5d79781394a3 100644 --- a/trunk/kernel/mutex.c +++ b/trunk/kernel/mutex.c @@ -148,8 +148,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, preempt_disable(); mutex_acquire(&lock->dep_map, subclass, 0, ip); -#if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES) && \ - !defined(CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES) +#if defined(CONFIG_SMP) && !defined(CONFIG_DEBUG_MUTEXES) /* * Optimistic spinning. * diff --git a/trunk/kernel/panic.c b/trunk/kernel/panic.c index 934fb377f4b3..3fd8c5bf8b39 100644 --- a/trunk/kernel/panic.c +++ b/trunk/kernel/panic.c @@ -213,16 +213,8 @@ unsigned long get_taint(void) void add_taint(unsigned flag) { - /* - * Can't trust the integrity of the kernel anymore. - * We don't call directly debug_locks_off() because the issue - * is not necessarily serious enough to set oops_in_progress to 1 - * Also we want to keep up lockdep for staging development and - * post-warning case. - */ - if (flag != TAINT_CRAP && flag != TAINT_WARN && __debug_locks_off()) - printk(KERN_WARNING "Disabling lockdep due to kernel taint\n"); - + /* can't trust the integrity of the kernel anymore: */ + debug_locks = 0; set_bit(flag, &tainted_mask); } EXPORT_SYMBOL(add_taint); diff --git a/trunk/kernel/posix-cpu-timers.c b/trunk/kernel/posix-cpu-timers.c index c9dcf98b4463..8e5d9a68b022 100644 --- a/trunk/kernel/posix-cpu-timers.c +++ b/trunk/kernel/posix-cpu-timers.c @@ -18,7 +18,7 @@ void update_rlimit_cpu(unsigned long rlim_new) cputime = secs_to_cputime(rlim_new); if (cputime_eq(current->signal->it_prof_expires, cputime_zero) || - cputime_gt(current->signal->it_prof_expires, cputime)) { + cputime_lt(current->signal->it_prof_expires, cputime)) { spin_lock_irq(¤t->sighand->siglock); set_process_cpu_timer(current, CPUCLOCK_PROF, &cputime, NULL); spin_unlock_irq(¤t->sighand->siglock); @@ -224,7 +224,7 @@ static int cpu_clock_sample(const clockid_t which_clock, struct task_struct *p, cpu->cpu = virt_ticks(p); break; case CPUCLOCK_SCHED: - cpu->sched = task_sched_runtime(p); + cpu->sched = p->se.sum_exec_runtime + task_delta_exec(p); break; } return 0; @@ -305,19 +305,18 @@ static int cpu_clock_sample_group(const clockid_t which_clock, { struct task_cputime cputime; + thread_group_cputime(p, &cputime); switch (CPUCLOCK_WHICH(which_clock)) { default: return -EINVAL; case CPUCLOCK_PROF: - thread_group_cputime(p, &cputime); cpu->cpu = cputime_add(cputime.utime, cputime.stime); break; case CPUCLOCK_VIRT: - thread_group_cputime(p, &cputime); cpu->cpu = cputime.utime; break; case CPUCLOCK_SCHED: - cpu->sched = thread_group_sched_runtime(p); + cpu->sched = cputime.sum_exec_runtime + task_delta_exec(p); break; } return 0; diff --git a/trunk/kernel/power/disk.c b/trunk/kernel/power/disk.c index 0854770b63b9..5f21ab2bbcdf 100644 --- a/trunk/kernel/power/disk.c +++ b/trunk/kernel/power/disk.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include "power.h" @@ -645,13 +644,6 @@ static int software_resume(void) if (noresume) return 0; - /* - * We can't depend on SCSI devices being available after loading one of - * their modules if scsi_complete_async_scans() is not called and the - * resume device usually is a SCSI one. - */ - scsi_complete_async_scans(); - /* * name_to_dev_t() below takes a sysfs buffer mutex when sysfs * is configured into the kernel. Since the regular hibernate diff --git a/trunk/kernel/power/user.c b/trunk/kernel/power/user.c index ed97375daae9..6c85359364f2 100644 --- a/trunk/kernel/power/user.c +++ b/trunk/kernel/power/user.c @@ -24,7 +24,6 @@ #include #include #include -#include #include @@ -93,7 +92,6 @@ static int snapshot_open(struct inode *inode, struct file *filp) filp->private_data = data; memset(&data->handle, 0, sizeof(struct snapshot_handle)); if ((filp->f_flags & O_ACCMODE) == O_RDONLY) { - /* Hibernating. The image device should be accessible. */ data->swap = swsusp_resume_device ? swap_type_of(swsusp_resume_device, 0, NULL) : -1; data->mode = O_RDONLY; @@ -101,13 +99,6 @@ static int snapshot_open(struct inode *inode, struct file *filp) if (error) pm_notifier_call_chain(PM_POST_HIBERNATION); } else { - /* - * Resuming. We may need to wait for the image device to - * appear. - */ - wait_for_device_probe(); - scsi_complete_async_scans(); - data->swap = -1; data->mode = O_WRONLY; error = pm_notifier_call_chain(PM_RESTORE_PREPARE); diff --git a/trunk/kernel/ptrace.c b/trunk/kernel/ptrace.c index dfcd83ceee3b..64191fa09b7e 100644 --- a/trunk/kernel/ptrace.c +++ b/trunk/kernel/ptrace.c @@ -604,11 +604,10 @@ int ptrace_traceme(void) ret = security_ptrace_traceme(current->parent); /* - * Check PF_EXITING to ensure ->real_parent has not passed - * exit_ptrace(). Otherwise we don't report the error but - * pretend ->real_parent untraces us right after return. + * Set the ptrace bit in the process ptrace flags. + * Then link us on our parent's ptraced list. */ - if (!ret && !(current->real_parent->flags & PF_EXITING)) { + if (!ret) { current->ptrace |= PT_PTRACED; __ptrace_link(current, current->real_parent); } diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index 5724508c3b66..6cc1fd5d5072 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -1418,22 +1418,10 @@ iter_move_one_task(struct rq *this_rq, int this_cpu, struct rq *busiest, struct rq_iterator *iterator); #endif -/* Time spent by the tasks of the cpu accounting group executing in ... */ -enum cpuacct_stat_index { - CPUACCT_STAT_USER, /* ... user mode */ - CPUACCT_STAT_SYSTEM, /* ... kernel mode */ - - CPUACCT_STAT_NSTATS, -}; - #ifdef CONFIG_CGROUP_CPUACCT static void cpuacct_charge(struct task_struct *tsk, u64 cputime); -static void cpuacct_update_stats(struct task_struct *tsk, - enum cpuacct_stat_index idx, cputime_t val); #else static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime) {} -static inline void cpuacct_update_stats(struct task_struct *tsk, - enum cpuacct_stat_index idx, cputime_t val) {} #endif static inline void inc_cpu_load(struct rq *rq, unsigned long load) @@ -4523,25 +4511,9 @@ DEFINE_PER_CPU(struct kernel_stat, kstat); EXPORT_PER_CPU_SYMBOL(kstat); /* - * Return any ns on the sched_clock that have not yet been accounted in + * Return any ns on the sched_clock that have not yet been banked in * @p in case that task is currently running. - * - * Called with task_rq_lock() held on @rq. */ -static u64 do_task_delta_exec(struct task_struct *p, struct rq *rq) -{ - u64 ns = 0; - - if (task_current(rq, p)) { - update_rq_clock(rq); - ns = rq->clock - p->se.exec_start; - if ((s64)ns < 0) - ns = 0; - } - - return ns; -} - unsigned long long task_delta_exec(struct task_struct *p) { unsigned long flags; @@ -4549,49 +4521,16 @@ unsigned long long task_delta_exec(struct task_struct *p) u64 ns = 0; rq = task_rq_lock(p, &flags); - ns = do_task_delta_exec(p, rq); - task_rq_unlock(rq, &flags); - - return ns; -} - -/* - * Return accounted runtime for the task. - * In case the task is currently running, return the runtime plus current's - * pending runtime that have not been accounted yet. - */ -unsigned long long task_sched_runtime(struct task_struct *p) -{ - unsigned long flags; - struct rq *rq; - u64 ns = 0; - - rq = task_rq_lock(p, &flags); - ns = p->se.sum_exec_runtime + do_task_delta_exec(p, rq); - task_rq_unlock(rq, &flags); - return ns; -} + if (task_current(rq, p)) { + u64 delta_exec; -/* - * Return sum_exec_runtime for the thread group. - * In case the task is currently running, return the sum plus current's - * pending runtime that have not been accounted yet. - * - * Note that the thread group might have other running tasks as well, - * so the return value not includes other pending runtime that other - * running tasks might have. - */ -unsigned long long thread_group_sched_runtime(struct task_struct *p) -{ - struct task_cputime totals; - unsigned long flags; - struct rq *rq; - u64 ns; + update_rq_clock(rq); + delta_exec = rq->clock - p->se.exec_start; + if ((s64)delta_exec > 0) + ns = delta_exec; + } - rq = task_rq_lock(p, &flags); - thread_group_cputime(p, &totals); - ns = totals.sum_exec_runtime + do_task_delta_exec(p, rq); task_rq_unlock(rq, &flags); return ns; @@ -4620,8 +4559,6 @@ void account_user_time(struct task_struct *p, cputime_t cputime, cpustat->nice = cputime64_add(cpustat->nice, tmp); else cpustat->user = cputime64_add(cpustat->user, tmp); - - cpuacct_update_stats(p, CPUACCT_STAT_USER, cputime); /* Account for user time used */ acct_update_integrals(p); } @@ -4683,8 +4620,6 @@ void account_system_time(struct task_struct *p, int hardirq_offset, else cpustat->system = cputime64_add(cpustat->system, tmp); - cpuacct_update_stats(p, CPUACCT_STAT_SYSTEM, cputime); - /* Account for system time used */ acct_update_integrals(p); } @@ -7367,8 +7302,7 @@ static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level, cpumask_or(groupmask, groupmask, sched_group_cpus(group)); cpulist_scnprintf(str, sizeof(str), sched_group_cpus(group)); - printk(KERN_CONT " %s (__cpu_power = %d)", str, - group->__cpu_power); + printk(KERN_CONT " %s", str); group = group->next; } while (group != sd->groups); @@ -9991,7 +9925,6 @@ struct cpuacct { struct cgroup_subsys_state css; /* cpuusage holds pointer to a u64-type object on every cpu */ u64 *cpuusage; - struct percpu_counter cpustat[CPUACCT_STAT_NSTATS]; struct cpuacct *parent; }; @@ -10016,32 +9949,20 @@ static struct cgroup_subsys_state *cpuacct_create( struct cgroup_subsys *ss, struct cgroup *cgrp) { struct cpuacct *ca = kzalloc(sizeof(*ca), GFP_KERNEL); - int i; if (!ca) - goto out; + return ERR_PTR(-ENOMEM); ca->cpuusage = alloc_percpu(u64); - if (!ca->cpuusage) - goto out_free_ca; - - for (i = 0; i < CPUACCT_STAT_NSTATS; i++) - if (percpu_counter_init(&ca->cpustat[i], 0)) - goto out_free_counters; + if (!ca->cpuusage) { + kfree(ca); + return ERR_PTR(-ENOMEM); + } if (cgrp->parent) ca->parent = cgroup_ca(cgrp->parent); return &ca->css; - -out_free_counters: - while (--i >= 0) - percpu_counter_destroy(&ca->cpustat[i]); - free_percpu(ca->cpuusage); -out_free_ca: - kfree(ca); -out: - return ERR_PTR(-ENOMEM); } /* destroy an existing cpu accounting group */ @@ -10049,10 +9970,7 @@ static void cpuacct_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp) { struct cpuacct *ca = cgroup_ca(cgrp); - int i; - for (i = 0; i < CPUACCT_STAT_NSTATS; i++) - percpu_counter_destroy(&ca->cpustat[i]); free_percpu(ca->cpuusage); kfree(ca); } @@ -10139,25 +10057,6 @@ static int cpuacct_percpu_seq_read(struct cgroup *cgroup, struct cftype *cft, return 0; } -static const char *cpuacct_stat_desc[] = { - [CPUACCT_STAT_USER] = "user", - [CPUACCT_STAT_SYSTEM] = "system", -}; - -static int cpuacct_stats_show(struct cgroup *cgrp, struct cftype *cft, - struct cgroup_map_cb *cb) -{ - struct cpuacct *ca = cgroup_ca(cgrp); - int i; - - for (i = 0; i < CPUACCT_STAT_NSTATS; i++) { - s64 val = percpu_counter_read(&ca->cpustat[i]); - val = cputime64_to_clock_t(val); - cb->fill(cb, cpuacct_stat_desc[i], val); - } - return 0; -} - static struct cftype files[] = { { .name = "usage", @@ -10168,10 +10067,7 @@ static struct cftype files[] = { .name = "usage_percpu", .read_seq_string = cpuacct_percpu_seq_read, }, - { - .name = "stat", - .read_map = cpuacct_stats_show, - }, + }; static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp) @@ -10193,38 +10089,12 @@ static void cpuacct_charge(struct task_struct *tsk, u64 cputime) return; cpu = task_cpu(tsk); - - rcu_read_lock(); - ca = task_ca(tsk); for (; ca; ca = ca->parent) { u64 *cpuusage = per_cpu_ptr(ca->cpuusage, cpu); *cpuusage += cputime; } - - rcu_read_unlock(); -} - -/* - * Charge the system/user time to the task's accounting group. - */ -static void cpuacct_update_stats(struct task_struct *tsk, - enum cpuacct_stat_index idx, cputime_t val) -{ - struct cpuacct *ca; - - if (unlikely(!cpuacct_subsys.active)) - return; - - rcu_read_lock(); - ca = task_ca(tsk); - - do { - percpu_counter_add(&ca->cpustat[idx], val); - ca = ca->parent; - } while (ca); - rcu_read_unlock(); } struct cgroup_subsys cpuacct_subsys = { diff --git a/trunk/kernel/sched_cpupri.c b/trunk/kernel/sched_cpupri.c index cdd3c89574cd..1e00bfacf9b8 100644 --- a/trunk/kernel/sched_cpupri.c +++ b/trunk/kernel/sched_cpupri.c @@ -55,7 +55,7 @@ static int convert_prio(int prio) * cpupri_find - find the best (lowest-pri) CPU in the system * @cp: The cpupri context * @p: The task - * @lowest_mask: A mask to fill in with selected CPUs (or NULL) + * @lowest_mask: A mask to fill in with selected CPUs * * Note: This function returns the recommended CPUs as calculated during the * current invokation. By the time the call returns, the CPUs may have in @@ -81,8 +81,7 @@ int cpupri_find(struct cpupri *cp, struct task_struct *p, if (cpumask_any_and(&p->cpus_allowed, vec->mask) >= nr_cpu_ids) continue; - if (lowest_mask) - cpumask_and(lowest_mask, &p->cpus_allowed, vec->mask); + cpumask_and(lowest_mask, &p->cpus_allowed, vec->mask); return 1; } diff --git a/trunk/kernel/sched_rt.c b/trunk/kernel/sched_rt.c index f2c66f8f9712..299d012b4394 100644 --- a/trunk/kernel/sched_rt.c +++ b/trunk/kernel/sched_rt.c @@ -948,15 +948,20 @@ static int select_task_rq_rt(struct task_struct *p, int sync) static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p) { + cpumask_var_t mask; + if (rq->curr->rt.nr_cpus_allowed == 1) return; - if (p->rt.nr_cpus_allowed != 1 - && cpupri_find(&rq->rd->cpupri, p, NULL)) + if (!alloc_cpumask_var(&mask, GFP_ATOMIC)) return; - if (!cpupri_find(&rq->rd->cpupri, rq->curr, NULL)) - return; + if (p->rt.nr_cpus_allowed != 1 + && cpupri_find(&rq->rd->cpupri, p, mask)) + goto free; + + if (!cpupri_find(&rq->rd->cpupri, rq->curr, mask)) + goto free; /* * There appears to be other cpus that can accept @@ -965,6 +970,8 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p) */ requeue_task_rt(rq, p, 1); resched_task(rq->curr); +free: + free_cpumask_var(mask); } #endif /* CONFIG_SMP */ diff --git a/trunk/kernel/sys.c b/trunk/kernel/sys.c index e7998cf31498..51dbb55604e8 100644 --- a/trunk/kernel/sys.c +++ b/trunk/kernel/sys.c @@ -360,7 +360,6 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg) { char buffer[256]; - int ret = 0; /* We only trust the superuser with rebooting the system. */ if (!capable(CAP_SYS_BOOT)) @@ -398,7 +397,7 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, kernel_halt(); unlock_kernel(); do_exit(0); - panic("cannot halt"); + break; case LINUX_REBOOT_CMD_POWER_OFF: kernel_power_off(); @@ -418,22 +417,29 @@ SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, #ifdef CONFIG_KEXEC case LINUX_REBOOT_CMD_KEXEC: - ret = kernel_kexec(); - break; + { + int ret; + ret = kernel_kexec(); + unlock_kernel(); + return ret; + } #endif #ifdef CONFIG_HIBERNATION case LINUX_REBOOT_CMD_SW_SUSPEND: - ret = hibernate(); - break; + { + int ret = hibernate(); + unlock_kernel(); + return ret; + } #endif default: - ret = -EINVAL; - break; + unlock_kernel(); + return -EINVAL; } unlock_kernel(); - return ret; + return 0; } static void deferred_cad(struct work_struct *dummy) diff --git a/trunk/kernel/sysctl.c b/trunk/kernel/sysctl.c index e3d2c7dd59b9..4286b62b34a0 100644 --- a/trunk/kernel/sysctl.c +++ b/trunk/kernel/sysctl.c @@ -902,6 +902,16 @@ static struct ctl_table kern_table[] = { .proc_handler = &proc_dointvec, }, #endif +#ifdef CONFIG_UNEVICTABLE_LRU + { + .ctl_name = CTL_UNNUMBERED, + .procname = "scan_unevictable_pages", + .data = &scan_unevictable_pages, + .maxlen = sizeof(scan_unevictable_pages), + .mode = 0644, + .proc_handler = &scan_unevictable_handler, + }, +#endif #ifdef CONFIG_SLOW_WORK { .ctl_name = CTL_UNNUMBERED, @@ -1292,16 +1302,6 @@ static struct ctl_table vm_table[] = { .extra2 = &one, }, #endif -#ifdef CONFIG_UNEVICTABLE_LRU - { - .ctl_name = CTL_UNNUMBERED, - .procname = "scan_unevictable_pages", - .data = &scan_unevictable_pages, - .maxlen = sizeof(scan_unevictable_pages), - .mode = 0644, - .proc_handler = &scan_unevictable_handler, - }, -#endif /* * NOTE: do not add new entries to this table unless you have read * Documentation/sysctl/ctl_unnumbered.txt diff --git a/trunk/kernel/timer.c b/trunk/kernel/timer.c index cffffad01c31..b4555568b4e4 100644 --- a/trunk/kernel/timer.c +++ b/trunk/kernel/timer.c @@ -531,13 +531,10 @@ static void __init_timer(struct timer_list *timer, } /** - * init_timer_key - initialize a timer + * init_timer - initialize a timer. * @timer: the timer to be initialized - * @name: name of the timer - * @key: lockdep class key of the fake lock used for tracking timer - * sync lock dependencies * - * init_timer_key() must be done to a timer prior calling *any* of the + * init_timer() must be done to a timer prior calling *any* of the * other timer functions. */ void init_timer_key(struct timer_list *timer, diff --git a/trunk/kernel/trace/Kconfig b/trunk/kernel/trace/Kconfig index 417d1985e299..2246141bda4d 100644 --- a/trunk/kernel/trace/Kconfig +++ b/trunk/kernel/trace/Kconfig @@ -312,7 +312,7 @@ config KMEMTRACE and profile kernel code. This requires an userspace application to use. See - Documentation/trace/kmemtrace.txt for more information. + Documentation/vm/kmemtrace.txt for more information. Saying Y will make the kernel somewhat larger and slower. However, if you disable kmemtrace at run-time or boot-time, the performance @@ -403,7 +403,7 @@ config MMIOTRACE implementation and works via page faults. Tracing is disabled by default and can be enabled at run-time. - See Documentation/trace/mmiotrace.txt. + See Documentation/tracers/mmiotrace.txt. If you are not helping to develop drivers, say N. config MMIOTRACE_TEST diff --git a/trunk/kernel/trace/blktrace.c b/trunk/kernel/trace/blktrace.c index 921ef5d1f0ba..b32ff446c3fb 100644 --- a/trunk/kernel/trace/blktrace.c +++ b/trunk/kernel/trace/blktrace.c @@ -1377,12 +1377,12 @@ static int blk_trace_str2mask(const char *str) { int i; int mask = 0; - char *buf, *s, *token; + char *s, *token; - buf = kstrdup(str, GFP_KERNEL); - if (buf == NULL) + s = kstrdup(str, GFP_KERNEL); + if (s == NULL) return -ENOMEM; - s = strstrip(buf); + s = strstrip(s); while (1) { token = strsep(&s, ","); @@ -1403,7 +1403,7 @@ static int blk_trace_str2mask(const char *str) break; } } - kfree(buf); + kfree(s); return mask; } diff --git a/trunk/kernel/trace/trace.c b/trunk/kernel/trace/trace.c index 1ce5dc6372b8..9d28476a9851 100644 --- a/trunk/kernel/trace/trace.c +++ b/trunk/kernel/trace/trace.c @@ -3277,13 +3277,19 @@ static int tracing_buffers_open(struct inode *inode, struct file *filp) info->tr = &global_trace; info->cpu = cpu; - info->spare = NULL; + info->spare = ring_buffer_alloc_read_page(info->tr->buffer); /* Force reading ring buffer for first read */ info->read = (unsigned int)-1; + if (!info->spare) + goto out; filp->private_data = info; - return nonseekable_open(inode, filp); + return 0; + + out: + kfree(info); + return -ENOMEM; } static ssize_t @@ -3298,11 +3304,6 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, if (!count) return 0; - if (!info->spare) - info->spare = ring_buffer_alloc_read_page(info->tr->buffer); - if (!info->spare) - return -ENOMEM; - /* Do we have previous read data to read? */ if (info->read < PAGE_SIZE) goto read; @@ -3341,8 +3342,7 @@ static int tracing_buffers_release(struct inode *inode, struct file *file) { struct ftrace_buffer_info *info = file->private_data; - if (info->spare) - ring_buffer_free_read_page(info->tr->buffer, info->spare); + ring_buffer_free_read_page(info->tr->buffer, info->spare); kfree(info); return 0; @@ -3428,19 +3428,14 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos, int size, i; size_t ret; - if (*ppos & (PAGE_SIZE - 1)) { - WARN_ONCE(1, "Ftrace: previous read must page-align\n"); - return -EINVAL; - } + /* + * We can't seek on a buffer input + */ + if (unlikely(*ppos)) + return -ESPIPE; - if (len & (PAGE_SIZE - 1)) { - WARN_ONCE(1, "Ftrace: splice_read should page-align\n"); - if (len < PAGE_SIZE) - return -EINVAL; - len &= PAGE_MASK; - } - for (i = 0; i < PIPE_BUFFERS && len; i++, len -= PAGE_SIZE) { + for (i = 0; i < PIPE_BUFFERS && len; i++, len -= size) { struct page *page; int r; @@ -3479,7 +3474,6 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos, spd.partial[i].offset = 0; spd.partial[i].private = (unsigned long)ref; spd.nr_pages++; - *ppos += PAGE_SIZE; } spd.nr_pages = i; diff --git a/trunk/kernel/trace/trace_events.c b/trunk/kernel/trace/trace_events.c index 576f4fa2af0d..64ec4d278ffb 100644 --- a/trunk/kernel/trace/trace_events.c +++ b/trunk/kernel/trace/trace_events.c @@ -503,7 +503,6 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt, if (copy_from_user(&buf, ubuf, cnt)) return -EFAULT; - buf[cnt] = '\0'; pred = kzalloc(sizeof(*pred), GFP_KERNEL); if (!pred) @@ -521,10 +520,9 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt, return cnt; } - err = filter_add_pred(call, pred); - if (err < 0) { + if (filter_add_pred(call, pred)) { filter_free_pred(pred); - return err; + return -EINVAL; } *ppos += cnt; @@ -571,7 +569,6 @@ subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt, if (copy_from_user(&buf, ubuf, cnt)) return -EFAULT; - buf[cnt] = '\0'; pred = kzalloc(sizeof(*pred), GFP_KERNEL); if (!pred) @@ -589,11 +586,10 @@ subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt, return cnt; } - err = filter_add_subsystem_pred(system, pred); - if (err < 0) { + if (filter_add_subsystem_pred(system, pred)) { filter_free_subsystem_preds(system); filter_free_pred(pred); - return err; + return -EINVAL; } *ppos += cnt; diff --git a/trunk/kernel/trace/trace_events_filter.c b/trunk/kernel/trace/trace_events_filter.c index e03cbf1e38f3..026be412f356 100644 --- a/trunk/kernel/trace/trace_events_filter.c +++ b/trunk/kernel/trace/trace_events_filter.c @@ -215,7 +215,7 @@ static int __filter_add_pred(struct ftrace_event_call *call, } } - return -ENOSPC; + return -ENOMEM; } static int is_string_field(const char *type) @@ -319,7 +319,7 @@ int filter_add_subsystem_pred(struct event_subsystem *system, } if (i == MAX_FILTER_PRED) - return -ENOSPC; + return -EINVAL; events_for_each(call) { int err; @@ -410,22 +410,16 @@ int filter_parse(char **pbuf, struct filter_pred *pred) } } - if (!val_str) { - pred->field_name = NULL; - return -EINVAL; - } - pred->field_name = kstrdup(pred->field_name, GFP_KERNEL); if (!pred->field_name) return -ENOMEM; - pred->val = simple_strtoull(val_str, &tmp, 0); + pred->val = simple_strtoull(val_str, &tmp, 10); if (tmp == val_str) { pred->str_val = kstrdup(val_str, GFP_KERNEL); if (!pred->str_val) return -ENOMEM; - } else if (*tmp != '\0') - return -EINVAL; + } return 0; } diff --git a/trunk/kernel/trace/trace_events_stage_2.h b/trunk/kernel/trace/trace_events_stage_2.h index d363c6672c6c..30743f7d4110 100644 --- a/trunk/kernel/trace/trace_events_stage_2.h +++ b/trunk/kernel/trace/trace_events_stage_2.h @@ -105,10 +105,10 @@ ftrace_raw_output_##call(struct trace_iterator *iter, int flags) \ return 0; #undef __entry -#define __entry REC +#define __entry "REC" #undef TP_printk -#define TP_printk(fmt, args...) "%s, %s\n", #fmt, __stringify(args) +#define TP_printk(fmt, args...) "%s, %s\n", #fmt, #args #undef TP_fast_assign #define TP_fast_assign(args...) args diff --git a/trunk/kernel/trace/trace_syscalls.c b/trunk/kernel/trace/trace_syscalls.c index 5e579645ac86..a2a3af29c943 100644 --- a/trunk/kernel/trace/trace_syscalls.c +++ b/trunk/kernel/trace/trace_syscalls.c @@ -1,5 +1,5 @@ -#include #include +#include #include #include "trace_output.h" diff --git a/trunk/lib/debug_locks.c b/trunk/lib/debug_locks.c index bc3b11731b9c..0218b4693dd8 100644 --- a/trunk/lib/debug_locks.c +++ b/trunk/lib/debug_locks.c @@ -36,7 +36,7 @@ int debug_locks_silent; */ int debug_locks_off(void) { - if (__debug_locks_off()) { + if (xchg(&debug_locks, 0)) { if (!debug_locks_silent) { oops_in_progress = 1; console_verbose(); diff --git a/trunk/lib/vsprintf.c b/trunk/lib/vsprintf.c index 7536acea135b..be3001f912e4 100644 --- a/trunk/lib/vsprintf.c +++ b/trunk/lib/vsprintf.c @@ -1051,6 +1051,13 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args) if (str < end) *str = '%'; ++str; + if (*fmt) { + if (str < end) + *str = *fmt; + ++str; + } else { + --fmt; + } break; case FORMAT_TYPE_NRCHARS: { @@ -1332,6 +1339,8 @@ do { \ break; case FORMAT_TYPE_INVALID: + if (!*fmt) + --fmt; break; case FORMAT_TYPE_NRCHARS: { @@ -1514,6 +1523,13 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) if (str < end) *str = '%'; ++str; + if (*fmt) { + if (str < end) + *str = *fmt; + ++str; + } else { + --fmt; + } break; case FORMAT_TYPE_NRCHARS: diff --git a/trunk/mm/Kconfig b/trunk/mm/Kconfig index 57971d2ab848..b53427ad30a3 100644 --- a/trunk/mm/Kconfig +++ b/trunk/mm/Kconfig @@ -213,8 +213,6 @@ config UNEVICTABLE_LRU will use one page flag and increase the code size a little, say Y unless you know what you are doing. - See Documentation/vm/unevictable-lru.txt for more information. - config HAVE_MLOCK bool default y if MMU=y diff --git a/trunk/mm/filemap.c b/trunk/mm/filemap.c index 8bd498040f32..2e2d38ebda4b 100644 --- a/trunk/mm/filemap.c +++ b/trunk/mm/filemap.c @@ -567,8 +567,8 @@ EXPORT_SYMBOL(wait_on_page_bit); /** * add_page_wait_queue - Add an arbitrary waiter to a page's wait queue - * @page: Page defining the wait queue of interest - * @waiter: Waiter to add to the queue + * @page - Page defining the wait queue of interest + * @waiter - Waiter to add to the queue * * Add an arbitrary @waiter to the wait queue for the nominated @page. */ diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index e44fb0fbb80e..2fc6d6c48238 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -932,7 +932,7 @@ static int __mem_cgroup_try_charge(struct mm_struct *mm, if (unlikely(!mem)) return 0; - VM_BUG_ON(!mem || mem_cgroup_is_obsolete(mem)); + VM_BUG_ON(mem_cgroup_is_obsolete(mem)); while (1) { int ret; diff --git a/trunk/mm/shmem.c b/trunk/mm/shmem.c index f9cb20ebb990..d94d2e9146bc 100644 --- a/trunk/mm/shmem.c +++ b/trunk/mm/shmem.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -44,6 +43,7 @@ static struct vfsmount *shm_mnt; #include #include #include +#include #include #include #include @@ -65,28 +65,13 @@ static struct vfsmount *shm_mnt; #include #include -/* - * The maximum size of a shmem/tmpfs file is limited by the maximum size of - * its triple-indirect swap vector - see illustration at shmem_swp_entry(). - * - * With 4kB page size, maximum file size is just over 2TB on a 32-bit kernel, - * but one eighth of that on a 64-bit kernel. With 8kB page size, maximum - * file size is just over 4TB on a 64-bit kernel, but 16TB on a 32-bit kernel, - * MAX_LFS_FILESIZE being then more restrictive than swap vector layout. - * - * We use / and * instead of shifts in the definitions below, so that the swap - * vector can be tested with small even values (e.g. 20) for ENTRIES_PER_PAGE. - */ #define ENTRIES_PER_PAGE (PAGE_CACHE_SIZE/sizeof(unsigned long)) -#define ENTRIES_PER_PAGEPAGE ((unsigned long long)ENTRIES_PER_PAGE*ENTRIES_PER_PAGE) - -#define SHMSWP_MAX_INDEX (SHMEM_NR_DIRECT + (ENTRIES_PER_PAGEPAGE/2) * (ENTRIES_PER_PAGE+1)) -#define SHMSWP_MAX_BYTES (SHMSWP_MAX_INDEX << PAGE_CACHE_SHIFT) +#define ENTRIES_PER_PAGEPAGE (ENTRIES_PER_PAGE*ENTRIES_PER_PAGE) +#define BLOCKS_PER_PAGE (PAGE_CACHE_SIZE/512) -#define SHMEM_MAX_BYTES min_t(unsigned long long, SHMSWP_MAX_BYTES, MAX_LFS_FILESIZE) -#define SHMEM_MAX_INDEX ((unsigned long)((SHMEM_MAX_BYTES+1) >> PAGE_CACHE_SHIFT)) +#define SHMEM_MAX_INDEX (SHMEM_NR_DIRECT + (ENTRIES_PER_PAGEPAGE/2) * (ENTRIES_PER_PAGE+1)) +#define SHMEM_MAX_BYTES ((unsigned long long)SHMEM_MAX_INDEX << PAGE_CACHE_SHIFT) -#define BLOCKS_PER_PAGE (PAGE_CACHE_SIZE/512) #define VM_ACCT(size) (PAGE_CACHE_ALIGN(size) >> PAGE_SHIFT) /* info->flags needs VM_flags to handle pagein/truncate races efficiently */ @@ -2596,7 +2581,7 @@ int shmem_unuse(swp_entry_t entry, struct page *page) #define shmem_get_inode(sb, mode, dev, flags) ramfs_get_inode(sb, mode, dev) #define shmem_acct_size(flags, size) 0 #define shmem_unacct_size(flags, size) do {} while (0) -#define SHMEM_MAX_BYTES MAX_LFS_FILESIZE +#define SHMEM_MAX_BYTES LLONG_MAX #endif /* CONFIG_SHMEM */ diff --git a/trunk/mm/util.c b/trunk/mm/util.c index 55bef160b9f1..2599e83eea17 100644 --- a/trunk/mm/util.c +++ b/trunk/mm/util.c @@ -223,22 +223,6 @@ void arch_pick_mmap_layout(struct mm_struct *mm) } #endif -/** - * get_user_pages_fast() - pin user pages in memory - * @start: starting user address - * @nr_pages: number of pages from start to pin - * @write: whether pages will be written to - * @pages: array that receives pointers to the pages pinned. - * Should be at least nr_pages long. - * - * Attempt to pin user pages in memory without taking mm->mmap_sem. - * If not successful, it will fall back to taking the lock and - * calling get_user_pages(). - * - * Returns number of pages pinned. This may be fewer than the number - * requested. If nr_pages is 0 or negative, returns 0. If no pages - * were pinned, returns -errno. - */ int __attribute__((weak)) get_user_pages_fast(unsigned long start, int nr_pages, int write, struct page **pages) { diff --git a/trunk/scripts/.gitignore b/trunk/scripts/.gitignore index b939fbd01195..09e2406f3b78 100644 --- a/trunk/scripts/.gitignore +++ b/trunk/scripts/.gitignore @@ -1,6 +1,7 @@ # # Generated files # +ihex2fw conmakehash kallsyms pnmtologo diff --git a/trunk/scripts/Makefile b/trunk/scripts/Makefile index aafdf064feef..035182e16afb 100644 --- a/trunk/scripts/Makefile +++ b/trunk/scripts/Makefile @@ -2,11 +2,12 @@ # scripts contains sources for various helper programs used throughout # the kernel for the build process. # --------------------------------------------------------------------------- +# ihex2fw: Parser/loader for IHEX formatted data # kallsyms: Find all symbols in vmlinux # pnmttologo: Convert pnm files to logo files -# conmakehash: Create chartable # conmakehash: Create arrays for initializing the kernel console tables +hostprogs-y := ihex2fw hostprogs-$(CONFIG_KALLSYMS) += kallsyms hostprogs-$(CONFIG_LOGO) += pnmtologo hostprogs-$(CONFIG_VT) += conmakehash diff --git a/trunk/scripts/Makefile.headersinst b/trunk/scripts/Makefile.headersinst index 095cfc8b9dbf..612dc13ddd85 100644 --- a/trunk/scripts/Makefile.headersinst +++ b/trunk/scripts/Makefile.headersinst @@ -14,8 +14,6 @@ _dst := $(if $(dst),$(dst),$(obj)) kbuild-file := $(srctree)/$(obj)/Kbuild include $(kbuild-file) -_dst := $(if $(destination-y),$(destination-y),$(_dst)) - include scripts/Kbuild.include install := $(INSTALL_HDR_PATH)/$(_dst) diff --git a/trunk/scripts/gen_initramfs_list.sh b/trunk/scripts/gen_initramfs_list.sh index 76af5f9623e3..3eea8f15131b 100644 --- a/trunk/scripts/gen_initramfs_list.sh +++ b/trunk/scripts/gen_initramfs_list.sh @@ -97,7 +97,7 @@ print_mtime() { } list_parse() { - [ ! -L "$1" ] && echo "$1 \\" || : + echo "$1 \\" } # for each file print a line in following format diff --git a/trunk/scripts/get_maintainer.pl b/trunk/scripts/get_maintainer.pl deleted file mode 100755 index 60dc0c48c929..000000000000 --- a/trunk/scripts/get_maintainer.pl +++ /dev/null @@ -1,515 +0,0 @@ -#!/usr/bin/perl -w -# (c) 2007, Joe Perches -# created from checkpatch.pl -# -# Print selected MAINTAINERS information for -# the files modified in a patch or for a file -# -# usage: perl scripts/get_maintainers.pl [OPTIONS] -# perl scripts/get_maintainers.pl [OPTIONS] -f -# -# Licensed under the terms of the GNU GPL License version 2 - -use strict; - -my $P = $0; -my $V = '0.15'; - -use Getopt::Long qw(:config no_auto_abbrev); - -my $lk_path = "./"; -my $email = 1; -my $email_usename = 1; -my $email_maintainer = 1; -my $email_list = 1; -my $email_subscriber_list = 0; -my $email_git = 1; -my $email_git_penguin_chiefs = 0; -my $email_git_min_signatures = 1; -my $email_git_max_maintainers = 5; -my $email_git_since = "1-year-ago"; -my $output_multiline = 1; -my $output_separator = ", "; -my $scm = 0; -my $web = 0; -my $subsystem = 0; -my $status = 0; -my $from_filename = 0; -my $version = 0; -my $help = 0; - -my $exit = 0; - -my @penguin_chief = (); -push(@penguin_chief,"Linus Torvalds:torvalds\@linux-foundation.org"); -#Andrew wants in on most everything - 2009/01/14 -#push(@penguin_chief,"Andrew Morton:akpm\@linux-foundation.org"); - -my @penguin_chief_names = (); -foreach my $chief (@penguin_chief) { - if ($chief =~ m/^(.*):(.*)/) { - my $chief_name = $1; - my $chief_addr = $2; - push(@penguin_chief_names, $chief_name); - } -} -my $penguin_chiefs = "\(" . join("|",@penguin_chief_names) . "\)"; - -if (!GetOptions( - 'email!' => \$email, - 'git!' => \$email_git, - 'git-chief-penguins!' => \$email_git_penguin_chiefs, - 'git-min-signatures=i' => \$email_git_min_signatures, - 'git-max-maintainers=i' => \$email_git_max_maintainers, - 'git-since=s' => \$email_git_since, - 'm!' => \$email_maintainer, - 'n!' => \$email_usename, - 'l!' => \$email_list, - 's!' => \$email_subscriber_list, - 'multiline!' => \$output_multiline, - 'separator=s' => \$output_separator, - 'subsystem!' => \$subsystem, - 'status!' => \$status, - 'scm!' => \$scm, - 'web!' => \$web, - 'f|file' => \$from_filename, - 'v|version' => \$version, - 'h|help' => \$help, - )) { - usage(); - die "$P: invalid argument\n"; -} - -if ($help != 0) { - usage(); - exit 0; -} - -if ($version != 0) { - print("${P} ${V}\n"); - exit 0; -} - -if ($#ARGV < 0) { - usage(); - die "$P: argument missing: patchfile or -f file please\n"; -} - -my $selections = $email + $scm + $status + $subsystem + $web; -if ($selections == 0) { - usage(); - die "$P: Missing required option: email, scm, status, subsystem or web\n"; -} - -if ($email && ($email_maintainer + $email_list + $email_subscriber_list - + $email_git + $email_git_penguin_chiefs) == 0) { - usage(); - die "$P: Please select at least 1 email option\n"; -} - -if (!top_of_kernel_tree($lk_path)) { - die "$P: The current directory does not appear to be " - . "a linux kernel source tree.\n"; -} - -## Read MAINTAINERS for type/value pairs - -my @typevalue = (); -open(MAINT, "<${lk_path}MAINTAINERS") || die "$P: Can't open MAINTAINERS\n"; -while () { - my $line = $_; - - if ($line =~ m/^(\C):\s*(.*)/) { - my $type = $1; - my $value = $2; - - ##Filename pattern matching - if ($type eq "F" || $type eq "X") { - $value =~ s@\.@\\\.@g; ##Convert . to \. - $value =~ s/\*/\.\*/g; ##Convert * to .* - $value =~ s/\?/\./g; ##Convert ? to . - } - push(@typevalue, "$type:$value"); - } elsif (!/^(\s)*$/) { - $line =~ s/\n$//g; - push(@typevalue, $line); - } -} -close(MAINT); - -## use the filenames on the command line or find the filenames in the patchfiles - -my @files = (); - -foreach my $file (@ARGV) { - next if ((-d $file)); - if (!(-f $file)) { - die "$P: file '${file}' not found\n"; - } - if ($from_filename) { - push(@files, $file); - } else { - my $file_cnt = @files; - open(PATCH, "<$file") or die "$P: Can't open ${file}\n"; - while () { - if (m/^\+\+\+\s+(\S+)/) { - my $filename = $1; - $filename =~ s@^[^/]*/@@; - $filename =~ s@\n@@; - push(@files, $filename); - } - } - close(PATCH); - if ($file_cnt == @files) { - die "$P: file '${file}' doesn't appear to be a patch. " - . "Add -f to options?\n"; - } - @files = sort_and_uniq(@files); - } -} - -my @email_to = (); -my @scm = (); -my @web = (); -my @subsystem = (); -my @status = (); - -# Find responsible parties - -foreach my $file (@files) { - -#Do not match excluded file patterns - - my $exclude = 0; - foreach my $line (@typevalue) { - if ($line =~ m/^(\C):(.*)/) { - my $type = $1; - my $value = $2; - if ($type eq 'X') { - if (file_match_pattern($file, $value)) { - $exclude = 1; - } - } - } - } - - if (!$exclude) { - my $tvi = 0; - foreach my $line (@typevalue) { - if ($line =~ m/^(\C):(.*)/) { - my $type = $1; - my $value = $2; - if ($type eq 'F') { - if (file_match_pattern($file, $value)) { - add_categories($tvi); - } - } - } - $tvi++; - } - } - - if ($email && $email_git) { - recent_git_signoffs($file); - } - -} - -if ($email_git_penguin_chiefs) { - foreach my $chief (@penguin_chief) { - if ($chief =~ m/^(.*):(.*)/) { - my $chief_name = $1; - my $chief_addr = $2; - if ($email_usename) { - push(@email_to, format_email($chief_name, $chief_addr)); - } else { - push(@email_to, $chief_addr); - } - } - } -} - -if ($email) { - my $address_cnt = @email_to; - if ($address_cnt == 0 && $email_list) { - push(@email_to, "linux-kernel\@vger.kernel.org"); - } - -#Don't sort email address list, but do remove duplicates - @email_to = uniq(@email_to); - output(@email_to); -} - -if ($scm) { - @scm = sort_and_uniq(@scm); - output(@scm); -} - -if ($status) { - @status = sort_and_uniq(@status); - output(@status); -} - -if ($subsystem) { - @subsystem = sort_and_uniq(@subsystem); - output(@subsystem); -} - -if ($web) { - @web = sort_and_uniq(@web); - output(@web); -} - -exit($exit); - -sub file_match_pattern { - my ($file, $pattern) = @_; - if (substr($pattern, -1) eq "/") { - if ($file =~ m@^$pattern@) { - return 1; - } - } else { - if ($file =~ m@^$pattern@) { - my $s1 = ($file =~ tr@/@@); - my $s2 = ($pattern =~ tr@/@@); - if ($s1 == $s2) { - return 1; - } - } - } - return 0; -} - -sub usage { - print < print email address(es) if any - --git => include recent git \*-by: signers - --git-chief-penguins => include ${penguin_chiefs} - --git-min-signatures => number of signatures required (default: 1) - --git-max-maintainers => maximum maintainers to add (default: 5) - --git-since => git history to use (default: 1-year-ago) - --m => include maintainer(s) if any - --n => include name 'Full Name ' - --l => include list(s) if any - --s => include subscriber only list(s) if any - --scm => print SCM tree(s) if any - --status => print status if any - --subsystem => print subsystem name if any - --web => print website(s) if any - -Output type options: - --separator [, ] => separator for multiple entries on 1 line - --multiline => print 1 entry per line - -Default options: - [--email --git --m --l --multiline] - -Other options: - --version -> show version - --help => show this help information - -EOT -} - -sub top_of_kernel_tree { - my ($lk_path) = @_; - - if ($lk_path ne "" && substr($lk_path,length($lk_path)-1,1) ne "/") { - $lk_path .= "/"; - } - if ( (-f "${lk_path}COPYING") - && (-f "${lk_path}CREDITS") - && (-f "${lk_path}Kbuild") - && (-f "${lk_path}MAINTAINERS") - && (-f "${lk_path}Makefile") - && (-f "${lk_path}README") - && (-d "${lk_path}Documentation") - && (-d "${lk_path}arch") - && (-d "${lk_path}include") - && (-d "${lk_path}drivers") - && (-d "${lk_path}fs") - && (-d "${lk_path}init") - && (-d "${lk_path}ipc") - && (-d "${lk_path}kernel") - && (-d "${lk_path}lib") - && (-d "${lk_path}scripts")) { - return 1; - } - return 0; -} - -sub format_email { - my ($name, $email) = @_; - - $name =~ s/^\s+|\s+$//g; - $email =~ s/^\s+|\s+$//g; - - my $formatted_email = ""; - - if ($name =~ /[^a-z0-9 \.\-]/i) { ##has "must quote" chars - $name =~ s/(?"; - } else { - $formatted_email = "${name} \<${email}\>"; - } - return $formatted_email; -} - -sub add_categories { - my ($index) = @_; - - $index = $index - 1; - while ($index >= 0) { - my $tv = $typevalue[$index]; - if ($tv =~ m/^(\C):(.*)/) { - my $ptype = $1; - my $pvalue = $2; - if ($ptype eq "L") { - my $subscr = $pvalue; - if ($subscr =~ m/\s*\(subscribers-only\)/) { - if ($email_subscriber_list) { - $subscr =~ s/\s*\(subscribers-only\)//g; - push(@email_to, $subscr); - } - } else { - if ($email_list) { - push(@email_to, $pvalue); - } - } - } elsif ($ptype eq "M") { - if ($email_maintainer) { - if ($index >= 0) { - my $tv = $typevalue[$index - 1]; - if ($tv =~ m/^(\C):(.*)/) { - if ($1 eq "P" && $email_usename) { - push(@email_to, format_email($2, $pvalue)); - } else { - push(@email_to, $pvalue); - } - } - } else { - push(@email_to, $pvalue); - } - } - } elsif ($ptype eq "T") { - push(@scm, $pvalue); - } elsif ($ptype eq "W") { - push(@web, $pvalue); - } elsif ($ptype eq "S") { - push(@status, $pvalue); - } - - $index--; - } else { - push(@subsystem,$tv); - $index = -1; - } - } -} - -sub which { - my ($bin) = @_; - - foreach my $path (split /:/, $ENV{PATH}) { - if (-e "$path/$bin") { - return "$path/$bin"; - } - } - - return ""; -} - -sub recent_git_signoffs { - my ($file) = @_; - - my $sign_offs = ""; - my $cmd = ""; - my $output = ""; - my $count = 0; - my @lines = (); - - if (which("git") eq "") { - die("$P: git not found. Add --nogit to options?\n"); - } - - $cmd = "git log --since=${email_git_since} -- ${file}"; - $cmd .= " | grep -Pi \"^[-_ a-z]+by:.*\\\@\""; - if (!$email_git_penguin_chiefs) { - $cmd .= " | grep -Pv \"${penguin_chiefs}\""; - } - $cmd .= " | cut -f2- -d\":\""; - $cmd .= " | sed -e \"s/^\\s+//g\""; - $cmd .= " | sort | uniq -c | sort -rn"; - - $output = `${cmd}`; - $output =~ s/^\s*//gm; - - @lines = split("\n", $output); - foreach my $line (@lines) { - if ($line =~ m/([0-9]+)\s+(.*)/) { - my $sign_offs = $1; - $line = $2; - $count++; - if ($sign_offs < $email_git_min_signatures || - $count > $email_git_max_maintainers) { - last; - } - } else { - die("$P: Unexpected git output: ${line}\n"); - } - if ($line =~ m/(.+)<(.+)>/) { - my $git_name = $1; - my $git_addr = $2; - $git_name =~ tr/^\"//; - $git_name =~ tr/^\\s*//; - $git_name =~ tr/\"$//; - $git_name =~ tr/\\s*$//; - if ($email_usename) { - push(@email_to, format_email($git_name, $git_addr)); - } else { - push(@email_to, $git_addr); - } - } elsif ($line =~ m/<(.+)>/) { - my $git_addr = $1; - push(@email_to, $git_addr); - } else { - push(@email_to, $line); - } - } - return $output; -} - -sub uniq { - my @parms = @_; - - my %saw; - @parms = grep(!$saw{$_}++, @parms); - return @parms; -} - -sub sort_and_uniq { - my @parms = @_; - - my %saw; - @parms = sort @parms; - @parms = grep(!$saw{$_}++, @parms); - return @parms; -} - -sub output { - my @parms = @_; - - if ($output_multiline) { - foreach my $line (@parms) { - print("${line}\n"); - } - } else { - print(join($output_separator, @parms)); - print("\n"); - } -} diff --git a/trunk/scripts/headerdep.pl b/trunk/scripts/headerdep.pl index b7f6c560e24d..97399da89ef2 100755 --- a/trunk/scripts/headerdep.pl +++ b/trunk/scripts/headerdep.pl @@ -19,7 +19,7 @@ version => \&version, all => \$opt_all, - "I=s" => \@opt_include, + I => \@opt_include, graph => \$opt_graph, ); diff --git a/trunk/firmware/ihex2fw.c b/trunk/scripts/ihex2fw.c similarity index 100% rename from trunk/firmware/ihex2fw.c rename to trunk/scripts/ihex2fw.c diff --git a/trunk/scripts/kconfig/kxgettext.c b/trunk/scripts/kconfig/kxgettext.c index 8d9ce22b0fc5..6eb72a7f2562 100644 --- a/trunk/scripts/kconfig/kxgettext.c +++ b/trunk/scripts/kconfig/kxgettext.c @@ -43,10 +43,6 @@ static char *escape(const char* text, char *bf, int len) ++text; goto next; } - else if (*text == '\\') { - *bfp++ = '\\'; - len--; - } *bfp++ = *text++; next: --len; diff --git a/trunk/scripts/mod/modpost.c b/trunk/scripts/mod/modpost.c index df6e6286a065..8cc70612984c 100644 --- a/trunk/scripts/mod/modpost.c +++ b/trunk/scripts/mod/modpost.c @@ -1913,7 +1913,7 @@ static void read_dump(const char *fname, unsigned int kernel) if (!mod) { if (is_vmlinux(modname)) have_vmlinux = 1; - mod = new_module(modname); + mod = new_module(NOFAIL(strdup(modname))); mod->skip = 1; } s = sym_add_exported(symname, mod, export_no(export)); @@ -1997,7 +1997,7 @@ static void read_markers(const char *fname) mod = find_module(modname); if (!mod) { - mod = new_module(modname); + mod = new_module(NOFAIL(strdup(modname))); mod->skip = 1; } if (is_vmlinux(modname)) { diff --git a/trunk/scripts/setlocalversion b/trunk/scripts/setlocalversion index 47e75b69a2e9..f1c4b35bc324 100755 --- a/trunk/scripts/setlocalversion +++ b/trunk/scripts/setlocalversion @@ -21,7 +21,7 @@ if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then # Is this git on svn? if git config --get svn-remote.svn.url >/dev/null; then - printf -- '-svn%s' "`git svn find-rev $head`" + printf -- '-svn%s' "`git-svn find-rev $head`" fi # Are there uncommitted changes? diff --git a/trunk/security/keys/request_key.c b/trunk/security/keys/request_key.c index 03fe63ed55bd..22a31582bfaa 100644 --- a/trunk/security/keys/request_key.c +++ b/trunk/security/keys/request_key.c @@ -311,8 +311,7 @@ static int construct_alloc_key(struct key_type *type, set_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags); - if (dest_keyring) - down_write(&dest_keyring->sem); + down_write(&dest_keyring->sem); /* attach the key to the destination keyring under lock, but we do need * to do another check just in case someone beat us to it whilst we @@ -323,12 +322,10 @@ static int construct_alloc_key(struct key_type *type, if (!IS_ERR(key_ref)) goto key_already_present; - if (dest_keyring) - __key_link(dest_keyring, key); + __key_link(dest_keyring, key); mutex_unlock(&key_construction_mutex); - if (dest_keyring) - up_write(&dest_keyring->sem); + up_write(&dest_keyring->sem); mutex_unlock(&user->cons_lock); *_key = key; kleave(" = 0 [%d]", key_serial(key)); diff --git a/trunk/security/tomoyo/common.c b/trunk/security/tomoyo/common.c index d4d41b3efc7c..a0affd9cfca8 100644 --- a/trunk/security/tomoyo/common.c +++ b/trunk/security/tomoyo/common.c @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ @@ -1773,7 +1773,7 @@ void tomoyo_load_policy(const char *filename) envp[2] = NULL; call_usermodehelper(argv[0], argv, envp, 1); - printk(KERN_INFO "TOMOYO: 2.2.0 2009/04/01\n"); + printk(KERN_INFO "TOMOYO: 2.2.0-pre 2009/02/01\n"); printk(KERN_INFO "Mandatory Access Control activated.\n"); tomoyo_policy_loaded = true; { /* Check all profiles currently assigned to domains are defined. */ @@ -1800,7 +1800,7 @@ void tomoyo_load_policy(const char *filename) static int tomoyo_read_version(struct tomoyo_io_buffer *head) { if (!head->read_eof) { - tomoyo_io_printf(head, "2.2.0"); + tomoyo_io_printf(head, "2.2.0-pre"); head->read_eof = true; } return 0; diff --git a/trunk/security/tomoyo/common.h b/trunk/security/tomoyo/common.h index 678f4ff16aa4..e77e6a6de0f2 100644 --- a/trunk/security/tomoyo/common.h +++ b/trunk/security/tomoyo/common.h @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/security/tomoyo/domain.c b/trunk/security/tomoyo/domain.c index 2d6748741a26..2f2b449ffd2d 100644 --- a/trunk/security/tomoyo/domain.c +++ b/trunk/security/tomoyo/domain.c @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/security/tomoyo/file.c b/trunk/security/tomoyo/file.c index 2316da8ec5bc..65f50c1c5ee9 100644 --- a/trunk/security/tomoyo/file.c +++ b/trunk/security/tomoyo/file.c @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/security/tomoyo/realpath.c b/trunk/security/tomoyo/realpath.c index bf8e2b451687..3bbe01a7a4b5 100644 --- a/trunk/security/tomoyo/realpath.c +++ b/trunk/security/tomoyo/realpath.c @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/security/tomoyo/realpath.h b/trunk/security/tomoyo/realpath.h index 78217a37960b..7ec9fc9cbc07 100644 --- a/trunk/security/tomoyo/realpath.h +++ b/trunk/security/tomoyo/realpath.h @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/security/tomoyo/tomoyo.c b/trunk/security/tomoyo/tomoyo.c index 5b481912752a..3eeeae12c4dc 100644 --- a/trunk/security/tomoyo/tomoyo.c +++ b/trunk/security/tomoyo/tomoyo.c @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/security/tomoyo/tomoyo.h b/trunk/security/tomoyo/tomoyo.h index 41c6ebafb9c5..a0c8f6e0bea4 100644 --- a/trunk/security/tomoyo/tomoyo.h +++ b/trunk/security/tomoyo/tomoyo.h @@ -5,7 +5,7 @@ * * Copyright (C) 2005-2009 NTT DATA CORPORATION * - * Version: 2.2.0 2009/04/01 + * Version: 2.2.0-pre 2009/02/01 * */ diff --git a/trunk/sound/isa/Kconfig b/trunk/sound/isa/Kconfig index c6942a4de99b..c5c9a9218ff6 100644 --- a/trunk/sound/isa/Kconfig +++ b/trunk/sound/isa/Kconfig @@ -395,6 +395,16 @@ config SND_WAVEFRONT To compile this driver as a module, choose M here: the module will be called snd-wavefront. +config SND_WAVEFRONT_FIRMWARE_IN_KERNEL + bool "In-kernel firmware for Wavefront" + depends on SND_WAVEFRONT + default y + help + Say Y here to include the static firmware for FX DSP built in + the kernel for the Wavefront driver. If you choose N here, + you need to install the firmware files from the + alsa-firmware package. + config SND_MSND_PINNACLE tristate "Turtle Beach MultiSound Pinnacle/Fiji driver" depends on X86 && EXPERIMENTAL diff --git a/trunk/sound/isa/wavefront/wavefront_fx.c b/trunk/sound/isa/wavefront/wavefront_fx.c index a4345fc07561..dfc449a2194e 100644 --- a/trunk/sound/isa/wavefront/wavefront_fx.c +++ b/trunk/sound/isa/wavefront/wavefront_fx.c @@ -34,6 +34,14 @@ #define WAIT_IDLE 0xff +#ifdef CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL +#include "yss225.c" +static const struct firmware yss225_registers_firmware = { + .data = (u8 *)yss225_registers, + .size = sizeof yss225_registers +}; +#endif + static int wavefront_fx_idle (snd_wavefront_t *dev) @@ -252,12 +260,16 @@ snd_wavefront_fx_start (snd_wavefront_t *dev) if (dev->fx_initialized) return 0; +#ifdef CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL + firmware = &yss225_registers_firmware; +#else err = request_firmware(&firmware, "yamaha/yss225_registers.bin", dev->card->dev); if (err < 0) { err = -1; goto out; } +#endif for (i = 0; i + 1 < firmware->size; i += 2) { if (firmware->data[i] >= 8 && firmware->data[i] < 16) { @@ -280,8 +292,12 @@ snd_wavefront_fx_start (snd_wavefront_t *dev) err = 0; out: +#ifndef CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL release_firmware(firmware); +#endif return err; } +#ifndef CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL MODULE_FIRMWARE("yamaha/yss225_registers.bin"); +#endif diff --git a/trunk/sound/isa/wavefront/yss225.c b/trunk/sound/isa/wavefront/yss225.c new file mode 100644 index 000000000000..9f6be3ff8ecf --- /dev/null +++ b/trunk/sound/isa/wavefront/yss225.c @@ -0,0 +1,2739 @@ +/* + * Copyright (c) 1998-2002 by Paul Davis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* weird stuff, derived from port I/O tracing with dosemu */ + +static const struct { + unsigned char addr; + unsigned char data; +} yss225_registers[] __devinitdata = { +/* Set all bits for all channels on the MOD unit to zero */ +{ WAIT_IDLE }, { 0xe, 0x10 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x11 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x12 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x13 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x14 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x15 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x16 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x17 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x18 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x19 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x20 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x21 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x22 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x23 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x24 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x25 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x26 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x27 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x28 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x29 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x30 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x31 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x32 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x33 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x34 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x35 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x36 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x37 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x38 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x39 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x40 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x41 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x42 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x43 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x44 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x45 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x46 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x47 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x48 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x49 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x50 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x51 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x52 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x53 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x54 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x55 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x56 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x57 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x58 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x59 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x60 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x61 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x62 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x63 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x64 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x65 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x66 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x67 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x68 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x69 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x70 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x71 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x72 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x73 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x74 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x75 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x76 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x77 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x78 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x79 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x80 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x81 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x82 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x83 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x84 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x85 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x86 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x87 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x88 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x89 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x90 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x91 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x92 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x93 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x94 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x95 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x96 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x97 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x98 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x99 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xaa }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xab }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xac }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xad }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xae }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xaf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xba }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbe }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xca }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xce }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xda }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xde }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xea }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xeb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xec }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xed }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xee }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xef }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfa }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfe }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xff }, { 0xf, 0x00 }, + +/* XXX But why do this twice? */ +{ WAIT_IDLE }, { 0xe, 0x10 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x11 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x12 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x13 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x14 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x15 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x16 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x17 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x18 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x19 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x20 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x21 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x22 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x23 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x24 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x25 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x26 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x27 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x28 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x29 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x30 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x31 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x32 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x33 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x34 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x35 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x36 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x37 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x38 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x39 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x40 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x41 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x42 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x43 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x44 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x45 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x46 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x47 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x48 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x49 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x50 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x51 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x52 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x53 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x54 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x55 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x56 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x57 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x58 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x59 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x60 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x61 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x62 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x63 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x64 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x65 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x66 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x67 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x68 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x69 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x70 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x71 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x72 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x73 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x74 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x75 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x76 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x77 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x78 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x79 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x80 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x81 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x82 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x83 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x84 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x85 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x86 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x87 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x88 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x89 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x90 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x91 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x92 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x93 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x94 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x95 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x96 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x97 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x98 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x99 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xaa }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xab }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xac }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xad }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xae }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xaf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xba }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbe }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xca }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xce }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xda }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xde }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xea }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xeb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xec }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xed }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xee }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xef }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfa }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfe }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xff }, { 0xf, 0x00 }, + +/* mute on */ +{ WAIT_IDLE }, { 0x8, 0x02 }, + +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x44 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x42 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x43 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x7c }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x7e }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x46 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x49 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x47 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x4a }, { 0xd, 0x00 }, { 0xc, 0x00 }, + +/* either because of stupidity by TB's programmers, or because it + actually does something, rezero the MOD page. */ +{ WAIT_IDLE }, { 0xe, 0x10 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x11 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x12 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x13 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x14 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x15 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x16 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x17 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x18 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x19 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x1f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x20 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x21 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x22 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x23 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x24 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x25 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x26 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x27 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x28 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x29 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x2f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x30 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x31 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x32 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x33 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x34 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x35 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x36 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x37 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x38 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x39 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x3f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x40 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x41 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x42 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x43 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x44 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x45 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x46 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x47 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x48 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x49 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x4f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x50 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x51 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x52 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x53 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x54 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x55 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x56 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x57 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x58 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x59 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x5f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x60 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x61 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x62 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x63 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x64 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x65 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x66 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x67 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x68 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x69 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x6f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x70 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x71 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x72 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x73 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x74 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x75 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x76 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x77 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x78 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x79 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x7f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x80 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x81 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x82 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x83 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x84 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x85 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x86 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x87 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x88 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x89 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x8f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x90 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x91 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x92 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x93 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x94 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x95 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x96 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x97 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x98 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x99 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9a }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9b }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9c }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9d }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9e }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0x9f }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xa9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xaa }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xab }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xac }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xad }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xae }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xaf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xb9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xba }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbe }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xbf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xc9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xca }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xce }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xcf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xd9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xda }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xde }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xdf }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xe9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xea }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xeb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xec }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xed }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xee }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xef }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf0 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf1 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf2 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf3 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf4 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf5 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf6 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf7 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf8 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xf9 }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfa }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfb }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfc }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfd }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xfe }, { 0xf, 0x00 }, +{ WAIT_IDLE }, { 0xe, 0xff }, { 0xf, 0x00 }, + +/* load page zero */ +{ 0x9, 0x05 }, { 0xb, 0x00 }, { 0xa, 0x00 }, + +{ 0xd, 0x01 }, { 0xc, 0x7c }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1e }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xf5 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x11 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x32 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x13 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x14 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x76 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x18 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x19 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0x1a }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0x17 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x10 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0xa0 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xd1 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0xf2 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x13 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xf4 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xe0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x15 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x16 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x17 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x50 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x71 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x92 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xb3 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xa0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xd4 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xf5 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x70 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0xa0 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x11 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x16 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x10 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x17 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1b }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1d }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xdf }, { WAIT_IDLE }, + +/* Now load page one */ +{ 0x9, 0x05 }, { 0xb, 0x01 }, { 0xa, 0x00 }, + +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x19 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1f }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xd8 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x19 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x18 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0xfa }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1a }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xfb }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xa0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1b }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xd7 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xf7 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1c }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x3c }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x3f }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xdf }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x5d }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x7d }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0x9e }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xbe }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x03 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1b }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xdb }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xdb }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xe0 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xfb }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xfb }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1b }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x02 }, { 0xa, 0x00 }, + +{ 0xc, 0xc4 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x25 }, { WAIT_IDLE }, +{ 0xc, 0x01 }, { WAIT_IDLE }, +{ 0xc, 0x06 }, { WAIT_IDLE }, +{ 0xc, 0xc4 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x25 }, { WAIT_IDLE }, +{ 0xc, 0x01 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x04 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x04 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x05 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x44 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x03 }, { 0xa, 0x00 }, + +{ 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x47 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x06 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x70 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x42 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x42 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x42 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x42 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x40 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x04 }, { 0xa, 0x00 }, + +{ 0xc, 0x63 }, { WAIT_IDLE }, +{ 0xc, 0x03 }, { WAIT_IDLE }, +{ 0xc, 0x26 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x2c }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x24 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x2e }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x01 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x22 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x22 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x22 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x62 }, { WAIT_IDLE }, +{ 0xc, 0x02 }, { WAIT_IDLE }, +{ 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xc, 0x01 }, { WAIT_IDLE }, +{ 0xc, 0x21 }, { WAIT_IDLE }, +{ 0xc, 0x01 }, { WAIT_IDLE }, + +/* Load memory area (page six) */ +{ 0x9, 0x01 }, { 0xb, 0x06 }, + +{ 0xa, 0x00 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x02 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x04 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x06 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x08 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x0a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x0c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x0e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x10 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x12 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x14 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x16 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x18 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x1a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x1c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x1e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x20 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x22 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x24 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x26 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x28 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x2a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x2c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x2e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x30 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x32 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x34 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x36 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x38 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x3a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x3c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x3e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x40 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x42 }, { 0xd, 0x03 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x44 }, { 0xd, 0x01 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x46 }, { 0xd, 0x0a }, { 0xc, 0x21 }, { WAIT_IDLE }, +{ 0xa, 0x48 }, { 0xd, 0x0d }, { 0xc, 0x23 }, { WAIT_IDLE }, +{ 0xa, 0x4a }, { 0xd, 0x23 }, { 0xc, 0x1b }, { WAIT_IDLE }, +{ 0xa, 0x4c }, { 0xd, 0x37 }, { 0xc, 0x8f }, { WAIT_IDLE }, +{ 0xa, 0x4e }, { 0xd, 0x45 }, { 0xc, 0x77 }, { WAIT_IDLE }, +{ 0xa, 0x50 }, { 0xd, 0x52 }, { 0xc, 0xe2 }, { WAIT_IDLE }, +{ 0xa, 0x52 }, { 0xd, 0x1c }, { 0xc, 0x92 }, { WAIT_IDLE }, +{ 0xa, 0x54 }, { 0xd, 0x1c }, { 0xc, 0x52 }, { WAIT_IDLE }, +{ 0xa, 0x56 }, { 0xd, 0x07 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x58 }, { 0xd, 0x2f }, { 0xc, 0xc6 }, { WAIT_IDLE }, +{ 0xa, 0x5a }, { 0xd, 0x0b }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x5c }, { 0xd, 0x30 }, { 0xc, 0x06 }, { WAIT_IDLE }, +{ 0xa, 0x5e }, { 0xd, 0x17 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x60 }, { 0xd, 0x3d }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xa, 0x62 }, { 0xd, 0x29 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x64 }, { 0xd, 0x3e }, { 0xc, 0x41 }, { WAIT_IDLE }, +{ 0xa, 0x66 }, { 0xd, 0x39 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x68 }, { 0xd, 0x4c }, { 0xc, 0x48 }, { WAIT_IDLE }, +{ 0xa, 0x6a }, { 0xd, 0x49 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x6c }, { 0xd, 0x4c }, { 0xc, 0x6c }, { WAIT_IDLE }, +{ 0xa, 0x6e }, { 0xd, 0x11 }, { 0xc, 0xd2 }, { WAIT_IDLE }, +{ 0xa, 0x70 }, { 0xd, 0x16 }, { 0xc, 0x0c }, { WAIT_IDLE }, +{ 0xa, 0x72 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x74 }, { 0xd, 0x00 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xa, 0x76 }, { 0xd, 0x0f }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x78 }, { 0xd, 0x00 }, { 0xc, 0x80 }, { WAIT_IDLE }, +{ 0xa, 0x7a }, { 0xd, 0x13 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x7c }, { 0xd, 0x80 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x7e }, { 0xd, 0x80 }, { 0xc, 0x80 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x07 }, { 0xa, 0x00 }, + +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x08 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x08 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x08 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x08 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0xe9 }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x8c }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x8c }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x1a }, { 0xc, 0x75 }, { WAIT_IDLE }, +{ 0xd, 0x0d }, { 0xc, 0x8b }, { WAIT_IDLE }, +{ 0xd, 0x04 }, { 0xc, 0xe9 }, { WAIT_IDLE }, +{ 0xd, 0x0b }, { 0xc, 0x16 }, { WAIT_IDLE }, +{ 0xd, 0x1a }, { 0xc, 0x38 }, { WAIT_IDLE }, +{ 0xd, 0x0d }, { 0xc, 0xc8 }, { WAIT_IDLE }, +{ 0xd, 0x04 }, { 0xc, 0x6f }, { WAIT_IDLE }, +{ 0xd, 0x0b }, { 0xc, 0x91 }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x8f }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x62 }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x62 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x7b }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x97 }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0x97 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x52 }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0xf6 }, { WAIT_IDLE }, +{ 0xd, 0x06 }, { 0xc, 0xf6 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x19 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x55 }, { WAIT_IDLE }, +{ 0xd, 0x14 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xd, 0x0d }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xd, 0x04 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xd, 0x14 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xd, 0x0d }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xd, 0x04 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xd, 0x05 }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, + +/* Now setup the MOD area. */ +{ 0xe, 0x01 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x02 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x03 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x04 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x05 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x06 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x07 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x08 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x09 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0a }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0b }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0c }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0d }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0e }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0f }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, + +{ 0xe, 0xb0 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb1 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb2 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb3 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb4 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb5 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb6 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb7 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb8 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb9 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xba }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xbb }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xbc }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xbd }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xbe }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xbf }, { 0xf, 0x20 }, { WAIT_IDLE }, + +{ 0xe, 0xf0 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf1 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf2 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf3 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf4 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf5 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf6 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf7 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf8 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf9 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xfa }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xfb }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xfc }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xfd }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xfe }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xff }, { 0xf, 0x20 }, { WAIT_IDLE }, + +{ 0xe, 0x10 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x11 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x12 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x13 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x14 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x15 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x16 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x17 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x18 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x19 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x1a }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x1b }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x1c }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x1d }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x1e }, { 0xf, 0x40 }, { WAIT_IDLE }, +{ 0xe, 0x1f }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x20 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x21 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x22 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x23 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x24 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x25 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x26 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x27 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x28 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x29 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x2a }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x2b }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x2c }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x2d }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x2e }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x2f }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x30 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x31 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x32 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x33 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x34 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x35 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x36 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x37 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x38 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x39 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x3a }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x3b }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x3c }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x3d }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x3e }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x3f }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0x40 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x41 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x42 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x43 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x44 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x45 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x46 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x47 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x48 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x49 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x4a }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x4b }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x4c }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x4d }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x4e }, { 0xf, 0x0e }, { WAIT_IDLE }, +{ 0xe, 0x4f }, { 0xf, 0x0e }, { WAIT_IDLE }, +{ 0xe, 0x50 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x51 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x52 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x53 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x54 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x55 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x56 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x57 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x58 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x59 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x5a }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x5b }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x5c }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x5d }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x5e }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x5f }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x60 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x61 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x62 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x63 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x64 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x65 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x66 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x67 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x68 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x69 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x6a }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x6b }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x6c }, { 0xf, 0x40 }, { WAIT_IDLE }, +{ 0xe, 0x6d }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x6e }, { 0xf, 0x40 }, { WAIT_IDLE }, +{ 0xe, 0x6f }, { 0xf, 0x40 }, { WAIT_IDLE }, +{ 0xe, 0x70 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x71 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x72 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x73 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x74 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x75 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x76 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x77 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x78 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x79 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x7a }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x7b }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x7c }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x7d }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x7e }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x7f }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x80 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x81 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x82 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x83 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x84 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x85 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x86 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x87 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x88 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x89 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x8a }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x8b }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x8c }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x8d }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x8e }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x8f }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x90 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x91 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x92 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x93 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x94 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x95 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x96 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x97 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x98 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x99 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x9a }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x9b }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x9c }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x9d }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x9e }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x9f }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa8 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa9 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xaa }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xab }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xac }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xad }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xae }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xaf }, { 0xf, 0x00 }, { WAIT_IDLE }, + +{ 0xe, 0xc0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc8 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc9 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xca }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xcb }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xcc }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xcd }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xce }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xcf }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd8 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd9 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xda }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xdb }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xdc }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xdd }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xde }, { 0xf, 0x10 }, { WAIT_IDLE }, +{ 0xe, 0xdf }, { 0xf, 0x10 }, { WAIT_IDLE }, +{ 0xe, 0xe0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe8 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe9 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xea }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xeb }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xec }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xed }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xee }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xef }, { 0xf, 0x00 }, { WAIT_IDLE }, + +{ 0xe, 0x01 }, { 0xf, 0x00 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x01 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x02 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x03 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x04 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x05 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x06 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x07 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x08 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x09 }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0a }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0b }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0c }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0d }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0e }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x0f }, { 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, + +/* mute on */ +{ 0x8, 0x02 }, + +/* Now set the coefficients and so forth for the programs above */ +{ 0xb, 0x07 }, { 0xa, 0x46 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x49 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x4b }, { 0xd, 0x03 }, { 0xc, 0x11 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x4d }, { 0xd, 0x01 }, { 0xc, 0x32 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x46 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x49 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x40 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x41 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x01 }, { 0xa, 0x40 }, { 0xd, 0x02 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xb, 0x01 }, { 0xa, 0x41 }, { 0xd, 0x02 }, { 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x40 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x41 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x47 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x4a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x47 }, { 0xd, 0x01 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x4a }, { 0xd, 0x01 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x47 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x4a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x00 }, { 0xd, 0x01 }, { 0xc, 0x1c }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x44 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x44 }, { 0xd, 0x01 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x44 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x42 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x43 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x42 }, { 0xd, 0x01 }, { 0xc, 0x1a }, { WAIT_IDLE }, +{ 0xb, 0x00 }, { 0xa, 0x43 }, { 0xd, 0x01 }, { 0xc, 0x20 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x42 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x43 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x40 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x41 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x01 }, { 0xa, 0x40 }, { 0xd, 0x02 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xb, 0x01 }, { 0xa, 0x41 }, { 0xd, 0x02 }, { 0xc, 0x60 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x40 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x41 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x44 }, { 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x42 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x43 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x40 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x41 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x51 }, { 0xd, 0x06 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x50 }, { 0xd, 0x06 }, { 0xc, 0x40 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x4f }, { 0xd, 0x03 }, { 0xc, 0x81 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x53 }, { 0xd, 0x1a }, { 0xc, 0x76 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x54 }, { 0xd, 0x0d }, { 0xc, 0x8b }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x55 }, { 0xd, 0x04 }, { 0xc, 0xe9 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x56 }, { 0xd, 0x0b }, { 0xc, 0x17 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x57 }, { 0xd, 0x1a }, { 0xc, 0x38 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x58 }, { 0xd, 0x0d }, { 0xc, 0xc9 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x59 }, { 0xd, 0x04 }, { 0xc, 0x6f }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x5a }, { 0xd, 0x0b }, { 0xc, 0x91 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x73 }, { 0xd, 0x14 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x74 }, { 0xd, 0x0d }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x75 }, { 0xd, 0x04 }, { 0xc, 0xd9 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x76 }, { 0xd, 0x05 }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x77 }, { 0xd, 0x14 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x78 }, { 0xd, 0x0d }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x79 }, { 0xd, 0x04 }, { 0xc, 0xd9 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7a }, { 0xd, 0x05 }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x5e }, { 0xd, 0x03 }, { 0xc, 0x68 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x5c }, { 0xd, 0x04 }, { 0xc, 0x31 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x5d }, { 0xd, 0x04 }, { 0xc, 0x31 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x62 }, { 0xd, 0x03 }, { 0xc, 0x52 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x60 }, { 0xd, 0x04 }, { 0xc, 0x76 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x61 }, { 0xd, 0x04 }, { 0xc, 0x76 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x66 }, { 0xd, 0x03 }, { 0xc, 0x2e }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x64 }, { 0xd, 0x04 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x65 }, { 0xd, 0x04 }, { 0xc, 0xda }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x6a }, { 0xd, 0x02 }, { 0xc, 0xf6 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x68 }, { 0xd, 0x05 }, { 0xc, 0x62 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x69 }, { 0xd, 0x05 }, { 0xc, 0x62 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x46 }, { 0xd, 0x0a }, { 0xc, 0x22 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x48 }, { 0xd, 0x0d }, { 0xc, 0x24 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x6e }, { 0xd, 0x11 }, { 0xc, 0xd3 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x70 }, { 0xd, 0x15 }, { 0xc, 0xcb }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x52 }, { 0xd, 0x20 }, { 0xc, 0x93 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x54 }, { 0xd, 0x20 }, { 0xc, 0x54 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x4a }, { 0xd, 0x27 }, { 0xc, 0x1d }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x58 }, { 0xd, 0x2f }, { 0xc, 0xc8 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x5c }, { 0xd, 0x30 }, { 0xc, 0x07 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x4c }, { 0xd, 0x37 }, { 0xc, 0x90 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x60 }, { 0xd, 0x3d }, { 0xc, 0xdb }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x64 }, { 0xd, 0x3e }, { 0xc, 0x42 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x4e }, { 0xd, 0x45 }, { 0xc, 0x78 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x68 }, { 0xd, 0x4c }, { 0xc, 0x48 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x6c }, { 0xd, 0x4c }, { 0xc, 0x6c }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x50 }, { 0xd, 0x52 }, { 0xc, 0xe2 }, { WAIT_IDLE }, +{ 0xb, 0x06 }, { 0xa, 0x42 }, { 0xd, 0x02 }, { 0xc, 0xba }, { WAIT_IDLE }, + +/* Some settings (?) */ +{ WAIT_IDLE }, { 0xe, 0x1e }, { 0xf, 0x14 }, +{ WAIT_IDLE }, { 0xe, 0xde }, { 0xf, 0x20 }, +{ WAIT_IDLE }, { 0xe, 0xdf }, { 0xf, 0x20 }, + +/* some more coefficients */ +{ WAIT_IDLE }, { 0xb, 0x06 }, { 0xa, 0x78 }, { 0xd, 0x00 }, { 0xc, 0x40 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x03 }, { 0xd, 0x0f }, { 0xc, 0xff }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x0b }, { 0xd, 0x0f }, { 0xc, 0xff }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x02 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x0a }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x46 }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ WAIT_IDLE }, { 0xb, 0x07 }, { 0xa, 0x49 }, { 0xd, 0x00 }, { 0xc, 0x00 }, + +/* Now, for some strange reason, lets reload every page + and all the coefficients over again. I have *NO* idea + why this is done. I do know that no sound is produced + is this phase is omitted. */ +{ 0x9, 0x05 }, { 0xb, 0x00 }, { 0xa, 0x10 }, + +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x02 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x01 }, { 0xa, 0x10 }, + +{ 0xd, 0x01 }, { 0xc, 0xc0 }, { WAIT_IDLE }, +{ 0xd, 0x01 }, { 0xc, 0xfa }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x1a }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, + +{ WAIT_IDLE }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x02 }, { 0xa, 0x10 }, + +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x46 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x03 }, { 0xa, 0x10 }, + +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x04 }, { 0xa, 0x10 }, + +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xc, 0x00 }, { WAIT_IDLE }, + +/* Page six v.2 */ +{ 0x9, 0x01 }, { 0xb, 0x06 }, + +{ 0xa, 0x10 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x12 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x14 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x16 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x18 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x1a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x1c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x1e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x20 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x22 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x24 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x26 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x28 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x2a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x2c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x2e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x30 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x32 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x34 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x36 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x38 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x3a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x3c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xa, 0x3e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, + +{ 0x9, 0x05 }, { 0xb, 0x07 }, { 0xa, 0x10 }, + +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, + +{ 0xe, 0x01 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x02 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x03 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x04 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x05 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x06 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x07 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xb0 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb1 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb2 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb3 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb4 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb5 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb6 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xb7 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf0 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf1 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf2 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf3 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf4 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf5 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf6 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0xf7 }, { 0xf, 0x20 }, { WAIT_IDLE }, +{ 0xe, 0x10 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x11 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x12 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x13 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x14 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x15 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x16 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x17 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x20 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x21 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x22 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x23 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x24 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x25 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x26 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x27 }, { 0xf, 0xff }, { WAIT_IDLE }, +{ 0xe, 0x30 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x31 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x32 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x33 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x34 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x35 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x36 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x37 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x40 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x41 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x42 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x43 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x44 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x45 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x46 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x47 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x50 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x51 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x52 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x53 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x54 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x55 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x56 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x57 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x60 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x61 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x62 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x63 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x64 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x65 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x66 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x67 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x70 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x71 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x72 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x73 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x74 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x75 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x76 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x77 }, { 0xf, 0xc0 }, { WAIT_IDLE }, +{ 0xe, 0x80 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x81 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x82 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x83 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x84 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x85 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x86 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x87 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x90 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x91 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x92 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x93 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x94 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x95 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x96 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x97 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xa7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xc7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xd7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe0 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe1 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe2 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe3 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe4 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe5 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe6 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0xe7 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x00 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x02 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x03 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x04 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x05 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x06 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, +{ 0xe, 0x01 }, { 0xf, 0x07 }, { WAIT_IDLE }, +{ 0xe, 0x02 }, { 0xf, 0x01 }, { WAIT_IDLE }, + +{ 0xb, 0x07 }, { 0xa, 0x46 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x49 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x45 }, { 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x48 }, { 0xd, 0x0f }, { 0xc, 0xff }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7b }, { 0xd, 0x04 }, { 0xc, 0xcc }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7d }, { 0xd, 0x04 }, { 0xc, 0xcc }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x7e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x46 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x49 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x47 }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x4a }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0x00 }, { WAIT_IDLE }, + +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x00 }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x00 }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x01 }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x01 }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x01 }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x01 }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x01 }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x01 }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x01 }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x01 }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x01 }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x01 }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x01 }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x01 }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x02 }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x02 }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x02 }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x02 }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x02 }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x02 }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x02 }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x02 }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x02 }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x02 }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x02 }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x02 }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x03 }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x03 }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x03 }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x03 }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x03 }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x03 }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x03 }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x03 }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x03 }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x03 }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x03 }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x03 }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x04 }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x04 }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x05 }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x05 }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x05 }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x05 }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x05 }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x05 }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x05 }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x05 }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x05 }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x05 }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x05 }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x05 }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x06 }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x06 }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x06 }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x06 }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x06 }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x06 }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x06 }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x06 }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x06 }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x06 }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x06 }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x06 }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x07 }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x07 }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x07 }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x07 }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x07 }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x07 }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x07 }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x07 }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x07 }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x07 }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x07 }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x07 }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x08 }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x08 }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x09 }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x09 }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x09 }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x09 }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x09 }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x09 }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x09 }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x09 }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x09 }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x09 }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x09 }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x09 }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0a }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0a }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0a }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0a }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0a }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0a }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0a }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0a }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0a }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0a }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0a }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0a }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0b }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0b }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0b }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0b }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0b }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0b }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0b }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0b }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0b }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0b }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0b }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0b }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0x00 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0x28 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0x51 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0x7a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0xa3 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0xcc }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0c }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0c }, { 0xc, 0xf5 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0d }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0d }, { 0xc, 0x1e }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0d }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0d }, { 0xc, 0x47 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0d }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0d }, { 0xc, 0x70 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0d }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0d }, { 0xc, 0x99 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0d }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0d }, { 0xc, 0xc2 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0d }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0d }, { 0xc, 0xeb }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0e }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0e }, { 0xc, 0x14 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0e }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0e }, { 0xc, 0x3d }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0e }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0e }, { 0xc, 0x66 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0e }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0e }, { 0xc, 0x8f }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0e }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0e }, { 0xc, 0xb8 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0e }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0e }, { 0xc, 0xe1 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0x0a }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0x33 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0x5c }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0x85 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0xae }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0xd7 }, +{ 0xb, 0x07 }, { 0xa, 0x4c }, { 0xd, 0x0f }, { 0xc, 0xff }, +{ 0xb, 0x07 }, { 0xa, 0x4e }, { 0xd, 0x0f }, { 0xc, 0xff }, + +/* mute off */ +{ 0x8, 0x00 }, { WAIT_IDLE } +}; diff --git a/trunk/sound/pci/hda/hda_intel.c b/trunk/sound/pci/hda/hda_intel.c index 7ba8db5d4c42..30829ee920c3 100644 --- a/trunk/sound/pci/hda/hda_intel.c +++ b/trunk/sound/pci/hda/hda_intel.c @@ -2260,11 +2260,11 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, gcap &= ~0x01; /* allow 64bit DMA address if supported by H/W */ - if ((gcap & 0x01) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64))) - pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64)); + if ((gcap & 0x01) && !pci_set_dma_mask(pci, DMA_64BIT_MASK)) + pci_set_consistent_dma_mask(pci, DMA_64BIT_MASK); else { - pci_set_dma_mask(pci, DMA_BIT_MASK(32)); - pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)); + pci_set_dma_mask(pci, DMA_32BIT_MASK); + pci_set_consistent_dma_mask(pci, DMA_32BIT_MASK); } /* read number of streams from GCAP register instead of using